+```
+
+## Run and deploy docker image directly to kubectl
+
+The following command will launch a deployment called http which will start a container based on the Docker Image katacoda/docker-http-server:latest.
+
+```kubectl run http --image=katacoda/docker-http-server:latest --replicas=1```
+
+
+Use the following command to expose the container port 80 on the host 8000 binding to the external-ip of the host.
+
+```kubectl expose deployment http --external-ip="172.17.0.57" --port=8000 --target-port=80```
+
+You will then be able to ping the host and see the result from the HTTP service.
+
+```curl http://172.17.0.57:8000```
+
+
+Use the command command to create a second http service exposed on port 8001.
+
+```kubectl run httpexposed --image=katacoda/docker-http-server:latest --replicas=1 --port=80 --hostport=8001```
+
+You should be able to access it using curl http://172.17.0.57:8001
+
+Under the covers, this exposes the Pod via Docker Port Mapping. As a result, you will not see the service listed using kubectl get svc
+
+To find the details you can use ```docker ps | grep httpexposed```
\ No newline at end of file
diff --git a/Data-streaming/amazon-kinesis.md b/Data-streaming/amazon-kinesis.md
new file mode 100644
index 00000000..25345584
--- /dev/null
+++ b/Data-streaming/amazon-kinesis.md
@@ -0,0 +1,17 @@
+## Amazon Kinesis
+
+Amazon Kinesis makes it easy to collect, process, and analyze real-time, streaming data so you can get timely insights and react quickly to new information. Amazon Kinesis offers key capabilities to cost-effectively process streaming data at any scale, along with the flexibility to choose the tools that best suit the requirements of your application. With Amazon Kinesis, you can ingest real-time data such as video, audio, application logs, website clickstreams, and IoT telemetry data for machine learning, analytics, and other applications. Amazon Kinesis enables you to process and analyze data as it arrives and respond instantly instead of having to wait until all your data is collected before the processing can begin.
+
+Benefits:
+- Real-time: Amazon Kinesis enables you to ingest, buffer, and process streaming data in real-time, so you can derive insights in seconds or minutes instead of hours or days.
+- Fully Managed: Amazon Kinesis is fully managed and runs your streaming applications without requiring you to manage any infrastructure.
+- Scalable: Amazon Kinesis can handle any amount of streaming data and process data from hundreds of thousands of sources with very low latencies
+
+Capabilities:
+- Amazon Kinesis Video Streams makes it easy to securely stream video from connected devices to AWS for analytics, machine learning (ML), and other processing.
+- Amazon Kinesis Data Streams is a scalable and durable real-time data streaming service that can continuously capture gigabytes of data per second from hundreds of thousands of sources.
+- Amazon Kinesis Data Firehose is the easiest way to capture, transform, and load data streams into AWS data stores for near real-time analytics with existing business intelligence tools.
+- Amazon Kinesis Data Analytics is the easiest way to process data streams in real time with SQL or Apache Flink without having to learn new programming languages or processing frameworks.
+
+
+For more info: [https://aws.amazon.com/kinesis/](https://aws.amazon.com/kinesis/)
diff --git a/Data-streaming/apache-kafka.md b/Data-streaming/apache-kafka.md
new file mode 100644
index 00000000..eaa93f6d
--- /dev/null
+++ b/Data-streaming/apache-kafka.md
@@ -0,0 +1,19 @@
+## Apache Kafka
+
+Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications.
+
+Core Capabilities:
+- Deliver messages at network limited throughput using a cluster of machines with latencies as low as 2ms.
+- Scale production clusters up to a thousand brokers, trillions of messages per day, petabytes of data, hundreds of thousands of partitions. Elastically expand and contract storage and processing.
+- Store streams of data safely in a distributed, durable, fault-tolerant cluster.
+- Stretch clusters efficiently over availability zones or connect separate clusters across geographic regions.
+
+
+Ecosystem:
+- Process streams of events with joins, aggregations, filters, transformations, and more, using event-time and exactly-once processing.
+- Kafka’s out-of-the-box Connect interface integrates with hundreds of event sources and event sinks including Postgres, JMS, Elasticsearch, AWS S3, and more.
+- Read, write, and process streams of events in a vast array of programming languages.
+- Large ecosystem of open source tools: Leverage a vast array of community-driven tooling.
+
+
+For more info: [https://kafka.apache.org/](https://kafka.apache.org/)
diff --git a/Data-streaming/apache-storm.md b/Data-streaming/apache-storm.md
new file mode 100644
index 00000000..f967e7ef
--- /dev/null
+++ b/Data-streaming/apache-storm.md
@@ -0,0 +1,11 @@
+## Apache Storm
+
+Apache Storm is a free and open source distributed realtime computation system. Apache Storm makes it easy to reliably process unbounded streams of data, doing for realtime processing what Hadoop did for batch processing. Apache Storm is simple, can be used with any programming language, and is a lot of fun to use!
+
+Apache Storm has many use cases: realtime analytics, online machine learning, continuous computation, distributed RPC, ETL, and more. Apache Storm is fast: a benchmark clocked it at over a million tuples processed per second per node. It is scalable, fault-tolerant, guarantees your data will be processed, and is easy to set up and operate.
+
+Apache Storm integrates with the queueing and database technologies you already use. An Apache Storm topology consumes streams of data and processes those streams in arbitrarily complex ways, repartitioning the streams between each stage of the computation however needed.
+
+Apache Storm integrates with any queueing system and any database system. Apache Storm's spout abstraction makes it easy to integrate a new queuing system. Likewise, integrating Apache Storm with database systems is easy.
+
+For more info: [https://storm.apache.org/](https://storm.apache.org/)
diff --git a/Data-streaming/azure-stream-analytics.md b/Data-streaming/azure-stream-analytics.md
new file mode 100644
index 00000000..0074ac65
--- /dev/null
+++ b/Data-streaming/azure-stream-analytics.md
@@ -0,0 +1,11 @@
+## Azure Stream Analytics
+
+Azure Stream Analytics is a fully managed stream processing engine that is designed to analyze and process large volumes of streaming data with sub-millisecond latencies. Patterns and relationships can be identified in data that originates from a variety of input sources including applications, devices, sensors, clickstreams, and social media feeds. These patterns can be used to trigger actions and initiate workflows such as creating alerts, feeding information to a reporting tool, or storing transformed data for later use. Stream Analytics is also available on the Azure IoT Edge runtime, enabling to process data directly on IoT devices.
+
+Features:
+- End-to-end analytics pipeline that is production-ready in minutes with familiar SQL syntax and extensible with JavaScript and C# custom code
+- Rapid scalability with elastic capacity to build robust streaming data pipelines and analyze millions of events at subsecond latencies
+- Hybrid architectures for stream processing with the ability to run the same queries in the cloud and on the edge
+- Enterprise-grade reliability with built-in recovery and built-in machine learning capabilities for advanced scenarios
+
+For more info: [https://learn.microsoft.com/en-us/azure/stream-analytics/stream-analytics-introduction](https://learn.microsoft.com/en-us/azure/stream-analytics/stream-analytics-introduction)
diff --git a/Data-streaming/gcloud-dataflow.md b/Data-streaming/gcloud-dataflow.md
new file mode 100644
index 00000000..d6eb4489
--- /dev/null
+++ b/Data-streaming/gcloud-dataflow.md
@@ -0,0 +1,16 @@
+## Google Cloud Dataflow
+
+Google Cloud Dataflow is a fully managed service for executing Apache Beam pipelines within the Google Cloud Platform ecosystem.
+
+Benefits:
+- Streaming data analytics with speed: Dataflow enables fast, simplified streaming data pipeline development with lower data latency.
+- Simplify operations and management: Allow teams to focus on programming instead of managing server clusters as Dataflow’s serverless approach removes operational overhead from data engineering workloads.
+- Reduce total cost of ownership: Resource autoscaling paired with cost-optimized batch processing capabilities means Dataflow offers virtually limitless capacity to manage your seasonal and spiky workloads without overspending.
+
+Features:
+- Autoscaling of resources and dynamic work rebalancing: Minimize pipeline latency, maximize resource utilization, and reduce processing cost per data record with data-aware resource autoscaling. Data inputs are partitioned automatically and constantly rebalanced to even out worker resource utilization and reduce the effect of “hot keys” on pipeline performance.
+- Flexible scheduling and pricing for batch processing: For processing with flexibility in job scheduling time, such as overnight jobs, flexible resource scheduling (FlexRS) offers a lower price for batch processing. These flexible jobs are placed into a queue with a guarantee that they will be retrieved for execution within a six-hour window.
+- Ready-to-use real-time AI patterns: Enabled through ready-to-use patterns, Dataflow’s real-time AI capabilities allow for real-time reactions with near-human intelligence to large torrents of events. Customers can build intelligent solutions ranging from predictive analytics and anomaly detection to real-time personalization and other advanced analytics use cases.
+
+
+For more info: [https://cloud.google.com/dataflow](https://cloud.google.com/dataflow)
diff --git a/Data-streaming/ibm-stream-analytics.md b/Data-streaming/ibm-stream-analytics.md
new file mode 100644
index 00000000..27892357
--- /dev/null
+++ b/Data-streaming/ibm-stream-analytics.md
@@ -0,0 +1,11 @@
+## IBM Stream Analytics
+
+IBM Streaming Analytics for IBM Cloud evaluates a broad range of streaming data — unstructured text, video, audio, geospatial and sensor — helping organizations spot opportunities and risks and make decisions in real time.
+
+Features:
+- Development support: Rich Eclipse-based, visual IDE lets solution architects visually build applications or use familiar programming languages like Java™, Scala or Python.
+- Rich data connections: Data engineers can connect with virtually any data source — whether structured, unstructured or streaming — and integrate with Hadoop, Spark and other data infrastructures.
+- Analysis and visualization: Built-in domain analytics — like machine learning, natural language, spatial-temporal, text, acoustics and more — to create adaptive streams applications.
+
+
+For more info: [https://www.ibm.com/in-en/cloud/streaming-analytics](https://www.ibm.com/in-en/cloud/streaming-analytics)
diff --git a/Data-streaming/readme.md b/Data-streaming/readme.md
new file mode 100644
index 00000000..18255520
--- /dev/null
+++ b/Data-streaming/readme.md
@@ -0,0 +1,16 @@
+# Data Streaming
+*****
+
+The term "streaming" is used to describe continuous, never-ending data streams with no beginning or end, that provide a constant feed of data that can be utilized/acted upon without needing to be downloaded first.
+
+
+****
+Following are some of the renowned services used for Data Streaming:
+
+- [Amazon Kinesis](amazon-kinesis.md)
+- [Apache Kafka](apache-kafka.md)
+- [Apache Storm](apache-storm.md)
+- [Spark streaming](spark-streaming.md)
+- [IBM Stream analytics](ibm-stream-analytics.md)
+- [Azure Stream Analytics](azure-stream-analytics.md)
+- [Google Cloud DataFlow](gcloud-dataflow.md)
diff --git a/Database/readme.md b/Database/readme.md
new file mode 100644
index 00000000..4da83acb
--- /dev/null
+++ b/Database/readme.md
@@ -0,0 +1,42 @@
+# Everything Database
+
+A ***database*** is an organized collection of structured information, or data, typically stored electronically in a computer system. It is usually controlled by a database management system (DBMS). Together, the data and the DBMS, along with the applications that are associated with them, are referred to as a database system, often shortened to just database.
+Most databases use ***Structured Query Language (SQL)*** for writing and querying data.
+
+## Structured Query Language (SQL)
+
+**SQL** is a standard language for storing, manipulating and retrieving data in relational databases. SQL was first developed at IBM in the 1970s with Oracle as a major contributor, which led to implementation of the SQL ANSI standard, SQL has spurred many extensions from companies such as IBM, Oracle, and Microsoft. Although SQL is still widely used today, new programming languages are beginning to appear
+
+## Evolution Of Database
+
+ **1.Flat Files (1970s-1990s)** : Flat files database is a database that stores information in a single file or table. In text file, every line contains one record where fields either have fixed length or they are separated by commas, whitespaces, tabs or any records and they cannot contain multiple tables as well.
+
+ **2.Hierarchical (1970s-1990s)** : As the name indicates, hierarchical database contains data in a hierarchically-arranged data. More Perceptively it can parent can have many children but one child can only have one parent i. e.,; one-to-many relationship. Its hierarchical structure contains levels or segments which are equivalent to the file system’s record type.
+
+ **3.Network database (1970s -1990s)** : The inventor of network model is Charles Bachmann. Unlike hierarchical database model, network database allows multiple parent and child relationships i. e., it maintains many-to many relationship. Network database is basically a graph structure. The network database model was created to achieve three main objectives:
+
+ a. To represent complex data relationship more effectively
+ b. To improve the performance of the database.
+ c. To improve a database standard.
+
+
+ **4.Realationl database (1980s-present)** : Relationship database model was proposed by E. F. Codd. After the hierarchical and network model the birth of this model was huge step ahead. It allows the entities to be related through a common attribute. In the table there are alternative keys. This property makes this model extremely flexible.
+
+ **5.Object – oriented database (1990s -present)** : Object-Oriented database management system is that database system in which the data or information is presented in the form of objects, much like in object-Oriented programming language. Furthermore, object oriented DBMS also facilitate the user by offering transportation support, language for various queries, and indexing options.
+
+ **6. Object- relationship database (1990s-present)** : Defined in simple teams, an object relationship database management system displays a modified object- oriented user- display over the already implemented relationship database management system. When various software interact with this modified- database management system, they will customarily operate in a manner such that data is assumed to be saved as objects.
+
+## Types of databases
+There are many different types of databases. The best database for a specific organization depends on how the organization intends to use the data.
+
+- **Relational databases:** Relational databases became dominant in the 1980s. Items in a relational database are organized as a set of tables with columns and rows. Relational database technology provides the most efficient and flexible way to access structured information.
+- **Object-oriented databases:** Information in an object-oriented database is represented in the form of objects, as in object-oriented programming.
+- **Distributed databases:** A distributed database consists of two or more files located in different sites. The database may be stored on multiple computers, located in the same physical location, or scattered over different networks.
+- **Data warehouses:** A central repository for data, a data warehouse is a type of database specifically designed for fast query and analysis.
+- **NoSQL databases:** A NoSQL, or nonrelational database, allows unstructured and semistructured data to be stored and manipulated (in contrast to a relational database, which defines how all data inserted into the database must be composed). NoSQL databases grew popular as web applications became more common and more complex.
+- **Graph databases:** A graph database stores data in terms of entities and the relationships between entities.
+- **OLTP databases:** An OLTP database is a speedy, analytic database designed for large numbers of transactions performed by multiple users.
+
+
+For more info: [https://www.oracle.com/in/database/what-is-database/#relational](https://www.oracle.com/in/database/what-is-database/#relational)
+
diff --git a/DevOps/CNCF.md b/DevOps/CNCF.md
new file mode 100644
index 00000000..f103f7bd
--- /dev/null
+++ b/DevOps/CNCF.md
@@ -0,0 +1,9 @@
+# CNCF DevOps
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DevOps/README.md b/DevOps/README.md
new file mode 100644
index 00000000..edaab4f2
--- /dev/null
+++ b/DevOps/README.md
@@ -0,0 +1,130 @@
+## DevOps Guide Topic Wise:
+
+### 1 Programming Language
+
+- Python : Scripting for web
+- Shell : Scripting for servers
+- Yml : For Configuration of Cloud files
+- Golang : Servers and Cloud Architectures
+- Javascript : Good to know for any web-development works
+- Markdown : For documentation
+
+
+### 2 OS-Concepts
+
+- Process Management
+- Threads and Concurrency
+- Sockets
+- POSIX Basics
+- Networking concepts
+- Cron Jobs
+- I/O Management
+- Vitualization
+- Memory Processes and Management
+- File Systems
+- Scheduling
+
+### 3 Maintaining Servers
+- Networking Concepts
+- Security Concepts - OWASP-Top 10
+- Protocols
+- Reverse Proxy | Proxy | Forward Proxy
+- Caching Servers
+- Load Balancer
+- Firewall
+- Webservers
+ - Python : WSGI | uWSGI | Tornado
+ - Nginx
+ - Apache
+ - Caddy
+ - IIS
+ - Tomcat
+ - Node.js
+
+
+### 4 Terminal Commands
+
+- Text Manipulation
+- Process Monitoring
+- Networking Processes
+- Bash scripting
+- Performance Management
+- vim
+- AWS CLI
+- Kubernetes CLI
+- Docker CLI
+- Cloud CLIs
+
+### 5 Infrastructure as Code
+
+- CI/CD
+ - Travis CI
+ - Circle CI
+ - Gitlab
+ - Jenkins
+ - Azure
+
+- Configuration Management
+ - Ansible
+ - Chef
+ - Puppet
+ - salt
+
+- Containers
+ - Docker
+ - LXC
+
+- Container Orchestration
+ - Kubernetes
+ - Mesos
+ - Docker SWARM
+ - Nomad
+ - Minikube
+ - Openshift
+ - Amazon ECS
+ - Google Kuberenetes Engine (GKE)
+
+- Infrsatructure Provisioning
+ - Hashicorp Terraform
+ - AWS Cloudformation
+ - Pulmi
+ - Redhat Ansible
+ - Azure Automation
+
+### 7 Infrastructure Monitoring
+
+- Prometheus
+- Grafana
+- Nagios
+- Zabbix
+
+### 6 Application Monitoring
+
+- Jaegar
+- New Relic
+- Open Tracing
+- Traceview
+
+### 8 Cloud Providers
+
+- Amazon AWS
+- Google GCP
+- Microsoft Azure
+- Digital Ocean
+- Linode
+- Vultr
+
+### 9 Log Management
+
+- Elastic Stack
+- Graylog
+- Splunk
+- Papertrail
+
+### 10 Version Control
+
+- Github
+- Bitbucket
+- Mercurial
+
+***************
diff --git a/Docker/node/node_modules/.bin/mime b/Docker/node/node_modules/.bin/mime
deleted file mode 120000
index fbb7ee0e..00000000
--- a/Docker/node/node_modules/.bin/mime
+++ /dev/null
@@ -1 +0,0 @@
-../mime/cli.js
\ No newline at end of file
diff --git a/Docker/node/package-lock.json b/Docker/node/package-lock.json
deleted file mode 100644
index e85f701c..00000000
--- a/Docker/node/package-lock.json
+++ /dev/null
@@ -1,374 +0,0 @@
-{
- "name": "nodejs-image-demo",
- "version": "1.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- }
- },
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
- },
- "body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
- "requires": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- }
- },
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
- },
- "content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
- },
- "cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
- },
- "express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "requires": {
- "accepts": "~1.3.7",
- "array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
- "content-type": "~1.0.4",
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.1.2",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- }
- },
- "finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- }
- },
- "forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
- },
- "http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "ipaddr.js": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
- "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
- },
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
- },
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
- },
- "mime-db": {
- "version": "1.40.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
- "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
- },
- "mime-types": {
- "version": "2.1.24",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
- "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
- "requires": {
- "mime-db": "1.40.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
- },
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
- },
- "proxy-addr": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
- "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
- "requires": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.9.0"
- }
- },
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
- },
- "range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
- },
- "raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
- }
- }
- },
- "serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- }
- },
- "setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
- },
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
- },
- "type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- }
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
- }
- }
-}
diff --git a/IaC/Terraform/readme.md b/IaC/Terraform/readme.md
deleted file mode 100644
index 46f96ad8..00000000
--- a/IaC/Terraform/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# Terraform
diff --git a/IaC/readme.md b/IaC/readme.md
deleted file mode 100644
index f9db6e77..00000000
--- a/IaC/readme.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Infrastructure as Code
-
-
-- Puppet runs the data centers for several significant companies like Reddit, Dell, and Google and runs on all OS systems. It also has one of the most advanced interfaces on this list. It has been on the market for a long time and uses Ruby-based DSL as the primary language for defining the desired end state of the infrastructure. I said “end state” because that is what you need to define.
-- Puppet will then figure out the best way to achieve that end state for you. It also monitors the infrastructure for changes that deviate away from the defined end state and automatically corrects those changes too. This is a tool developed specifically for system administrators thanks to considerable enterprise and community support provided.
-
-- Choosing the best IaC tool is a matter of finding one that suits your personal preference and specific needs best. Two of the most important things to make an IaC system easy to use for you are consistency in both how you utilize it and environmental awareness. Also, find the programming language that works the best for you and your team. As you will spend a lot of time—at least to begin with—writing content, choose what your team can best communicate in. What makes you most productive?
\ No newline at end of file
diff --git a/Infrastructure-provisioning/Ansible/Ansible Commands.md b/Infrastructure-provisioning/Ansible/Ansible Commands.md
new file mode 100644
index 00000000..265cd040
--- /dev/null
+++ b/Infrastructure-provisioning/Ansible/Ansible Commands.md
@@ -0,0 +1,1030 @@
+## Ansible Commands
+## installation
+```sh
+yum install ansible
+apt install ansible
+```
+```sh
+pip3 install ansible
+# for python2 - default installation
+pip install ansible
+```
+remote machine should have 'python' - 'gather_facts: False' or 'gather_facts: no' otherwise
+
+## uninstall
+```sh
+rm -rf $HOME/.ansible
+rm -rf $HOME/.ansible.cfg
+sudo rm -rf /usr/local/lib/python2.7/dist-packages/ansible
+sudo rm -rf /usr/local/lib/python2.7/dist-packages/ansible-2.5.4.dist-info
+sudo rm -rf /usr/local/bin/ansible
+sudo rm -rf /usr/local/bin/ansible-config
+sudo rm -rf /usr/local/bin/ansible-connection
+sudo rm -rf /usr/local/bin/ansible-console
+sudo rm -rf /usr/local/bin/ansible-doc
+sudo rm -rf /usr/local/bin/ansible-galaxy
+sudo rm -rf /usr/local/bin/ansible-inventory
+sudo rm -rf /usr/local/bin/ansible-playbook
+sudo rm -rf /usr/local/bin/ansible-pull
+sudo rm -rf /usr/local/bin/ansible-vault
+sudo rm -rf /usr/lib/python2.7/dist-packages/ansible
+sudo rm -rf /usr/local/lib/python2.7/dist-packages/ansible
+```
+
+## ansible configuration places
+* path variable $Ansible_Config
+* ~/.ansible.cfg
+* /etc/ansible/ansible.cfg
+```sh
+ansible-config view
+# list of possible environment variables
+ansible-config dump
+```
+
+### configuration for external roles
+filename: ~/.ansible.cfg
+```properties
+[defaults]
+roles_path = ~/repos/project1/roles:~/repos/project2/roles
+```
+
+### check configuration
+```sh
+ansible-config view
+```
+
+## inventory
+### without inventory inline host ip
+```
+ansible all -i desp000111.vantage.zur, --user=my_user -m "ping" -vvv
+```
+
+### without inventory with pem ssh private ssh key
+generate PEM file
+```sh
+ssh-keygen -t rsa -b 4096 -m PEM -f my_ssh_key.pem
+ll my_ssh_key.pem
+
+ansible all -i desp000111.vantage.zur, --user=vitalii.cherkashyn -e ansible_ssh_private_key_file=my_ssh_key.pem -m "ping" -vvv
+```
+
+### ini file
+```properties
+# example cfg file
+[web]
+host1
+host2 ansible_port=222 # defined inline, interpreted as an integer
+
+[web:vars]
+http_port=8080 # all members of 'web' will inherit these
+myvar=23 # defined in a :vars section, interpreted as a string
+```
+
+## execute with specific remote python version, remote python, rewrite default variables, rewrite variables, override variable
+```
+--extra-vars "remote_folder=$REMOTE_FOLDER ansible_python_interpreter=/usr/bin/python"
+```
+
+## execute ansible for one host only, one host, one remove server, verbosity
+```sh
+ansible-playbook -i "ubs000015.vantage.org , " mkdir.yaml
+
+ansible-playbook welcome-message.yaml -i airflow-test-account-01.ini --limit worker --extra-vars="ACCOUNT_ID=QA01" --user=ubuntu --ssh-extra-args="-i $EC2_KEY" -vvv
+
+ansible all -i airflow-test-account-01.ini --user=ubuntu --ssh-extra-args="-i $EC2_KEY" -m "ping" -vvv
+ansible main,worker -i airflow-test-account-01.ini --user=ubuntu --ssh-extra-args="-i $EC2_KEY" -m "ping"
+```
+simple file for creating one folder
+```yaml
+- hosts: all
+ tasks:
+ - name: Creates directory
+ file:
+ path: ~/spark-submit/trafficsigns
+ state: directory
+ mode: 0775
+ - name: copy all files from folder
+ copy:
+ src: "/home/projects/ubs/current-task/nodes/ansible/files"
+ dest: ~/spark-submit/trafficsigns
+ mode: 0775
+
+ - debug: msg='folder was amazoncreated for host {{ ansible_host }}'
+```
+
+## execute ansible locally, local execution
+```sh
+# --extra-vars="mapr_stream_path={{ some_variable_from_previous_files }}/some-argument" \
+
+ansible localhost \
+ --extra-vars="deploy_application=1" \
+ --extra-vars=@group_vars/all/vars/all.yml \
+ --extra-vars=@group_vars/ubs-staging/vars/ubs-staging.yml \
+ -m include_role \
+ -a name="roles/labeler"
+```
+
+
+## execute ansible-playbook with external paramters, bash script ansible-playbook with parameters, extra variables, external variables, env var
+```j2
+# variable from env
+{{ lookup('env','DB_VARIANT_USERNAME') }}
+```
+```sh
+ansible-playbook -i inventory.ini playbook.yml --extra-vars "$*"
+```
+with path to file for external parameters, additional variables from external file
+```sh
+ansible-playbook -i inventory.ini playbook.yml --extra-vars @/path/to/var.properties
+ansible-playbook playbook.yml --extra-vars=@/path/to/var.properties
+```
+
+## external variables inline
+```sh
+ansible-playbook playbook.yml --extra-vars="oc_project=scenario-test mapr_stream_path=/mapr/prod.zurich/vantage/scenario-test"
+```
+
+## check is it working, ad-hoc command
+```sh
+ansible remote* -i inventory.ini -m "ping"
+ansible remote* -i inventory.ini --module-name "ping"
+```
+```sh
+ansible remote* -i inventory.ini -a "hostname"
+```
+
+## loop example
+```sh
+ - name: scripts {{ item }}
+ template:
+ mode: 0777
+ src: "templates/{{ item }}"
+ dest: "{{ root_folder }}/{{ item }}"
+ loop:
+ - "start-all.sh"
+ - "status.sh"
+ - "stop-all.sh"
+```
+
+## repeat execution
+```sh
+--limit {playbookfile}.retry
+```
+
+## start with task, execute from task, begin with task, skip previous tasks
+```sh
+ansible-playbook playbook.yml --start-at-task="name of the start to be started from"
+```
+
+## replace variables inside file to dedicated file, move vars to separate file
+* before
+```yaml
+ vars:
+ db_user: my_user
+ db_password: my_password
+ ansible_ssh_pass: my_ssh_password
+ ansible_host: 192.168.1.14
+```
+* after
+*( 'vars' block is empty )*
+filepath:
+```sh
+./host_vars/id_of_the_server
+```
+or groupvars:
+```sh
+./group_vars/id_of_the_group_into_square_brakets
+```
+code
+```yaml
+db_user: my_user
+db_password: my_password
+ansible_ssh_pass: my_ssh_password
+ansible_host: 192.168.1.14
+```
+
+## move code to separate file, tasks into file
+cut code from original file and paste it into separate file ( with appropriate alignment !!! ),
+write instead of the code:
+```yaml
+ - include: path_to_folder/path_to_file
+```
+approprate file should be created:
+```sh
+./path_to_folder/path_to_file
+```
+
+## skip/activate some tasks with labeling, tagging
+```yaml
+tasks:
+- template
+ src: template/activation.sh.j2
+ dest: /usr/bin/activation.sh
+ tags:
+ - flag_activation
+```
+multitag, multi-tag
+```yaml
+tasks:
+- template
+ src: template/activation.sh.j2
+ dest: /usr/bin/activation.sh
+ tags:
+ - flag_activation
+ - flag_skip
+```
+
+```sh
+ansible-playbook previous-block.yml --skip-tags "flag_activation"
+# ansible-playbook previous-block.yml --skip-tags=flag_activation
+# ansible-playbook previous-block.yml --tags "flag_activation"
+# ansible-playbook previous-block.yml --tags=flag_activation
+```
+# Debug
+## [debug playbook](https://docs.ansible.com/ansible/latest/user_guide/playbooks_debugger.html)
+```bash
+export ANSIBLE_STRATEGY=debug
+# revert it afterwards ( avoid "ERROR! Invalid play strategy specified: "):
+# export ANSIBLE_STRATEGY=linear
+```
+print variables
+```python
+task.args
+task.args['src']
+vars()
+```
+change variables
+```python
+del(task.args['src'])
+task.args['src']="/new path to file"
+```
+set variable
+```
+- name: Set Apache URL
+ set_fact:
+ apache_url: 'http://example.com/apache'
+
+- name: Download Apache
+ shell: wget {{ apache_url }}
+```
+shell == ansible.builtin.shell
+
+manage palying
+```
+redo
+continue
+quit
+```
+
+```yaml
+- name: airflow setup for main (web server) and workers
+ hosts: all
+ tasks:
+ - name: airflow hostname
+ debug: msg="{{ lookup('vars', 'ansible_host') }}"
+ - name: all variables from host
+ debug: msg="{{ vars }}"
+ when: run_mode == "debug"
+```
+
+## debug command
+```
+ - debug:
+ msg: "print variable: {{ my_own_var }}"
+```
+```
+ - shell: /usr/bin/uptime
+ register: result
+
+ - debug:
+ var: result
+```
+
+## env variables bashrc
+```sh
+- name: source bashrc
+ sudo: no
+ shell: . /home/username/.bashrc && [the actual command you want run]
+```
+
+## rsync copy files
+```
+ - name: copy source code
+ synchronize:
+ src: '{{ item.src }}'
+ dest: '{{ item.dest }}'
+ delete: yes
+ recursive: yes
+ rsync_opts:
+ - "--exclude=.git"
+ - "-avz"
+ - '-e ssh -i {{ key }} '
+ with_items:
+ - { src: '{{ path_to_repo }}/airflow-dag/airflow_shopify/', dest: '/home/ubuntu/airflow/airflow-dag/airflow_shopify/' }
+
+```
+
+## ec2 managing airflow ec2
+```
+export PATH=$PATH:/home/ubuntu/.local/bin
+nohup airflow webserver
+```
+
+## debug module
+argument file ( args.json )
+```json
+{
+ "ANSIBLE_MODULE_ARGS": {
+ "task_parameter_1": "just a string",
+ "task_parameter_2": 50
+ }
+}
+```
+execute file
+```bash
+python3 -m pdb library/oc_collaboration.py args.json
+```
+set breakpoint
+```python
+import pdb
+...
+pdb.set_trace()
+```
+run until breakpoint
+```sh
+until 9999
+next
+```
+
+## debug module inline, execute module inline, adhoc module check
+```sh
+ansible localhost -m debug --args msg="my custom message"
+# collect facts
+ansible localhost -m setup
+```
+
+## task print all variables
+```yaml
+- name: "Ansible | List all known variables and facts"
+ debug:
+ var: hostvars[inventory_hostname]
+```
+
+## ansible-console
+```sh
+ansible-console
+debug msg="my custom message"
+shell pwd
+```
+
+# error handling, try catch
+## stop execution of steps (of playbook) when at least one server will throw error
+```yaml
+ any_errors_fatal:true
+```
+## not to throw error for one certain task
+```yaml
+ - mail:
+ to: 1@yahoo.com
+ subject: info
+ body: das ist information
+ ignore_errors: yes
+```
+## fail when, fail by condition, parse log file for errors
+```yaml
+ - command: cat /var/log/server.log
+ register: server_log_file
+ failed_when : "'ERROR' in server_log_file.stdout"
+```
+
+# template, Jinja2 templating, pipes, [ansible filtering](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html)
+default value
+```
+default path is {{ my_custom_path | default("/opt/program/script.sh") }}
+```
+escape special characters
+```
+{{ '{{ filename }}.log' }}
+```
+
+operation with list
+```
+{{ [1,2,3] | min }}
+{{ [1,2,3] | max }}
+{{ [1,2,3] | first }}
+{{ [1,2,3] | last }}
+{{ [1,2,3,2,3,] | unique }}
+{{ [1,2,3] | union([1,2]) }}
+{{ [1,2,3] | intersect([3]) }}
+{{ 100 | random }}
+{{ ["space", "separated", "value"] | join(" ") }}
+{{'latest' if (my_own_value is defined) else 'local-build'}}
+```
+file name from path (return 'script.sh')
+```
+{{ "/etc/program/script.sh" | basename }}
+```
+## copy file and rename it, pipe replace suffix
+```yaml
+- name: Create DAG config
+ template: src={{ item }} dest={{ airflow_dag_dir }}/config/{{ item | basename | regex_replace('\.j2','') }}
+ with_fileglob:
+ - ../airflow_dags/airflow_dags_gt/config/*.py.j2
+```
+
+## copy reverse copy from destination machine
+```
+- name: Fetch template
+ fetch:
+ src: '{{ only_file_name }}'
+ dest: '{{ destination_folder }}'
+ flat: yes
+ tags: deploy
+```
+
+## directives for Jinja
+for improving indentation globally in file, add one of next line in the beginning
+```yaml
+#jinja2: lstrip_blocks: True
+#jinja2: trim_blocks:False
+#jinja2: lstrip_blocks: True, trim_blocks: True
+```
+for improving indentation only for the block
+```j2
+
+ {%+ if something %}hello{% endif %}
+
+```
+condition example
+```j2
+{% if lookup('env','DEBUG') == "true" %}
+ CMD ["java", "start-debug"]
+{% else %}
+ CMD ["java", "start"]
+{% endif %}
+```
+
+### directives for loop, for last, loop last
+```
+[
+{% for stream in deployment.streams %}
+ {
+ "stream": "{{ stream.stream_name }}",
+ "classN": "{{ stream.class_name }}",
+ "script": "{{ stream.script_name }}",
+ "sibFolders": [
+ {% for folder in stream.sub_folders %}
+ "{{ folder }}"{% if not loop.last %},{% endif %}
+ {% endfor %}
+ ]
+ }{% if not loop.last %},{% endif %}
+{% endfor %}
+]
+```
+
+## escaping
+just a symbol
+```
+{{ '{{' }}
+```
+bigger piece of code
+```
+{% raw %}
+
+ {% for item in seq %}
+ - {{ item }}
+ {% endfor %}
+
+{% endraw %}
+```
+
+
+## template with tempfile
+```
+- hosts: localhost
+ gather_facts: no
+ tasks:
+ - tempfile:
+ state: file
+ suffix: config
+ register: temp_config
+
+ - template:
+ src: templates/configfile.j2
+ dest: "{{ temp_config.path }}"
+```
+# [modules](https://github.com/ansible/ansible/tree/devel/lib/ansible/modules)
+* [create custom module](https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_general.html)
+## settings for modules
+also need to 'notify' ansible about module giving one of the next option:
+* add your folder with module to environment variable ANSIBLE_LIBRARY
+* update $HOME/.ansible.cfg
+ ```properties
+ library=/path/to/module/library
+ ```
+
+## module documentation
+```
+ansible-doc -t module {name of the module}
+```
+
+## minimal module
+```
+from ansible.module_utils.basic import AnsibleModule
+def main():
+ input_fields = {
+ "operation": {"required": True, "type": "str"},
+ "file": {"required": True, "type": "str"},
+ "timeout": {"required": False, "type": "int", "default": "120"}
+ }
+ module = AnsibleModule(argument_spec=input_fields)
+ operation = module.params["operation"]
+ file = module.params["file"]
+ timeout = module.params["timeout"]
+ # module.fail_json(msg="you must be logged in into OpenShift")
+ module.exit_json(changed=True, meta={operation: "create"})
+```
+
+# [plugins](https://github.com/ansible/ansible/tree/devel/lib/ansible/plugins/)
+example of plugin
+```
+{{ list_of_values | average }}
+```
+python code for plugin
+```
+dev average(list):
+ return sum(list) / float(len(list))
+
+class AverageModule(object):
+ def filters(self):
+ return {'average': average}
+```
+execution
+```
+export ANSIBLE_FILTER_PLUGINS=/full/path/to/folder/with/plugin
+ansible-playbook playbook.yml
+```
+
+## lookups
+```sh
+# documentation
+ansible-doc -t lookup -l
+ansible-doc -t lookup csvfile
+```
+
+replace value from file with special format
+```python
+{{ lookup('csvfile', 'web_server file=credentials.csv delimiter=,') }}
+{{ lookup('ini', 'password section=web_server file=credentials.ini') }}
+{{ lookup('env','DESTINATION') }}
+{{ lookup('file','/tmp/version.txt') }}
+```
+lookups variables
+```
+{{ hostvars[inventory_hostname]['somevar_' + other_var] }}
+
+For ‘non host vars’ you can use the vars lookup plugin:
+{{ lookup('vars', 'somevar_' + other_var) }}
+```
+
+```yaml
+- name: airflow setup for main (web server) and workers
+ hosts: all
+ tasks:
+ - name: airflow hostname
+ debug: msg="{{ lookup('vars', 'ansible_host') }}"
+ - name: variable lookup
+ debug: msg="lookup data {{ lookup('vars', 'ansible_host')+lookup('vars', 'ansible_host') }}"
+ - name: read from ini, set variable
+ set_fact:
+ queues: "{{ lookup('ini', lookup('vars', 'ansible_host')+' section=queue file=airflow-'+lookup('vars', 'account_id')+'-workers.ini') }}"
+ - name: airflow lookup
+ debug: msg=" {{ '--queues '+lookup('vars', 'queues') if lookup('vars', 'queues') else '' }}"
+```
+
+# inventory file
+---
+## inventory file, inventory file with variables, [rules](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html)
+```
+[remote_ssh]
+172.28.128.3 ansible_connection=ssh ansible_port=22 ansible_user=tc ansible_password=tc
+```
+## dynamic inventory
+python inventory.py (with 'py' extension) instead of txt
+```
+import json
+data = {"databases": {"hosts": ["host1", "host2"], "vars": {"ansible_ssh_host":"192.168.10.12", "ansible_ssh_pass":"Passw0rd"} }}
+print(json.dumps(data))
+```
+also next logic should be present
+```
+inventory.py --list
+inventory.py --host databases
+```
+[prepared scripts](https://github.com/ansible/ansible/tree/devel/contrib/inventory)
+
+## inventory file with variables ( python Jinja templating)
+```
+[remote_ssh]
+172.28.128.3 ansible_connection=ssh ansible_port=22 ansible_user=tc ansible_password=tc http_port=8090
+```
+playbook usage:
+```
+'{{http_port}}'
+```
+
+## execution with inventory examples
+for one specific host without inventory file
+```sh
+ansible-playbook playbook.yml -i 10.10.10.10
+```
+with inventory file
+```sh
+ansible-playbook -i inventory.ini playbook.yml
+```
+issue with execution playbook for localhost only, local execution
+```text
+Note that the implicit localhost does not match 'all'
+...
+skipping: no hosts matched
+```
+solution
+```sh
+ansible-playbook --inventory="localhost," --connection=local --limit=localhost --skip-tag="python-script" playbook.yaml
+
+# example with external variables
+ansible-playbook --inventory="localhost," --connection=local --limit=localhost \
+--extra-vars="oc_project=scenario-test mapr_stream_path=/mapr/prod.zurich/vantage/scenario-test" \
+--tag="scenario-service" deploy-scenario-pipeline.yaml
+```
+
+solution2
+```sh
+#vim /etc/ansible/hosts
+localhost ansible_connection=local
+```
+
+
+# strategy
+---
+```
+ strategy: linear
+```
+* linear ( default )
+*after each step waiting for all servers*
+* free
+*independently for all servers - someone can finish installation significantly earlier than others*
+
+additional parameter - specify amount of servers to be executed at the time ( for default strategy only )
+```
+ serial: 3
+```
+```
+ serial: 20%
+```
+```
+ serial: [5,15,20]
+```
+
+default value "serial" into configuration **ansible.cfg**
+```
+forks = 5
+```
+
+# async execution, nowait task, command execution
+**not all modules support this operation**
+execute command in asynchronous mode ( with preliminary estimation 120 sec ),
+with default poll result of the command - 10 ( seconds )
+```
+ async: 120
+```
+execute command in asynchronous mode ( with preliminary estimation 120 sec ),
+with poll result of the command - 60 ( seconds )
+```
+ async: 120
+ poll: 60
+```
+execute command and forget, not to wait for execution
+```
+ async: 120
+ poll: 0
+```
+execute command in asynchronous mode,
+register result
+checking result at the end of the file
+```
+- command: /opt/my_personal_long_run_command.sh
+ async: 120
+ poll: 0
+ register: custom_command_result
+
+- name: check status result
+ async_status: jid={{ custom_command_result.ansible_job_id }}
+ register: command_result
+ until: command_result.finished
+ retries: 20
+```
+
+
+# roles
+---
+## init project ansible-galaxy, create new role, init role
+execute code into your project folder './roles'
+```
+ansible-galaxy init {project/role name}
+```
+result:
+```
+./roles/{project/role name}
+ /defaults
+ /handlers
+ /meta
+ /tasks
+ /tests
+ /vars
+```
+insert into code
+```
+ roles:
+ - {project/role name}
+```
+all folders of the created project will be applied to your project ( tasks, vars, defaults )
+*in case of manual creation - only necessary folders can be created*
+
+## ansible search for existing role
+```
+ansible-galaxy search {project/role name}
+```
+
+## import existing roles from [ansible galaxy](https://galaxy.ansible.com/list)
+```
+cd roles
+ansible-galaxy import {name of the project/role}
+```
+insert into code
+```
+ roles:
+ - {project/role name}
+```
+all folders of the imported project will be applied to your project ( tasks, vars, defaults )
+
+## import task from role, role.task, task inside role
+```yaml
+- hosts: localhost
+ # hosts: all
+ # hosts:
+ tasks:
+ - name: first step
+ include_role:
+ name: mapr-kafka
+ tasks_from: cluster-login
+```
+
+## export
+create/update file:
+```
+./roles/{project/role name}/meta/main.yml
+```
+
+## local run local start playbook
+```yaml
+- hosts: localhost
+ tasks:
+ - name: Ansible create file with content example
+ copy:
+ dest: "/tmp/remote_server.txt"
+ content: |
+ dog
+ tiger
+```
+### minimal playbook
+```yaml
+- hosts: localhost
+ tasks:
+ - name: Ansible create file with content example
+ copy:
+ dest: "/tmp/remote_server.txt"
+ content: |
+ {{ lookup('env','TEST_1') }}
+ {{ lookup('env','TEST_2') }}
+```
+
+```sh
+ansible-playbook ansible-example.yml
+```
+
+## execute role, role execution, start role locally, local start, role local execution
+```sh
+ansible localhost \
+ --extra-vars="deploy_application=1" \
+ --extra-vars=@group_vars/all/defaults/all.yaml \
+ --extra-vars=@group_vars/all/vars/all.yaml \
+ --extra-vars="mapr_stream_path={{ some_variable_from_previous_files }}/some-argument" \
+ -m include_role \
+ -a name="new_application/new_role"
+```
+where "include_role" - module to run ( magic word )
+where "new_application/new_role" - subfolder to role
+where @group_vars/all/default/all.yaml - sub-path to yaml file with additional variables
+
+## console output with applied roles should looks like
+```
+TASK [{project/role name}: {task name}] ***********************************
+```
+for example
+```
+TASK [java : install java with jdbc libraries] ***********************************
+```
+
+# file encryption, vault
+```
+ansible-vault encrypt inventory.txt
+ansible-vault view inventory.txt
+ansible-vault create inventory.txt
+```
+ask password via command line
+```
+ansible-playbook playbook.yml -i inventory.txt -ask-vault-pass
+```
+file should contain the password
+```
+ansible-playbook playbook.yml -i inventory.txt -vault-password-file ./file_with_pass.txt
+```
+script should return password
+```
+ansible-playbook playbook.yml -i inventory.txt -vault-password-file ./file_with_pass.py
+```
+
+# modules
+[list of all modules](https://docs.ansible.com/ansible/devel/modules/list_of_all_modules.html)
+[custom module playground](https://ansible-playable.com)
+[custom module creation doc](docs.ansible.com/ansible/latest/dev_guide/developing_modules_general.html)
+
+### [apt](https://docs.ansible.com/ansible/latest/modules/apt_module.html), python installation
+```
+- name: example of apt install
+ apt: name='{{ item }}' state=installed
+ with_items:
+ - python
+ - python-setuptools
+ - python-dev
+ - build-essential
+ - python-pip
+```
+
+### [service](https://docs.ansible.com/ansible/latest/modules/service_module.html)
+```
+- name: example of start unix service
+ service:
+ name: mysql
+ state: started
+ enabled: yes
+```
+
+### [pip](https://docs.ansible.com/ansible/latest/modules/pip_module.html)
+```
+- name: manage python packages via pip
+ pip:
+ name: flask
+```
+
+### include variables import variables
+```json
+- name: External variables
+ include_vars: roles/marker-table/defaults/main.yaml
+ tags: deploy
+```
+
+### echo
+add flag for ```ansible``` or ```ansible-playbook```:-vvv(3) -vv (2) or -v (1)
+```
+- debug:
+ msg: ">>> {{ data_portal_deploy_folder }}/data-portal.jar"
+ var: src
+ verbosity: 2
+```
+
+### [copy](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/copy_module.html?extIdCarryOver=true&sc_cid=701f2000001OH7nAAG#ansible-collections-ansible-builtin-copy-module)
+```
+- name: Ensure MOTD file is in place
+ copy:
+ src: files/motd
+ dest: /etc/motd
+ owner: root
+ group: root
+ mode: 0644
+
+- name: Ensure MOTD file is in place
+ copy:
+ content: "Welcome to this system."
+ dest: /etc/motd
+ owner: root
+ group: root
+ mode: 0644
+```
+
+### [template](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/template_module.html#ansible-collections-ansible-builtin-template-module)
+```json
+- name: Ensure MOTD file is in place
+ template:
+ src: templates/motd.j2
+ dest: /etc/motd
+ owner: root
+ group: root
+ mode: 0644
+```
+
+### [user](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/user_module.html)
+```json
+- name: Ensure user1 exists
+ user:
+ name: user1
+ group: users
+ groups: wheel
+ uid: 2001
+ password: "{{ 'mypassword' | password_hash('sha512') }}"
+ state: present
+```
+
+### [package](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/package_module.html)
+```json
+- name: Ensure Apache package is installed
+ package:
+ name: httpd
+ state: present
+```
+
+### [firewalld](https://docs.ansible.com/ansible/latest/collections/ansible/posix/firewalld_module.html)
+```json
+- name: Ensure port 80 (http) is open
+ firewalld:
+ service: http
+ state: enabled
+ permanent: yes
+ immediate: yes
+```
+
+### [file](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/file_module.html)
+```json
+- name: Ensure directory /app exists
+ file:
+ path: /app
+ state: directory
+ owner: user1
+ group: docker
+ mode: 0770
+```
+
+### [lineinfile](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/lineinfile_module.html)
+```json
+- name: Ensure host my-own-host in hosts file
+ lineinfile:
+ path: /etc/hosts
+ line: 192.168.0.36 my-own-host
+ state: present
+
+- name: Ensure root cannot login via ssh
+ lineinfile:
+ path: /etc/ssh/sshd_config
+ regexp: '^PermitRootLogin'
+ line: PermitRootLogin no
+ state: present
+```
+
+### [unarchive](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/unarchive_module.html)
+```json
+- name: Extract content from archive
+ unarchive:
+ src: /home/user1/Download/app.tar.gz
+ dest: /app
+ remote_src: yes
+```
+
+### [command](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html)
+```json
+- name: Run bash script
+ command: "/home/user1/install-package.sh"
+```
+
+### TBD
+* system
+* commands
+* database
+* cloud
+* windows
+
+
+# [ansible awx](https://github.com/ansible/awx)
+
+# issues
+
+## fingerprint checking
+```
+fatal: [172.28.128.4]: FAILED! => {"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."}
+```
+resolution
+```
+export ANSIBLE_HOST_KEY_CHECKING=False
+ansible-playbook -i inventory.ini playbook-directory.yml
+```
+
diff --git a/Infrastructure-provisioning/Ansible/ansible-concepts.md b/Infrastructure-provisioning/Ansible/ansible-concepts.md
new file mode 100644
index 00000000..f7bac622
--- /dev/null
+++ b/Infrastructure-provisioning/Ansible/ansible-concepts.md
@@ -0,0 +1,37 @@
+# Ansible
+
+***************************
+## Table Of Contents:
+ - [Introduction](#introdution)
+ - [Terminology](#terminology)
+ - [References](#reference)
+
+## Introdution:
+- What is Ansible?
+ - Ansible allows you to achieve "Simple IT Automation". You describe the desired state of your machines, and Ansible manipulates them to achieve this state. The file in which you describe the desired state is called **Playbook**, which is written in **YAML**.
+
+### Terminology:
+- **Control Node**: the machine where Ansible is installed, responsible for running the provisioning on the servers you are managing.
+- **Inventory**: an `INI` file that contains information about the servers you are managing.
+- **Playbook**: a `YAML` file containing a series of procedures that should be automated.
+- **Task**: a block that defines a single procedure to be executed, e.g.: install a package.
+- **Module**: a module typically abstracts a system task, like dealing with packages or creating and changing files. Ansible has a multitude of built-in modules, but you can also create custom ones.
+- **Role**: a set of related playbooks, templates and other files, organized in a pre-defined way to facilitate reuse and sharing.
+- **Play**: a provisioning executed from start to finish is called a play.
+- **Facts**: global variables containing information about the system, like network interfaces or operating system.
+- **Handlers**: used to trigger service status changes, like restarting or reloading a service.
+
+### Getting Started:
+- A basic Ansible command or playbook:
+ - selects machines to execute against from inventory
+ - connects to those machines (or network devices, or other managed nodes), usually over SSH
+ - copies one or more modules to the remote machines and starts execution there
+- Working with Modules
+ - Ansible ships with a number of modules (called the ‘module library’) that can be executed directly on remote hosts or through Playbooks.
+ - Users can also write their own modules. These modules can control system resources, like services, packages, or files (anything really), or handle executing system commands.
+
+### Resources:
+- [Ansible Documentation](https://docs.ansible.com/)
+- [Configuration Management 101: Writing Ansible Playbooks](https://www.digitalocean.com/community/tutorials/configuration-management-101-writing-ansible-playbooks)
+- [Why you might need Ansible and not even know it](https://www.freecodecamp.org/news/why-you-might-need-ansible-and-not-even-know-it-d33b6e4b2ebe/)
+- [Learning Ansible basics](https://www.redhat.com/en/topics/automation/learning-ansible-tutorial)
diff --git a/Infrastructure-provisioning/Ansible/ansible-tutorials.md b/Infrastructure-provisioning/Ansible/ansible-tutorials.md
new file mode 100644
index 00000000..28608c22
--- /dev/null
+++ b/Infrastructure-provisioning/Ansible/ansible-tutorials.md
@@ -0,0 +1 @@
+# Ansible Tutorials
\ No newline at end of file
diff --git a/IaC/Ansible/readme.md b/Infrastructure-provisioning/Ansible/readme.md
similarity index 69%
rename from IaC/Ansible/readme.md
rename to Infrastructure-provisioning/Ansible/readme.md
index cdc4054d..b48f2592 100644
--- a/IaC/Ansible/readme.md
+++ b/Infrastructure-provisioning/Ansible/readme.md
@@ -1,3 +1,5 @@
# Ansible
-- It is a tool designed with automation in mind from the start. Ansible focuses on providing “radically simple” configuration language as well as being able to manage cloud instances immediately with no modifications. It is also great for performing arbitrary IT orchestration (e.g., zero downtime rolling updates, hotfixes, etc.) as opposed to being configuration management specific. Rather than managing systems as individual units, you simply describe how components—and the system in general—interact with each other and Ansible will handle the rest.
\ No newline at end of file
+- It is a tool designed with automation in mind from the start. Ansible focuses on providing “radically simple” configuration language as well as being able to manage cloud instances immediately with no modifications. It is also great for performing arbitrary IT orchestration (e.g., zero downtime rolling updates, hotfixes, etc.) as opposed to being configuration management specific. Rather than managing systems as individual units, you simply describe how components—and the system in general—interact with each other and Ansible will handle the rest.
+
+- It allows you to organize your servers into groups, describe how those groups should be configured, and what actions should be taken on them, all from a central location.
\ No newline at end of file
diff --git a/Infrastructure-provisioning/Chef/chef-commands.md b/Infrastructure-provisioning/Chef/chef-commands.md
new file mode 100644
index 00000000..01e4df89
--- /dev/null
+++ b/Infrastructure-provisioning/Chef/chef-commands.md
@@ -0,0 +1,99 @@
+### Install
+
+In your server:
+
+```bash
+$ sudo apt-get install curl
+
+```
+
+```bash
+$ curl -L https://omnitruck.chef.io/install.sh | sudo bash
+Thank you for installing Chef!
+
+```
+
+```bash
+$ chef-solo -v
+...
+Chef: 14.5.33
+```
+
+### Start the cookbook
+
+```bash
+ wget http://github.com/chef-cookbooks/chef-repo/tarball/master -O - | tar xzf - --strip-components=1
+
+```
+
+### Knife
+
+```bash
+$ knife supermarket download mysql
+
+```
+
+### Invoking chef-solo
+
+```bash
+$ chef-solo -c solo.rb -j web.json
+```
+## [](https://devhints.io/chef#examples)Examples
+
+### Simple compile-from-source
+
+```ruby
+execute "tar --no-same-owner -zxf hi.tar.gz" do
+ cwd "/usr/local/src"
+ creates "/usr/local/src/node-v#{version}"
+end
+
+```
+
+```ruby
+bash "compile" do
+ cwd "/usr/local/src/node-v#{version}"
+ code %[
+ PATH=/usr/local/bin:$PATH
+ ./configure
+ make
+ ]
+ creates "/usr/local/src/node-v#{version}/node"
+end
+```
+### Execute
+
+```ruby
+execute "name" do
+ cwd "..."
+ environment({ "PATH" => "..." })
+ command "make install"
+ creates "..."
+end
+```
+### remote file
+
+```ruby
+remote_file "/usr/local/src/hi.tar.gz" do
+ source "http://..."
+ checksum "ab83be..."
+ mode 0644
+ action :create_if_missing
+end
+```
+
+### ruby_block
+
+```ruby
+ruby_block "name" do
+ block { File.read ... }
+ not_if { File.exists?(...) }
+end
+```
+### Conditions
+
+```ruby
+ creates "/usr/local/src/node-v#{version}/node"
+ not_if { File.exists?('...') }
+```
+
diff --git a/Infrastructure-provisioning/Chef/chef-concepts.md b/Infrastructure-provisioning/Chef/chef-concepts.md
new file mode 100644
index 00000000..777cef6f
--- /dev/null
+++ b/Infrastructure-provisioning/Chef/chef-concepts.md
@@ -0,0 +1 @@
+# Chef Concepts
\ No newline at end of file
diff --git a/IaC/chef/readme.md b/Infrastructure-provisioning/Chef/readme.md
similarity index 100%
rename from IaC/chef/readme.md
rename to Infrastructure-provisioning/Chef/readme.md
diff --git a/Infrastructure-provisioning/Cloudformation/cloudformation-concepts.md b/Infrastructure-provisioning/Cloudformation/cloudformation-concepts.md
new file mode 100644
index 00000000..74a1b93b
--- /dev/null
+++ b/Infrastructure-provisioning/Cloudformation/cloudformation-concepts.md
@@ -0,0 +1,18 @@
+# Cloudformation-Concepts
+AWS CloudFormation is a tool to write the Infrastructure as a Code(IaC). Any kind of AWS resources such as VPCs, EC2, S3, RDS or any other kind of resources can be created using AWS CloudFormation. We can define any AWS resource in a JSON or a YANL file.
+
+This has a lot of advantages such as:
+
+1. Automation of AWS resource creation
+2. Disaster recovery
+3. Copying a resource from one aws region to another region
+4. Code review of the infrastructure and many more.
+
+Cloudformation uses stacks to create resources. A stack might contain one or more resources.
+
+The JSON/YAML template has four important top-level keys:
+
+1. AWSTemplateFormatVersion
+2. Resource - The AWS resources you want to create
+3. Parameter - The configuration parameters for the AWS resource with the template
+4. Output - The properties of the resource you want to output
diff --git a/Infrastructure-provisioning/Cloudformation/cloudformation-tutorials.md b/Infrastructure-provisioning/Cloudformation/cloudformation-tutorials.md
new file mode 100644
index 00000000..ab0298fd
--- /dev/null
+++ b/Infrastructure-provisioning/Cloudformation/cloudformation-tutorials.md
@@ -0,0 +1,7 @@
+# Cloudformation-Tutorials
+
+## Resources:
+* [AWS Cloudformation](https://aws.amazon.com/cloudformation/)
+* [A brief introduction to AWS Cloudformation](https://milapneupane.com.np/2019/10/07/a-brief-introduction-to-aws-cloudformation/)
+* [A guide to AWS Custom Cloudformation resource](https://milapneupane.com.np/2019/10/08/a-guide-to-aws-custom-cloudformation-resource/)
+* [How to deploy a docker container with AWS ECS using cloudformation](https://milapneupane.com.np/2019/07/28/how-to-deploy-a-docker-container-with-aws-ecs-using-cloudformation/)
diff --git a/Infrastructure-provisioning/Cloudformation/readme.md b/Infrastructure-provisioning/Cloudformation/readme.md
new file mode 100644
index 00000000..78884ebe
--- /dev/null
+++ b/Infrastructure-provisioning/Cloudformation/readme.md
@@ -0,0 +1,4 @@
+# Cloudformation
+
+- Write AWS Infrastructure as a Code. Provided by AWS for provisioning AWS resource.
+- Write YAML or JSON file to create resources.
\ No newline at end of file
diff --git a/Infrastructure-provisioning/Puppet/puppet-commands.md b/Infrastructure-provisioning/Puppet/puppet-commands.md
new file mode 100644
index 00000000..903c25ae
--- /dev/null
+++ b/Infrastructure-provisioning/Puppet/puppet-commands.md
@@ -0,0 +1,79 @@
+# Puppet Commands
+
+### FACTER
+
+| Command | Description |
+| ------- | ----------- |
+| `facter` | show all facters |
+| `facter osfamily` | show OS Family facter |
+| `facter -y` | show facters in YAML|
+| `facter -j` | show facters in JSON |
+| `notify { "OS is ${::facts['operatingsystem']}": }` | use fact inside a manifest using 'facter' function |
+| `notify { "OS is $::operatingsystem": }` | use fact inside manifest directly |
+| `$::operatingsystemmajrelease` | get OS major release from manifest |
+
+### PUPPET AGENT
+
+| Command | Description |
+| ------- | ----------- |
+| `puppet agent --test (or -t)` |Apply catalog using -verbose, -ignorecache, -no-daemonize -detailed-exit-codes, -show_diff |
+| `puppet agent -t --debug` |Run in debug mode with more output |
+| `puppet agent -t --noop ` | Run simulation (no changes to system)|
+| `puppet agent -t --environment development` | Run catalog for different environment than whats configured in Puppet Agent's conf file |
+| `puppet agent --disable` | Disable puppet agent from running on node|
+| `puppet agent --enable` | Enable puppet agent to run on node |
+| `puppet resource package` | show all installed packages |
+| `puppet resource package apache ensure=present/absent` | install or remove package |
+| `puppet resource` | show all managed resources |
+| `puppet agent -t --graph` |show a graph of all dependencies found in a catalog, stored in a .dot image |
+
+### Mcollective
+
+| Command | Description |
+| ------- | ----------- |
+| `sudo -i -u peadmin` |Run MCollective as 'peadmin'|
+| `mco ping` |check connection to nodes |
+| `mco facts timezone` |get nodes by Facter name|
+| `mco puppet count` |check how many MCO nodes are running|
+| `mco rpc service restart service=httpd` | restart apache service|
+| `mco package status puppet` | check status of a package |
+| `mco inventory ––list-collectives` | list all subcollectives |
+| `mco puppet disable -I nodename` |disable puppet agent on node |
+| `mco ping -F architecture=x86_64` | find all nodes that are x64 |
+| `mco find ––with-identity /nyc/` |find all nodes containing NYC in hostname |
+| `mco find ––with-class nginx` |find all nodes with nginx class|
+| `mco puppet runall -F osfamily=Redhat 5` |kick off 'puppet agent -t' on your nodes |
+| `mco ping -T us_collective` |run command against a subcollective |
+| `mco service ntp start -I ny14.nyc` |start/stop service on a node |
+| `mco plugin doc` |show all available MCO plugins |
+| `mco rpc puppet last_run_summary` |show last run statistics for all nodes |
+| `/var/lib/peadmin/.mcollective.d/client.log` |mco client logs (on PE Master) |
+
+### Modules
+
+| Command | Description |
+| ------- | ----------- |
+| `puppet config print modulepath`|print modulepath|
+| `puppet help module` |modules help|
+| `puppet module search 'nginx'`|search available modules: (PuppetForge)|
+| `puppet module install author/module`|install a module|
+| `puppet module generate author/module`|build new module with full skeleton|
+| `puppet module list`| list installed modules |
+| `puppet module list --tree`| check for missing module dependencies|
+| `puppet module build author/module`|build a module release package (.tar.gz)|
+| `puppet module changes`| show modified files of an installed module|
+
+
+### Puppet Server
+
+| Command | Description |
+| ------- | ----------- |
+| `puppet cert list --all`|List all certs|
+| `puppet cert sign 'certname'` |sign certificate|
+| `puppet cert clean 'certname'`|remove client cert|
+| `puppet apply -e "class { 'my_super_module': version => '1.2'}"`|apply config directly from command line and pass parameter|
+| `/var/log/puppetlabs/puppetserver/puppetserver.log`|Puppet Server log|
+| `/var/log/puppetlabs/puppetdb/puppetdb.log`|PuppetDB log|
+| `/etc/puppetlabs/puppet/ssl`|SSL certs location|
+| `/etc/puppetlabs/puppet/puppet.conf`|Master Configuration file|
+| `puppet config print all`|Print all configuration settings|
diff --git a/Infrastructure-provisioning/Puppet/puppet-concepts.md b/Infrastructure-provisioning/Puppet/puppet-concepts.md
new file mode 100644
index 00000000..668d3e96
--- /dev/null
+++ b/Infrastructure-provisioning/Puppet/puppet-concepts.md
@@ -0,0 +1 @@
+# Puppet Concepts
\ No newline at end of file
diff --git a/IaC/Puppet/readme.md b/Infrastructure-provisioning/Puppet/readme.md
similarity index 100%
rename from IaC/Puppet/readme.md
rename to Infrastructure-provisioning/Puppet/readme.md
diff --git a/Infrastructure-provisioning/Terraform/Terraform Commands.md b/Infrastructure-provisioning/Terraform/Terraform Commands.md
new file mode 100644
index 00000000..b76846a8
--- /dev/null
+++ b/Infrastructure-provisioning/Terraform/Terraform Commands.md
@@ -0,0 +1,181 @@
+## Get Help[](https://spacelift.io/blog/terraform-commands-cheat-sheet#get-help)
+
+`terraform -help` — Get a list of available commands for execution with descriptions. Can be used with any other subcommand to get more information.
+
+`terraform fmt -help` — Display help options for the [`fmt` command](https://spacelift.io/blog/terraform-fmt).
+
+## Show Your Terraform Version[](https://spacelift.io/blog/terraform-commands-cheat-sheet#show-your-terraform-version)
+
+`terraform version` — Shows the current version of your Terraform and notifies you if there is a newer version available for download.
+
+## Format Your Terraform Code[](https://spacelift.io/blog/terraform-commands-cheat-sheet#format-your-terraform-code)
+
+This should be the first command you run after creating your configuration files to ensure your code is formatted using the HCL standards. This makes it easier to follow and aids collaboration.
+
+`terraform fmt` — Format your Terraform configuration files using the HCL language standard.
+
+`terraform fmt --recursive` — Also formats files in subdirectories
+
+`terraform fmt --diff` — Display differences between original configuration files and formatting changes.
+
+`terraform fmt --check` — Useful in automation [CI/CD pipelines](https://spacelift.io/blog/terraform-in-ci-cd), the check flag can be used to ensure the configuration files are formatted correctly, if not the exit status will be non-zero. If files are formatted correctly, the exit status will be zero.
+
+## Initialize Your Directory[](https://spacelift.io/blog/terraform-commands-cheat-sheet#initialize-your-directory)
+
+`terraform init` — In order to prepare the working directory for use with Terraform, the `terraform init` command performs Backend Initialization, Child Module Installation, and Plugin Installation.
+
+`terraform init -get-plugins=false` — Initialize the working directory, do not download plugins.
+
+`terraform init -lock=false` — Initialize the working directory, don’t hold a state lock during backend migration.
+
+`terraform init -input=false` — Initialize the working directory, and disable interactive prompts.
+
+`terraform init -migrate-state` — Reconfigure a backend, and attempt to migrate any existing state.
+
+`terraform init -verify-plugins=false` — Initialize the working directory, do not verify plugins for Hashicorp signature
+
+See our [detailed rundown of the `terraform init` command](https://spacelift.io/blog/terraform-init)!
+
+## Download and Install Modules[](https://spacelift.io/blog/terraform-commands-cheat-sheet#download-and-install-modules)
+
+Note this is usually not required as this is part of the `terraform init` command.
+
+`terraform get` — Downloads and installs [modules](https://spacelift.io/blog/what-are-terraform-modules-and-how-do-they-work) needed for the configuration.
+
+`terraform get -update` — Checks the versions of the already installed modules against the available modules and installs the newer versions if available.
+
+## Validate Your Terraform Code[](https://spacelift.io/blog/terraform-commands-cheat-sheet#validate-your-terraform-code)
+
+`terraform validate` — Validates the configuration files in your directory, and does not access any remote state or services. `terraform init` should be run before this command.
+
+## Plan Your Infrastructure[](https://spacelift.io/blog/terraform-commands-cheat-sheet#plan-your-infrastructure)
+
+`terraform plan` — Plan will generate an execution plan, showing you what actions will be taken without actually performing the planned actions.
+
+`terraform plan -out=` — Save the plan file to a given path. Can then be passed to the `terraform apply` command.
+
+`terraform plan -destroy` — Creates a plan to destroy all objects, rather than the usual actions.
+
+## Deploy Your Infrastructure[](https://spacelift.io/blog/terraform-commands-cheat-sheet#deploy-your-infrastructure)
+
+`terraform apply` — Creates or updates infrastructure depending on the configuration files. By default, a plan will be generated first and will need to be approved before it is applied.
+
+`terraform apply -auto-approve` — Apply changes without having to interactively type ‘yes’ to the plan. Useful in automation CI/CD pipelines.
+
+`terraform apply ` — Provide the file generated using the `terraform plan -out` command. If provided, Terraform will take the actions in the plan without any confirmation prompts.
+
+`terraform apply -lock=false` — Do not hold a state lock during the Terraform apply operation. Use with caution if other engineers might run concurrent commands against the same workspace.
+
+`terraform apply -parallelism=` — Specify the number of operations run in parallel.
+
+`terraform apply -var="domainpassword=password123"` — Pass in a variable value.
+
+`terraform apply -var-file="varfile.tfvars"` — Pass in variables contained in a file.
+
+`terraform apply -target=”module.appgw.0"` — Apply changes only to the targeted resource.
+
+## Destroy Your Infrastructure[](https://spacelift.io/blog/terraform-commands-cheat-sheet#destroy-your-infrastructure)
+
+`terraform destroy` — [Destroys](https://spacelift.io/blog/how-to-destroy-terraform-resources) the infrastructure managed by Terraform.
+
+`terraform destroy -target=”module.appgw.0"` — Destroy only the targeted resource.
+
+`terraform destroy -auto-approve` — Destroys the infrastructure without having to interactively type ‘yes’ to the plan. Useful in automation CI/CD pipelines.
+
+## ‘Taint’ or ‘Untaint’ Your Resources[](https://spacelift.io/blog/terraform-commands-cheat-sheet#taint-or-untaint-your-resources)
+
+Use the [`taint` command](https://spacelift.io/blog/terraform-taint) to mark a resource as not fully functional. It will be deleted and re-created.
+
+`terraform taint vm1.name` — Taint a specified resource instance.
+
+`terraform untaint vm1.name` — Untaint the already tainted resource instance.
+
+## Refresh the State File[](https://spacelift.io/blog/terraform-commands-cheat-sheet#refresh-the-state-file)
+
+`terraform refresh` — Modifies the state file with updated metadata containing information on the resources being managed in Terraform. Will not modify your infrastructure.
+
+## View Your State File[](https://spacelift.io/blog/terraform-commands-cheat-sheet#viewyour-state-file)
+
+`terraform show` — Shows the state file in a human-readable format.
+
+`terraform show ` — If you want to read a specific state file, you can provide the path to it. If no path is provided, the current state file is shown.
+
+## Manipulate Your State File[](https://spacelift.io/blog/terraform-commands-cheat-sheet#manipulate-your-state-file)
+
+`terraform state` — One of the following subcommands must be used with this command in order to manipulate the state file.
+
+`terraform state list` — Lists out all the resources that are tracked in the current state file.
+
+`terraform state mv` — Moves an item in the state, for example, this is useful when you need to tell Terraform that an item has been renamed, e.g. `terraform state mv vm1.oldname vm1.newname`
+
+`terraform state pull > state.tfstate` — Gets the current state and outputs it to a local file.
+
+`terraform state push` — Update remote state from the local state file.
+
+`terraform state replace-provider hashicorp/azurerm customproviderregistry/azurerm` — Replace a provider, useful when switching to using a custom provider registry.
+
+`terraform state rm` — Remove the specified instance from the state file. Useful when a resource has been manually deleted outside of Terraform.
+
+`terraform state show ` — Show the specified resource in the state file.
+
+## Import Existing Infrastructure into Your Terraform State[](https://spacelift.io/blog/terraform-commands-cheat-sheet#import-existing-infrastructure-into-your-terraform-state)
+
+`terraform import vm1.name -i id123` — Import a VM with id123 into the configuration defined in the configuration files under vm1.name.
+
+`terraform import vm1.name -i id123 -allow-missing-config` — Import and allow if the configuration block does not exist.
+
+See our [terraform import tutorial](https://spacelift.io/blog/importing-exisiting-infrastructure-into-terraform) for more details.
+
+## Get Provider Information[](https://spacelift.io/blog/terraform-commands-cheat-sheet#get-provider-information)
+
+`terraform providers` — Displays a tree of providers used in the configuration files and their requirements.
+
+## Manage Your Workspaces[](https://spacelift.io/blog/terraform-commands-cheat-sheet#manage-your-workspaces)
+
+`terraform workspace` — One of the following subcommands must be used with the workspace command. Workspaces can be useful when an engineer wants to test a slightly different version of the code. It is not recommended to use Workspaces to isolate or separate the same infrastructure between different development stages, e.g. Dev / UAT / Production, or different internal teams.
+
+`terraform workspace show` — Show the name of the current workspace.
+
+`terraform workspace list` — List your workspaces.
+
+`terraform workspace select ` — Select a specified workspace.
+
+`terraform workspace new ` — Create a new workspace with a specified name.
+
+`terraform workspace delete ` — Delete a specified workspace.
+
+## View Your Outputs[](https://spacelift.io/blog/terraform-commands-cheat-sheet#view-your-outputs)
+
+`terraform output` — Lists all the [outputs](https://spacelift.io/blog/terraform-output) currently held in your state file. These are displayed by default at the end of a `terraform apply`, this command can be useful if you want to view them independently.
+
+`terraform output -state=` — Lists the outputs held in the specified state file.
+
+`terraform output -json` — Lists the outputs held in your state file in JSON format to make them machine-readable.
+
+`terraform output vm1_public_ip` — List a specific output held in your state file.
+
+## Release a Lock on Your Workspace[](https://spacelift.io/blog/terraform-commands-cheat-sheet#release-a-lock-on-your-workspace)
+
+`terraform force-unlock ` — Remove the lock with the specified lock ID from your workspace. Useful when a lock has become ‘stuck’, usually after an incomplete Terraform run.
+
+## Log In and Out to a Remote Host (Terraform Cloud)[](https://spacelift.io/blog/terraform-commands-cheat-sheet#log-in-and-out-to-a-remote-host-terraform-cloud)
+
+`terraform login` — Grabs an API token for Terraform cloud (app.terraform.io) using your browser.
+
+`terraform login ` — Log in to a specified host.
+
+`terraform logout` — Removes the credentials that are stored locally after logging in, by default for Terraform Cloud (app.terraform.io).
+
+`terraform logout ` — Removes the credentials that are stored locally after logging in for the specified hostname.
+
+## Produce a Dependency Diagram[](https://spacelift.io/blog/terraform-commands-cheat-sheet#produce-a-dependency-diagram)
+
+`terraform graph` — Produces a graph in DOT language showing the dependencies between objects in the state file. This can then be rendered by a program called Graphwiz (amongst others).
+
+`terraform graph -plan=tfplan` — Produces a dependency graph using a specified plan file (generated using `terraform plan -out=tfplan`).
+
+`terraform graph -type=plan` — Specifies the type of graph to output, either `plan, plan-refresh-only, plan-destroy,` or `apply`.
+
+## Test Your Expressions[](https://spacelift.io/blog/terraform-commands-cheat-sheet#test-your-expressions)
+
+`terraform console` — Allows testing and exploration of expressions on the interactive console using the command line. e.g. 1+2 🙂
diff --git a/Infrastructure-provisioning/Terraform/readme.md b/Infrastructure-provisioning/Terraform/readme.md
new file mode 100644
index 00000000..df5e53da
--- /dev/null
+++ b/Infrastructure-provisioning/Terraform/readme.md
@@ -0,0 +1,122 @@
+# Terraform
+
+***************************
+
+## Table Of Contents:
+
+- [Introduction](#introdution)
+- [Tutorial Resources](#tutorial-resources)
+- [References](#reference)
+
+*****************
+
+## Introdution
+
+- What is Terraform?
+ - Terraform is an open source tool that allows you to define infrastructure for a variety of providers (e.g. AWS, Azure, Google Cloud, DigitalOcean, DataDog, VMWare, GitHub, etc) using a simple, declarative programming language and to deploy and manage that infrastructure using a few CLI commands.
+
+- Terraform Cloud is an application that helps teams use Terraform together. It manages Terraform runs in a consistent and reliable environment, and includes easy access to shared state and secret data, access controls for approving changes to infrastructure, a private registry for sharing Terraform modules, detailed policy controls for governing the contents of Terraform configurations, and more.
+
+Terraform Cloud is available as a hosted service at [https://app.terraform.io](https://app.terraform.io). We offer free accounts for small teams, and paid plans with additional feature sets for medium-sized businesses.
+
+Large enterprises can purchase Terraform Enterprise, our self-hosted distribution of Terraform Cloud. It offers enterprises a private instance of the Terraform Cloud application, with no resource limits and with additional enterprise-grade architectural features like audit logging and SAML single sign-on.
+
+## Why Terraform?
+
+- Terraform is an "orchestration" tool, not an "automation tool:" Automation is a task completed without human intervention, while Orchestration means, taking a task and creating a workflow, or running several automated tasks called as processes. For example, orchestration is a way of combining multiple automation tasks to create IP or creating a security group
+
+- Terraform is "Declarative" not "Procedural/Imperative:" These are contrasting programming patterns. Declarative programming does not control the flow of the program, you just say what you want and not say how to do it. Procedural programming, on the other hand, you define the whole process and provide the steps how to do it.
+
+- Terraform follows Client Only Architecture, not Client/Server Architecture: Chef, Ansible all follow client/server architecture. You issue commands on a client system and it executes your commands and stores the state of your system. The server talks to agents, which must installed on every instance you want to configure. With this architecture, moving parts coming as a perk and may cause new failure modes. While Terraform uses the cloud provider API's to configure your infrastructure.
+
+- Terraform has Multi-Provider Support: Terraform provides convenience to switch between different cloud providers like Google, AWS, Open Stack, Azure. Terraform allows you to write code specific to each provider.
+
+- Terraform gives Immutable Infrastructure: This means once you instantiate your server, you do not change it. Instances are redeployed, instead of restoring from previous versions. Components are replaced rather than being updated with newer versions. This reduces the potential of Configuration Drift and uptime is improved.
+
+## Installation
+
+- Install Through curl
+
+```bash
+# download terraform as zip for your architecture (linux here)
+curl -O https://releases.hashicorp.com/terraform/0.11.10/terraform_0.11.10_linux_amd64.zip
+
+# extract the archive and move the binary to /usr/local/bin
+sudo unzip terraform_0.11.10_linux_amd64.zip -d /usr/local/bin/
+
+# remove archive
+rm terraform_0.11.10_linux_amd64.zip
+
+```
+
+Second method to install Through `tfenv`, a Terraform Version Manager
+
+Download the `tfenv` binary and put it in your PATH.
+
+```bash
+git clone https://github.com/tfutils/tfenv.git ~/.tfenv
+
+# add ~/.tfenv to PATH for Bash Users (modifies .bashrc)
+echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> $HOME/.bashrc
+
+# add ~/.tfnev to PATH for ZSH Users (modifes .zshrc)
+echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> $HOME/.zshrc
+
+```
+
+Then, you can install the desired version of Terraform:
+
+```bash
+# list all available terraform versions
+tfenv list-remote
+
+# install a terraform version
+tfenv install 0.13.5
+
+# list installed terraform versions
+tfenv list
+
+# use a certain terraform version
+tfenv use 0.13.5
+
+# uninstall a terraform version
+tfenv uninstall 0.13.5
+
+```
+
+## Usage
+
+### The Terraform Workflow
+
+The Terraform workflow allows you to create and mutate infrastructure over time, by relying on four simple steps:
+
+1. Scope - Confirm what resources need to be created for a given project.
+2. Author - Create the configuration file in Terraform template files based on the scoped parameters
+3. Initialize - Run `terraform init` in the project directory with the configuration files. This will download the correct provider plug-ins for the project.
+4. Plan & Apply - Run `terraform plan` to verify creation process and then `terraform apply` to create real resources as well as state file that compares future changes in your configuration files to what actually exists in your deployment environment.
+
+### (optionally) delete infrastructure resources
+
+Terraform is also able to delete infrastructures, previously created by Terraform. To delete infrastructure resources, you use the `terraform destroy` command.
+
+### Code Formatting
+
+Terraform provides a built-in code formatter. Execute `terraform fmt` within a Terraform project folder and all `.tf` files will be formatted by Terraform itself.
+
+### Validating
+
+Use `terraform validate` to execute basic consistency and syntax verification.
+
+***************************
+
+## Tutorial Resources
+
+- [Hashicorp Learn](https://learn.hashicorp.com/terraform)
+
+************
+
+## References
+
+- [Getting started with Terraform](https://learn.hashicorp.com/terraform/getting-started/intro)
+- [An Introduction to Terraform](https://blog.gruntwork.io/an-introduction-to-terraform-f17df9c6d180)
+- [Terraform Official site](https://www.terraform.io/docs)
diff --git a/Infrastructure-provisioning/Terraform/terraform-concepts.md b/Infrastructure-provisioning/Terraform/terraform-concepts.md
new file mode 100644
index 00000000..a08e4b38
--- /dev/null
+++ b/Infrastructure-provisioning/Terraform/terraform-concepts.md
@@ -0,0 +1 @@
+# Terraform-Concepts
\ No newline at end of file
diff --git a/Infrastructure-provisioning/Terraform/terraform-tutorials.md b/Infrastructure-provisioning/Terraform/terraform-tutorials.md
new file mode 100644
index 00000000..5adc4c57
--- /dev/null
+++ b/Infrastructure-provisioning/Terraform/terraform-tutorials.md
@@ -0,0 +1 @@
+# Terraform-Tutorials
diff --git a/Infrastructure-provisioning/readme.md b/Infrastructure-provisioning/readme.md
new file mode 100644
index 00000000..faa65cdf
--- /dev/null
+++ b/Infrastructure-provisioning/readme.md
@@ -0,0 +1,32 @@
+# Infrastructure as Code
+
+
+Infrastruce as code - Infrastructure as code (IaC) is the process of managing and provisioning computer data centers through machine-readable definition files, rather than physical hardware configuration or interactive configuration tools.[1] The IT infrastructure managed by this comprises both physical equipment such as bare-metal servers as well as virtual machines and associated configuration resources. The definitions may be in a version control system. It can use either scripts or declarative definitions, rather than manual processes, but the term is more often used to promote declarative approaches.
+
+Simply code your infrastructure configuration files with combination of different cloud providers.
+
+
+- What is Terraform?
+ - With Terraform, you describe your complete infrastructure as code, even as it spans multiple service providers. Your servers may come from AWS, your DNS may come from CloudFlare, and your database may come from Heroku. Terraform will build all these resources across all these providers in parallel.
+
+ - Terraform was developed by Hashicorp, the company behind Vagrant, Consul, Vault, Nomad and other tools from HashiStack. This is a configuration orchestration tool that is incredible for provisioning, adjusting and destroying the virtual server environments. It is available both as a DevOps-as-a-Service enterprise-grade offer from Hashicorp and as an open-source solution able to work with a variety of Cloud Service Providers to create multi-cloud ecosystems.
+
+
+ - Infrastructure as Code: Infrastructure is described using a high-level configuration syntax. This allows a blueprint of your datacenter to be versioned and treated as you would any other code. Additionally, infrastructure can be shared and re-used.
+
+ - Execution Plans: Terraform has a "planning" step where it generates an execution plan. The execution plan shows what Terraform will do when you call apply. This lets you avoid any surprises when Terraform manipulates infrastructure.
+
+ - Resource Graph: Terraform builds a graph of all your resources, and parallelizes the creation and modification of any non-dependent resources. Because of this, Terraform builds infrastructure as efficiently as possible, and operators get insight into dependencies in their infrastructure.
+
+
+- What is Ansible?
+ - Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates. Ansible’s goals are foremost those of simplicity and maximum ease of use.
+
+- Puppet Labs
+ - Puppet is an automated administrative engine for your Linux, Unix, and Windows systems and performs administrative tasks (such as adding users, installing packages, and updating server configurations) based on a centralized specification.
+
+- Chef
+ - Chef enables you to manage and scale cloud infrastructure with no downtime or interruptions. Freely move applications and configurations from one cloud to another. Chef is integrated with all major cloud providers including Amazon EC2, VMWare, IBM Smartcloud, Rackspace, OpenStack, Windows Azure, HP Cloud, Google Compute Engine, Joyent Cloud and others.
+
+- AWS CloudFormation
+ - You can use AWS CloudFormation’s sample templates or create your own templates to describe the AWS resources, and any associated dependencies or runtime parameters, required to run your application. You don’t need to figure out the order in which AWS services need to be provisioned or the subtleties of how to make those dependencies work.
diff --git a/notes/Dev-ops-Interview.md b/Interview/Dev-ops-Interview.md
similarity index 66%
rename from notes/Dev-ops-Interview.md
rename to Interview/Dev-ops-Interview.md
index 71a9c94a..341ea391 100644
--- a/notes/Dev-ops-Interview.md
+++ b/Interview/Dev-ops-Interview.md
@@ -20,7 +20,7 @@
- Q1) Can you tell us the fundamental differences between DevOps & Agile?
- A: Although DevOps shares some similarities with the Agile methodology, which is one of the most popular SDLC methodologies, both are fundamentally different approaches to software development. Following are the various fundamental differences between the two:
- - Agile Approach – The agile approach is only meant for development in Agile while the agile approach is meant for both development and operations in DevOps.
+ - Agile Approach – The agile approach is only meant for development in Agile while the Devops approach is meant for both development and operations in DevOps.
- Practices and Processes – While agile involves practices such as Agile Scrum and Agile Kanban, DevOps involves processes such as CD (Continuous Delivery), CI (Continuous Integration), and CT (Continuous Testing).
@@ -126,7 +126,7 @@
- To shift left in DevOps simply means the necessity of taking as many tasks on the right i.e. that typically happens toward the end of the application development process and incorporate them into earlier stages of a DevOps methodology.
- - There are several ways of accomplishing a shit left in DevOps, most notably:
+ - There are several ways of accomplishing a shift left in DevOps, most notably:
- Create production-ready artifacts at the end of every Agile sprint
- Incorporating static code analysis routines in every build
@@ -197,7 +197,7 @@
- Q18) Draw a comparison between Asset Management and Configuration Management.
- A: The process of monitoring as well as maintaining things of value to an entity or group is called an Asset Management.
- - Configuration Management refers to the process of controlling, identifying, planning for, and verifying the configuration items within service in support of Change Management.
+ - Configuration Management refers to the process of controlling, identifying, planning for, and verifying the configuration items within service in support of Change Management.
- Q19) Can you state and explain various key elements of continuous testing?
- A: Various key elements of continuous testing are:
@@ -210,17 +210,17 @@
- Test optimization – Improve the overall testing process
- Q20) Please explain the core operations of DevOps in terms of development and infrastructure.
-- A: Core operations of DevOps in terms of development and infrastructure are:
-
- - Application development – Developing a product that is able to meet all customer requirements and offers a remarkable level of quality
- - Code coverage – Measurement of the total number of blocks or lines or arcs of the code executed while the automated tests are running
- - Code developing – Prepare the code base required for the product development
- - Configuration – Allowing the product to be used in an optimum way
- - Deployment – Installing the software to be used by the end-user
- - Orchestration – Arrangement of several automated tasks
- - Packaging – Activities involved when the release is ready for deployment
- - Provisioning – Ensuring that the infrastructure changes arrive just-in-time with the code that requires it
- - Unit testing – Meant for testing individual units or components
+ - A: Core operations of DevOps in terms of development and infrastructure are:
+
+ - Application development – Developing a product that is able to meet all customer requirements and offers a remarkable level of quality
+ - Code coverage – Measurement of the total number of blocks or lines or arcs of the code executed while the automated tests are running
+ - Code developing – Prepare the code base required for the product development
+ - Configuration – Allowing the product to be used in an optimum way
+ - Deployment – Installing the software to be used by the end-user
+ - Orchestration – Arrangement of several automated tasks
+ - Packaging – Activities involved when the release is ready for deployment
+ - Provisioning – Ensuring that the infrastructure changes arrive just-in-time with the code that requires it
+ - Unit testing – Meant for testing individual units or components
- Q21) What Do You Know about DevOps?
@@ -290,9 +290,6 @@
- Start by talking about the age-old mechanisms of writing commands onto script files and testing them in a separate environment before deployment and how this approach is being replaced by IaC. Similar to the codes written for other services, with the help of AWS, IaC allows developers to write, test, and maintain infrastructure entities in a descriptive manner, using formats such as JSON or YAML. This enables easier development and faster deployment of infrastructure changes.
- - Go through this Simplilearn video on “DevOps Interview Questions” delivered by our DevOps certification expert that will help you crack any interview.
-
-
- Q32) What are the success factors for Continuous Integration?
- Examples of answers:
@@ -309,17 +306,17 @@
- Q33) How would you implement CI (continuous delivery) - end to end, including source control, branches, tools, etc. ?
-- Q34) What is Continious Delivery? Continious Deployment?
+- Q34) What is Continuous Delivery? Continuous Deployment?
-- Q35) What is the difference between Continuous Integration, Continious Delivery and Continious Deployment?
+- Q35) What is the difference between Continuous Integration, Continuous Delivery and Continuous Deployment?
-- Q36) What’s the difference between git and github ? What about git and SVN ?
+- Q36) What is the difference between git and github ? What about git and SVN ?
- Q37) What is git rebase?
- Q38) In Git how do you revert a commit that has already been pushed and made public?
-- Q39) What is puppet/chef/ansible used for? What are the advantages over shell scripts ?
+- Q39) What is puppet/chef/ansible used for? What are the advantages over shell scripts ?
- Q40) What do you understand by “Infrastructure as code”? How does it fit into the DevOps methodology? What purpose does it achieve?
@@ -373,7 +370,6 @@
- Feature branching vs trunk based development
- Advantages of requiring pull requests and approvals
-- Q11) More on Front-end Developer Job Interview Questions
***********
@@ -381,20 +377,34 @@
## OS-LINUX:
- Q1) How can you view running processes?
+ - ps aux
+ - top(htop)
- Q2) How do you check server uptime?
+ - uptime
+ - top
- Q3) How do you start/stop services?
+ - (deprecated) service start/stop service_name
+ - systemctl start/stop service_name
- Q4) How do you display the shell’s environment variables?
+ - env
+ - printenv
- Q5) What does #!/bin/bash at the top of a script do?
+ - It say to shell, what interpreter to use when run this script
- Q6) What does "&" after a command do?
+ - It run command in background
- Q7) What does piping commands mean?
+ - piping with '|' transfer stdout of one command to another, for example,
+ `ps aux | grep httpd` - first command show all running processes, then, transfer stdout to stdin of second command, whose find only strings where 'httpd'.
- Q8) What distributions have you used on servers?Why?
+ - Ubuntu - very fresh kernels and packages
+ - CentOS/RHEL - Enterprise and stability
- Q9) What is your favorite editor?
@@ -426,6 +436,7 @@
- Q17) What are zombie processes ?
- Q18) Can you have several HTTPS virtual hosts sharing the same IP?
+ - Yes, I can. I can setup several virtual hosts on one IP and split up yhem with different ports.
- Q19) What is the difference between processes and threads?
@@ -451,6 +462,7 @@
- Q29) What's LD_PRELOAD and when is it used?
- Q30) You ran a binary and nothing happened. How would you debug this?
+ - I run binary with strace, for example: strace binary_name
- Q31) When can a socket receive E_AGAIN ?
@@ -472,249 +484,6 @@
- What’s an ELB ?
- What’s S3 ? What are the features supported on S3 ?
-- Q38) What is your experience with Linux? When you can set up an application on multiple operating systems, on which one would you prefer to set it up and why?
-
-- Q39) Explain what each of the following commands does and give an example on how to use it:
-
- - ls
- - rm
- - rmdir (can you achieve the same result by using rm?)
- - grep
- - wc
- - curl
- - touch
- - man
- - nslookup or dig
- - df
-
-- Q40) Running the command df you get "command not found". What could be wrong and how to fix it?
-
-- Q41) How to make sure a service will start on a OS of your choice?
-
-- Q42) How do you schedule tasks periodically?
-
-- Q43) Have you scheduled tasks in the past? What kind of tasks?
-
-- Permissions
-- Q44) How to change the permissions of a file?
-
-- Q45) What does the following permissions mean?:
-
- - 777
- - 644
- - 750
-
-- Q46) Explain what is setgid, setuid and sticky bit?You try to delete a file but it fails. Name at least three different reason as to why it could happen.
-
-- Q47) What is systemd?On a system which uses systemd, how would display the logs?
-
-- Debugging
-
-- Q48) What are you using for troubleshooting and debugging network issues?
-
-- Q49) What are you using for troubleshooting and debugging disk & file system issues?
-
-- Q50) What are you using for troubleshooting and debugging process issues?
-
-- Q51) What are you using for debugging CPU related issues?
-
-- Q52) You get a call saying "my system is slow" - how would you deal with it?
-
-- Q53) How to debug binaries?
-
-- Q54) What is a Linux kernel module and how do you load a new module?
-
-- Q55) What is KVM?
-
-- Q56) What is the difference between SSH and SSL?
-
-- Q57) What is SSH port forwarding?
-
-- Q58)Explain redirection
-
-- Q59) What are wildcards? Can you give an example of how to use them?
-
-- Q60) What do we grep for in each of the following commands?:
-
- - grep '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' some_file
- - grep -E "error|failure" some_file
- - grep '[0-9]$' some_file
-
-- Q61) Tell me everything you know about Linux boot process?
-
-- Q63) What is an exit code? What exit codes are you familiar with?
-
-
-- Q64) What is the difference between a soft link and hard link?
-
-- Q65) What happens when you delete the original file in case of soft link and hard link?
-
-- Q66) What is a swap partition? What is it used for?
-
-- Q67) You are trying to create a new file but you get "File system is full". You check with df for free space and you see you used only 20% of the space. What could be the problem?
-
-- Q68) What do you know about LVM?
-
-- Q69) Explain the following in regards to LVM:
-
- -PV
- -VG
- - LV
-
-
-- Q70) What is NFS? What is it used for?
-
-- Q71) What RAID is used for? Can you explain the differences between RAID 0, 1, 5 and 10?
-
-- Q72) What is lazy umount?
-
-- Q73) Fix the following commands:
-
- - ```sed "s/1/2/g' /tmp/myFile```
- - ```find . -iname *.yaml -exec sed -i "s/1/2/g" {} ;```
-
-- Q74) Explain what is stored in each of the following paths and if there is anything unique about it:
-
-- Q75) What is chroot?
-
-- Processes
-
-- Q76) How to run a process in the background and why to do that in the first place?
-
-- Q77) How can you find how much memory a specific process consumes?
-
-- Q78) What signal is used when you run 'kill '?
-
-- Q79) What signals are you familiar with?
-
-- Q80) What is a trap?
-
-- Q81) What happens when you press ctrl + c?
-
-- Q82) What are daemons?
-
-- Q83) What are the possible states of a process in Linux?
-
-- Q84) What is a zombie process? How do you get rid of it?
-
-- Q85) What is the init process?
-
-- Q86) How to change the priority of a process? Why would you want to do that?
-
-- Q87) Can you explain how network process/connection is established and how it's terminated?>
-
-- Q88) What are system calls? What system calls are you familiar with?
-
-- Q89) What strace does?
-
-- Q90) Find all the files which end with '.yml' and replace the number 1 in 2 in each file
-
-- Q91) How to check how much free memory a system has? How to check memory consumption by each process?
-
-- Q92) How would you split a 50 lines file into 2 files of 25 lines each?
-
-- Q92) What is a file descriptor? What file descriptors are you familiar with?
-
-- Q93) What's an inode?
-
-- Q94) How to list active connections?
-
-- Q95) What is NTP? What is it used for?
-
-- Q96) Explain Kernel OOM
-
-- Q97) What is SELiunx?
-
-- Q98) What is Kerberos?
-
-- Q99) What is nftables?
-
-- Q100) What firewalld daemon is responsible for?
-
-- Network
-
-- Q101) What is a network namespace? What is it used for?
-
-- Q102) How can you turn your Linux server into a router?
-
-- Q103) What is a virtual IP? In what situation would you use it?
-
-- Q104) Which port is used in each of the following protocols?:
-
- - SSH
- - HTTP
- - DNS
- - HTTPS
-
-
-- Q105) What is the routing table? How do you view it?
-
-- Q106) What are packet sniffers? Have you used one in the past? If yes, which packet sniffers have you used and for what purpose?
-
-- DNS
-
-- Q107) What is DNS? Why do we need it?
-
-- Q108) What the file /etc/resolv.conf is used for? What does it include?
-
-- Q109) What is a "A record"?
-
-- Q110) What is a PTR record?
-
-- Q111) What is a MX record?
-
-- Q112) Is DNS using TCP or UDP?
-
-- Packaging
-
-- Q113) Do you have experience with packaging? Can you explain how it works?
- - RPM: explain the spec format(what it should and can include)
-
-- Q114) How do you list the content of a package without actually installing it?
-
-- Applications and Services
-- Q115) What is a load balancer?
-
-- Q116) What load balancer algorithms are you familiar with?
-
-- Q117) What is a proxy?
-
-- Q118) What is a reverse proxy?
-
-- Q119)What can you find in /etc/services
-
-- Q120) You run ssh 127.0.0.1 but it fails with "connection refused". What could be the problem?
-
-- Q121) What happens when you execute ls?. Provide a detailed answer
-
-- Q122) Can you describe how processes are being created?
-
-
-- Q123) What is the difference between a process and a thread?
-
-- Q124) When you run ip a you see there is a device called 'lo'. What is it and why do we need it?
-
-- Q125) What traceroute command does? How it works?
-
-- Q126) What is network bonding? What types are you familiar with?
-
-- Q127) How to link two separate network namespaces so you can ping an interface on one namespace from the second one?
-
-- Q128) What are cgroups? In what scenario would you use them?
-
-- Q129) How to create a file of a certain size?
-
-- Q130) What are the differences between the following system calls?: exec(), fork(), vfork() and clone()?
-
-- Q131) Explain Process Descriptor and Task Structure?
-
-- Q132) What are the differences between threads and processes?
-
-- Q133) Explain Kernel Threads
-
-- Q134What happens when socket system call is used?
-
-- Q135) You executed a script and while still running, it got accidentally removed. Is it possible to restore the script while it's still running?
******************
@@ -746,138 +515,193 @@
-- Q11) What is Ethernet?
-
-- Q12) What is a MAC address? What is it used for?
-
-- Q13) When this MAC address is used?: ff:ff:ff:ff:ff:ff
-
-- Q14) What is an IP address?
-
-- Q15) Explain subnet mask and given an example
-
-- Q16) What is a private IP address? What do we need it for?
-
-- Q17) Explain the OSI model. What layers there are? What each layer is responsible for?
-
-- Q18) For each of the following determine to which OSI layer it belongs:
-
- - Error correction
- - Packets routing
- - Cables and electrical signals
- - MAC address
- - IP address
- - Sessions between applications
- - 3 way handshake
-
-- Q19) What delivery schemes are you familiar with?
-
-- Q20)What is CSMA/CD? Is it used in modern ethernet networks?
-
-- Q21) Describe the following network devices and the difference between them:
-
- - router
- - switch
- - hub
-
-- Q22) What is NAT?
-
-- Q23) What is a proxy? How it works? What do we need it for?
-
-- Q24) What is the difference between TCP and UDP?
-
-- Q25) Explain "default gateway"
-
-- Q26) How TCP works? What is the 3 way handshake?
-- Q27) What is ARP? How it works?
-
-- Q28) What is TTL?
-
-- Q29) What is DHCP? How it works?
-
-- Q30) What is SSL tunneling? How it works?
-
-- Q31) What is a socket? Where can you see the list of sockets in your system?
-
-- Q32) What is IPv6? Why should we consider using it if we have IPv4?
-
-- Q33) What is VLAN?
-
-- Q34) What is MTU?
-
-- Q35) True or False?. Ping is using UDP because it doesn't care about reliable connection
+*******************
-- Q36) What is SDN?
+## Security:
-- Q37) What is ICMP? What is it used for?
-- Q38) What is NAT? How it works?
+- Q1) What is the importance of SSL?
+ - A: Using SSL ensure the security of the communication between server and client by encrypting the messages going bothways making sure even if the message are intercepted the attacker wouldn't be able to decrypt the messages.
-- Q39) Explain Spanning Tree Protocol (STP)
+- Q2) What is a SQL injection?
+ - A: an attack that targets SQL database management systems by injecting SQL queries in a way that they are executed by the database. The goal is to manipulate the application's SQL query logic to gain unauthorized access to the database or retrieve, modify, or delete data.
-- Q40) What is link aggregation? Why is it used?
+- Q3) What is cross-site scripting (XSS)?
+ - A: a web security vulnerability that allows attackers to inject malicious scripts into web pages viewed by other users. It occurs when a web application allows user input to be included in a web page without proper validation or escaping.
+ - Stored XSS:
+Malicious scripts are permanently stored on the target server, and every user who views the affected page is exposed to the attack.
+ - Reflected XSS:
+The injected script is reflected off a web server, such as in a URL, and executed immediately when the victim opens a manipulated link.
+
+- Q4) Why shouldn’t you roll your own crypto?
-- Q41) What is Asymmetric Routing? How do deal with it?
+- Q5) How are passwords stored on databases?
-- Q42) What overlay (tunnel) protocols are you familiar with?
+- Q6) What is a Man-in-the-middle attack?
-- Q43) What is GRE? How it works?
+- Q7) How do you safely manage environment variables in a cloud environment?
-- Q44) What is VXLAN? How it works?
+- Q8) How do you manage security updates?
-- Q45) What is SNAT?
+- Q9) How do you keep encryption keys and credentials secure but make them available to machines that need them?
-- Q46) Explain OSPF
-- Q47) Explain Spine & Leaf
+**********************
-- Q48) Using Hamming code, what would be the code word for the following data word 100111010001101?
+## Docker
-*******************
+- Q1) What is docker used for?
+- A: Docker is a tool that allows the creation, deletion, running and storing containers.
-## Security:
+- Q2) How to show all containers on your system using docker?
+ - A: `docker ps -a`
+- Q3) How to delete an image that is already being used by a container?
+ - A: `docker rmi -f`
-- Q1) What is the importance of SSL?
+- Q4) What command help you to delete all old unused images?
+ - A: `docker image prune -f`
-- Q2) What is a SQL injection?
+- Q5) What is docker-compose? What is docker-compose.yml?
-- Q3) What is cross-site scripting (XSS)?
+- Q6) How to expose ports in docker-compose file?
-- Q4) Why shouldn’t you roll your own crypto?
+- Q7) How to reduce docker images?
+ - Using Multistage builds
+ - using minimal base images
+ - use as few layers as possible by reducing/combining Dockerfile commands
-- Q5) How are passwords stored on databases?
+- Q8) Where you can store docker images?
+ - A: using a container registry like AWS ECR
-- Q6) What is a Man-in-the-middle attack?
+- Q9) What is alpine and why we need it?
-- Q7) How do you safely manage environment variables in a cloud environment?
+*********************
-- Q8) How do you manage security updates?
-- Q9) How do you keep encryption keys and credentials secure but make them available to machines that need them?
+## kubernetes
+- Q1) What is Kubernetes?
+ - A: Kubernetes is an open-source container management tool that holds the responsibilities of container deployment, scaling & descaling of containers & load balancing. Being Google’s brainchild, it offers excellent community and works brilliantly with all the cloud providers. So, we can say that Kubernetes is not a containerization platform, but it is a multi-container management solution.
-**********************
+- Q2) How is Kubernetes related to Docker?
+ - A: It’s a known fact that Docker provides the lifecycle management of containers and a Docker image builds the runtime containers. But, since these individual containers have to communicate, Kubernetes is used. So, Docker builds the containers and these containers communicate with each other via Kubernetes. So, containers running on multiple hosts can be manually linked and orchestrated using Kubernetes.
+
+- Q3) What is Container Orchestration?
+ - A: Consider a scenario where you have 5-6 microservices for an application. Now, these microservices are put in individual containers, but won’t be able to communicate without container orchestration. So, as orchestration means the amalgamation of all instruments playing together in harmony in music, similarly container orchestration means all the services in individual containers working together to fulfill the needs of a single server.\
+- Q4) What do you know about clusters in Kubernetes?
+ - A: The fundamental behind Kubernetes is that we can enforce the desired state management, by which I mean that we can feed the cluster services of a specific configuration, and it will be up to the cluster services to go out and run that configuration in the infrastructure.
+ So, as you can see in the above diagram, the deployment file will have all the configurations required to be fed into the cluster services. Now, the deployment file will be fed to the API and then it will be up to the cluster services to figure out how to schedule these pods in the environment and make sure that the right number of pods are running.
-## Docker
+So, the API which sits in front of services, the worker nodes & the Kubelet process that the nodes run, all together make up the Kubernetes Cluster.
+- Q5) How to do maintenance activity on the K8s node?
+ - A: Whenever there are security patches available the Kubernetes administrator has to perform the maintenance task to apply the security patch to the running container in order to prevent it from vulnerability, which is often an unavoidable part of the administration. The following two commands are useful to safely drain the K8s node.
+`kubectl cordon`
+`kubectl drain –ignore-daemon set`
+The first command moves the node to maintenance mode or makes the node unavailable, followed by kubectl drain which will finally discard the pod from the node. After the drain command is a success you can perform maintenance.
-*********************
+Note: If you wish to perform maintenance on a single pod following two commands can be issued in order:
+`kubectl get nodes` to list all the nodes
+`kubectl drain ` drain a particular node
+
+- Q6) What is the role of Load Balance in Kubernetes?
+ - A: Load balancing is a way to distribute the incoming traffic into multiple backend servers, which is useful to ensure the application available to the users.
+ In Kubernetes, as shown in the above figure all the incoming traffic lands to a single IP address on the load balancer which is a way to expose your service to outside the internet which routes the incoming traffic to a particular pod (via service) using an algorithm known as round-robin. Even if any pod goes down load balances are notified so that the traffic is not routed to that particular unavailable node. Thus load balancers in Kubernetes are responsible for distributing a set of tasks (incoming traffic) to the pods
+
+- Q7) How to monitor the Kubernetes cluster?
+ - A: Prometheus is used for Kubernetes monitoring. The Prometheus ecosystem consists of multiple components.
-## kubernetes
+Mainly Prometheus server which scrapes and stores time-series data.
+Client libraries for instrumenting application code.
+Push gateway for supporting short-lived jobs.
+Special-purpose exporters for services like StatsD, HAProxy, Graphite, etc.
+An alert manager to handle alerts on various support tools
+- Q8) Can you explain the differences between Docker Swarm and Kubernetes?
+ - A: Below are the main difference between Kubernetes and Docker:
+The installation procedure of the K8s is very complicated but if it is once installed then the cluster is robust. On the other hand, the Docker swarm installation process is very simple but the cluster is not at all robust.
+Kubernetes can process the auto-scaling but the Docker swarm cannot process the auto-scaling of the pods based on incoming load.
+Kubernetes is a full-fledged Framework. Since it maintains the cluster states more consistently so autoscaling is not as fast as Docker Swarm.
+
+- Q9) How can containers within a pod communicate with each other?
+ - A: Containers within a pod share networking space and can reach other on localhost. For instance, if you have two containers within a pod, a MySQL container running on port 3306, and a PHP container running on port 80, the PHP container could access the MySQL one through localhost:3306.
+
+- Q10) Explain what is a Master Node and what component does it consist of?
+ - A: The master node is the most vital component responsible for Kubernetes architecture
+ It is the central controlling unit of Kubernetes and manages workload and communications across the clusters
+ The master node has various components, each having its process. They are:
+ -ETCD
+ -Controller Manager
+ -Scheduler
+ -API Server
+
+ - ETCD (Cluster store):
+ -This component stores the configuration details and essential values
+ -It communicates with all other components to receive the commands and work in order to perform an action
+ -It also manages network rules and posts forwarding activity
+
+ - Controller Manager
+ -It is responsible for most of the controllers and performs a task
+ -It is a daemon which runs in a continuous loop and is responsible for collecting and sending information to API server
+ -The key controllers handle nodes, endpoints, etc.
+
+ - Scheduler:
+ -It is one of the key components of the master node associated with the distribution of workload
+ -The scheduler is responsible for workload utilization and allocating pod to a new node
+ -The scheduler should have an idea of the total resources available as well as resources allocated to existing workloads on each node
+
**********************
## Architecture:
+-1. Question: Explain the components of Kubernetes architecture and their roles.
+Solution:
+Kubernetes architecture consists of several key components:
+
+Master Node: Manages the cluster and its components.
+API Server: Exposes the Kubernetes API.
+Controller Manager: Ensures the desired state of the cluster.
+Scheduler: Assigns nodes to newly created pods.
+etcd: Consistent and highly-available key-value store used as Kubernetes' backing store.
+Node (Minion) Nodes: Where containers are launched.
+Kubelet: Ensures that containers are running in a Pod.
+Kube Proxy: Maintains network rules for Pod communication.
+Container Runtime: Software responsible for running containers.
+
+-2. Question: What is a Kubernetes Pod and how does it work in a cluster?
+Solution:
+A Pod is the smallest deployable unit in Kubernetes, representing a single instance of a running process in a cluster. Pods can contain multiple containers that share the same network namespace, allowing them to communicate with each other using localhost. Pods are scheduled to run on nodes and can be horizontally scaled by creating multiple replicas managed by Controllers like Deployments.
+
+-3. Question: How does Kubernetes ensure high availability and fault tolerance?
+Solution:
+Kubernetes achieves high availability through:
+
+Replication: Replicating applications across multiple nodes.
+Self-healing: Automatically replaces failed containers or reschedules Pods.
+Load Balancing: Distributes network traffic across multiple Pods.
+Additionally, Kubernetes ensures fault tolerance through features like node monitoring, automatic scaling, and rolling updates, which allow applications to be updated without downtime.
+
+-4. Question: Explain the concept of Kubernetes Services and their types.
+Solution:
+Kubernetes Services provide stable endpoints for Pods. There are several types of Services:
+
+ClusterIP: Exposes the Service on a cluster-internal IP.
+NodePort: Exposes the Service on each Node's IP at a static port.
+LoadBalancer: Exposes the Service externally using a cloud provider's load balancer.
+ExternalName: Maps the Service to the contents of the externalName field (e.g., a DNS name).
+
+-5. Question: What are Kubernetes Deployments, and how do they manage application updates?
+Solution:
+Deployments in Kubernetes describe an application’s life cycle, enabling declarative updates for Pods and ReplicaSets. They provide a way to describe an application’s desired state. When a Deployment’s Pod template (e.g., container image version) is updated, it triggers a rolling update, ensuring zero-downtime updates. Old Pods are replaced by new ones gradually, minimizing disruptions.
******************
diff --git a/Interview/devops interview que.md b/Interview/devops interview que.md
new file mode 100644
index 00000000..09280d26
--- /dev/null
+++ b/Interview/devops interview que.md
@@ -0,0 +1,363 @@
+
+
+DevOps Interview Questions
+
+1. List the essential DevOps tools?
+Answer:
+
+Git
+Jenkins
+Selenium
+Puppet
+Chef
+Ansible
+Nagios
+Docker
+Monit
+ELK –Elasticsearch, Logstash, Kibana
+Collected/Collect
+Git(GitHub)
+
+2. Why Hybrid Clouds are so important?
+Answer: Cloud Bursting:
+Access capacity or specialized software is available in the public cloud and not in a private cloud
+Examples: Virtual Amazon and Dynamo
+Leverage the best of both worlds:
+VCloud:
+It is VM Ware cloud
+It is Expensive
+Enterprise quality
+Open stack:
+It has commodity servers and storage.
+It is less reliable.
+We can run Web servers on OpenStack.
+The database is built on VCloud.
+
+3. Explain how can I vertically scale an Amazon instance?
+Answer: This is one of the essential features of AWS and cloud virtualization. SpinUp a newly developed large instance where we pause that instance and detach the root Ebs volume from the server and discard. Later stop your live instance, detach its root volume connected. Note down the unique device ID and attach the same root volume to the new server. And restart it again. This results in a vertically scaled Amazon instance.
+
+Server group provides 80 and 443 from around the world, but only port 22 are vital among the jump box group. Database group allows port 3306 from the webserver group and port 22 from the jump box group. Addition of any machines to the webserver group can store in the database. No one can directly ssh to any of your boxes.
+
+4. What are the building blocks in cloud architecture?
+Answer:
+
+Reference architecture
+Technical architecture
+Deployment operation architecture
+Reference architecture
+Technical architecture
+Deployment operation architecture
+
+5. DevOps Toolchain?
+Answer: DevOps Toolchain:
+
+Code: code development and review, source code management tools, code merging
+Build: continuous integration tools, build status
+Test: continuous testing tools that provide feedback on business risks
+Package: artifact repository, application pre-deployment staging
+Release: change management, release approvals, release automation
+Configure: infrastructure configuration and management, Infrastructure as Code tools
+Monitor: applications performance monitoring, end-user experience
+Some categories are more essential in a DevOps toolchain than others; especially continuous integration (e.g. Jenkins) and infrastructure as code (e.g. Puppet).
+Source: Wikipedia
+We have the comprehensive DevOps Training Courses to give you a head start in your career.
+
+6. Mention some important features of Memcached?
+Answer: Important features of Memcached includes:
+CAS Tokens: A CAS token is attached to any object retrieved from cache. You can use that token to save your updated object.
+Callbacks: It simplifies the code
+Get Delayed: It reduces the delay time of your script which is waiting for results to come back from the server
+Binary protocol: You can use binary protocol instead of ASCII with the newer client
+
+In binary: Previously, the client always used to do serialization of the value with complex data, but with Memcached, you can use the binary option.
+
+7. How is DevOps different from Agile / SDLC?
+Answer: I would advise you to go with the below explanation:
+Agile is a set of values and principles about how to produce i.e. develop software. Example: if you have some ideas and you want to turn those ideas into working software, you can use the Agile values and principles as a way to do that. But, that software might only be working on a developer’s laptop or in a test environment. You want a way to quickly, easily and repeatably move that software into production infrastructure, in a safe and simple way. To do that you need DevOps tools and techniques.
+
+You can summarize by saying Agile software development methodology focuses on the development of software but DevOps, on the other hand, is responsible for development as well as the deployment of the software in the safest and most reliable way possible. Here’s a blog that will give you more information on the evolution of DevOps.
+
+8. List the major difference between the Agile and DevOps?
+Agile:
+Agile is about software development
+Devops:
+DevOps is about software deployment and management.
+DevOps does not replace Agile or Lean. It does this by killing waste, removing handovers, and streamlining deployments to allow faster and more continuous deployments to PRODUCTION.
+
+9. What are the core roles of DevOps Engineers in terms of development and Infrastructure?
+Answer:
+
+The core job roles of DevOps Engineer
+Application development
+Code developing
+Code coverage
+Unit testing
+Packaging
+Deployment With infrastructure
+Continuous Integration
+Continuous Testing
+Continuous Deployment
+Provisioning
+Configuration
+Orchestration
+Deployment
+
+10. What is Version control?
+Answer: This is probably the easiest question you will face in the interview. My suggestion is to first give a definition of Version control. It is a system that records changes to a file or set of files over time so that you can recall specific versions later. Version control systems consist of a central shared repository where teammates can commit changes to a file or set of file. Then you can mention the uses of version control.
+
+Revert files back to a previous state.
+Revert the entire project back to a previous state.
+Compare changes over time.
+See who last modified something that might be causing a problem.
+Who introduced an issue and when.
+
+11. How would you prepare for migration?
+Answer: This question evaluates your experience of real projects with all the awkwardness and complexity they bring. Include terms like cut-over, dress rehearsals, roll-back and roll-forward, DNS solutions, feature toggles, branch by abstraction, and automation in your answer. Developing greenfield systems with little or no existing technology in place is always easier than having to deal with legacy components.
+
+12. Explain Security management in terms of Cloud Computing?
+Answer: Identity management access provides the authorization of application services.
+Access control permission is given to the users to have complete controlling access of another user who is entering into the cloud environment.
+Authentication and Authorization provide access to only the authorized and authenticated users only to access the data and applications.
+
+13. What are the anti-patterns of DevOps?
+Answer: A pattern is a common usage usually followed. If a pattern commonly adopted by others does not work for your organization and you continue to blindly follow it, you are essentially adopting an anti-pattern. There are myths about DevOps. (oracle apex training online )
+
+14. How do all these tools work together?
+Answer:
+Given below is a generic logical flow where everything gets automated for seamless delivery. However, this flow may vary from organization to organization as per the requirement.
+Developers develop the code and this source code is managed by Version Control System tools like Git etc.
+Developers send this code to the Git repository and any changes made in the code is committed to this Repository.
+Jenkins pulls this code from the repository using the Git plugin and builds it using tools like Ant or Maven.
+Configuration management tools like puppet deploys & provisions testing environment and then Jenkins releases this code on the test environment on which testing is done using tools like selenium.
+Once the code is tested, Jenkins send it for deployment on the production server (even production server is provisioned & maintained by tools like a puppet).
+After deployment, It is continuously monitored by tools like Nagios.
+Docker containers provide a testing environment to test the build features.
+
+15. What is the difference between Active and Passive check in Nagios?
+Answer: For this answer, first, point out the basic difference Active and Passive checks. The major difference between Active and Passive checks is that Active checks are initiated and performed by Nagios, while passive checks are performed by external applications.
+If your interviewer is looking unconvinced with the above explanation then you can also mention some key features of both Active and Passive.
+
+16. Mention what are the key aspects or principle behind DevOps?
+Answer: The key aspects or principle behind DevOps is
+
+Infrastructure as code
+Continuous deployment
+Automation
+Monitoring
+Security
+
+17. What DevOps tools have you worked with?
+Answer: Software configuration management and build/release (version control) tools, including Apache Subversion, Mercurial, Fossil and others, help document change requests. Developers can more easily follow the company’s best practices and policies while software changes.
+Continuous integration (CI) tools such as Rational Build Forge, Jenkins and Semaphore merge all developer copies of the working code into a central version. These tools are important for larger groups where teams of developers work on the same codebase simultaneously. QA experts use code analyzers to test software for bugs, security, and performance. If you’ve used HP’s Fortify Static Code Analyzer, talk about how it identified security vulnerabilities in coding languages. Also speak about tools like Gramma Tech’s Code Sonar that you used to identify memory leaks, buffer underruns and other defects for C/C++ and Java code. It is essential that you have an adequate command of the principal languages like Ruby, C#, .NET, Perl, Python, Java, PHP, Windows Power Shell, and are comfortable with the associated OS environments Windows, Linux, and Unix.
+
+18. What testing is necessary to ensure a new service is ready for production?
+Answer: DevOps is all about continuous testing throughout the process, starting with development through to production. Everyone shares the testing responsibility. This ensures that developers are delivering code that doesn’t have any errors and is of high quality, and it also helps everyone leverage their time most effectively. ( oracle apex training online )
+
+19. What is State Stalking in Nagios?
+Answer: I will advise you to first give a small introduction on State Stalking. It is used for logging purposes. When Stalking is enabled for a particular host or service, Nagios will watch that host or service very carefully and log any changes it sees in the output of check results.
+Depending on the discussion between you and interviewer you can also add, “It can be very helpful in later analysis of the log files. Under normal circumstances, the result of a host or service check is only logged if the host or service has changed state since it was last checked.
+
+20. What is meant by Continuous Integration?
+Answer:
+I will advise you to begin this answer by giving a small definition of Continuous Integration (CI). It is a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early.
+I suggest that you explain how you have implemented it in your previous job. You can refer to the below-given example:
+Developers check out code into their private workspaces.
+When they are done with it they commit the changes to the shared repository (Version Control Repository).
+The CI server monitors the repository and checks out changes when they occur.
+The CI server then pulls these changes and builds the system and also runs unit and integration tests.
+The CI server will now inform the team of the successful build.
+If the build or tests fail, the CI server will alert the team.
+The team will try to fix the issue at the earliest opportunity.
+This process keeps on repeating.
+
+21. Why do you need a Continuous Integration of Dev & Testing?
+Answer: For this answer, you should focus on the need for Continuous Integration. My suggestion would be to mention the below explanation in your answer:
+Continuous Integration of Dev and Testing improves the quality of software and reduces the time taken to deliver it, by replacing the traditional practice of testing after completing all development. It allows the Dev team to easily detect and locate problems early because developers need to integrate code into a shared repository several times a day (more frequently). Each check-in is then automatically tested. ( data science training )
+
+22. What is Git?
+Answer: I will suggest that you attempt this question by first explaining the architecture of git as shown in the below diagram. You can refer to the explanation given below:
+
+Git is a Distributed Version Control system (DVCS). It can track changes to a file and allows you to revert back to any particular change.
+Its distributed architecture provides many advantages over other Version Control Systems (VCS) like SVN one major advantage is that it does not rely on a central server to store all the versions of a project’s files. Instead, every developer “clones” a copy of a repository I have shown in the diagram below with “Local repository” and has the full history of the project on his hard drive so that when there is a server outage, all you need for recovery is one of your teammate’s local Git repository.
+
+There is a central cloud repository as well where developers can commit changes and share it with other teammates as you can see in the diagram where all collaborators are committing changes “Remote repository”. ()
+
+23. Explain what is Memcached?
+Answer: Memcached is a free and open-source, high-performance, distributed memory object caching system. The primary objective of Memcached is to enhance the response time for data that can otherwise be recovered or constructed from some other source or database. It is used to avoid the need to operate SQL database or another source repetitively to fetch data for the concurrent request.
+Memcached can be used for
+
+Social Networking -> Profile Caching
+Content Aggregation -> HTML/ Page Caching
+Ad targeting -> Cookie/profile tracking
+Relationship -> Session caching
+E-commerce -> Session and HTML caching
+Location-based services -> Database query scaling
+Gaming and entertainment -> Session caching
+Memcache helps in
+Speed up application processes
+It determines what to store and what not to
+Reduce the number of retrieval requests to the database
+Cuts down the I/O ( Input/Output) access (hard disk)
+The drawback of Memcached is
+It is not a persistent data store
+Not a database
+It is not an application-specific
+It cannot cache large object
+
+24. What is Automation Testing?
+Answer: Automation testing or Test Automation is a process of automating the manual process to test the application/system under test. Automation testing involves the use of separate testing tools which lets you create test scripts which can be executed repeatedly and doesn’t require any manual intervention.
+
+25. How to launch the Browser using WebDriver?
+Answer:
+The following syntax can be used to launch Browser:
+
+WebDriver driver = new FirefoxDriver();
+WebDriver driver = new ChromeDriver();
+WebDriver driver = new InternetExplorerDriver();
+
+26. What are the goals of Configuration management processes?
+Answer: The purpose of Configuration Management (CM) is to ensure the integrity of a product or system throughout its life-cycle by making the development or deployment process controllable and repeatable, therefore creating a higher quality product or system. The CM process allows orderly management of system information and system changes for purposes such as to:
+
+Revise capability,
+Improve performance,
+Reliability or maintainability,
+Extend life,
+Reduce cost,
+Reduce risk and
+Liability, or correct defects.
+
+27. What is Chef?
+Answer: Begin this answer by defining Chef. It is a powerful automation platform that transforms infrastructure into code. A chef is a tool for which you write scripts that are used to automate processes. What processes? Pretty much anything related to IT.
+Now you can explain the architecture of Chef, it consists of:
+
+Chef Server: The Chef Server is the central store of your infrastructure’s configuration data. The Chef Server stores the data necessary to configure your nodes and provides search, a powerful tool that allows you to dynamically drive node configuration based on data.
+
+Chef Node: A Node is any host that is configured using Chef-client. Chef-client runs on your nodes, contacting the Chef Server for the information necessary to configure the node. Since a Node is a machine that runs the Chef-client software, nodes are sometimes referred to as “clients”.
+
+Chef Workstation: A Chef Workstation is a host you use to modify your cookbooks and other configuration data.
+
+28. What is Continuous Testing?
+Answer: I will advise you to follow the below-mentioned explanation:
+Continuous Testing is the process of executing automated tests as part of the software delivery pipeline to obtain immediate feedback on the business risks associated with the latest build. In this way, each build is tested continuously, allowing Development teams to get fast feedback so that they can prevent those problems from progressing to the next stage of Software delivery life-cycle. This dramatically speeds up a developer’s workflow as there’s no need to manually rebuild the project and re-run all tests after making changes.
+
+29. What are the success factors for Continuous Integration?
+Answer: Here you have to mention the requirements for Continuous Integration. You could include the following points in your answer:
+
+Maintain a code repository
+Automate the build
+Make the build self-testing
+Everyone commits to the baseline every day
+Every commit (to baseline) should be built
+Keep the build fast
+Test in a clone of the production environment
+Make it easy to get the latest deliverables
+Everyone can see the results of the latest build
+Automate deployment.
+
+30. What is Puppet?
+Answer: I will advise you to first give a small definition of Puppet. It is a Configuration Management tool which is used to automate administration tasks.
+
+Now you should describe its architecture and how Puppet manages its Agents. Puppet has a Master-Slave architecture in which the Slave has to first send a Certificate signing request to Master and Master has to sign that Certificate in order to establish a secure connection between Puppet Master and Puppet Slave as shown in the diagram below. Puppet Slave sends a request to Puppet Master and Puppet Master then pushes configuration on Slave.
+
+31. What is the Puppet Manifests?
+Answer: It is a very important question so make sure you go in the correct flow. According to me, you should first define Manifests. Every node (or Puppet Agent) has got its configuration details in Puppet Master, written in the native Puppet language. These details are written in the language which Puppet can understand and are termed as Manifests. They are composed of Puppet code and their filenames use the .pp extension.
+
+Now give an example. You can write a manifest in Puppet Master that creates a file and installs apache on all Puppet Agents (Slaves) connected to the Puppet Master.
+
+32. What testing is necessary to ensure that a new service is ready for production?
+Answer: DevOps is all about continuous testing throughout the process, starting with development through to production. Everyone shares the testing responsibility. This ensures that developers are delivering code that doesn’t have any errors and is of high quality, and it also helps everyone leverage their time most effectively.
+
+33. Explain how Memcached should not be used?
+Answer:
+Memcached common misuse is to use it as a data store, and not as a cache Never use Memcached as the only source of the information you need to run your application. Data should always be available through another source as well. Memcached is just a key or value store and cannot perform query over the data or iterate over the contents to extract information. Memcached does not offer any form of security either in encryption or authentication
+
+34. Explain your understanding and expertise on both the software development side and the technical operations side of an organization you’ve worked for in the past?
+Answer: DevOps engineers almost always work in a 24/7 business-critical online environment. I was adaptable to on-call duties and able to take up real-time, live-system responsibility. I successfully automated processes to support continuous software deployments. I have experience with public/private clouds, tools like Chef or Puppet, scripting and automation with tools like Python and PHP, and a background in AGILE.
+
+35. Explain whether it is possible to share a single instance of a Memcache between multiple projects?
+Answer: Yes, it is possible to share a single instance of Memcache between multiple projects. Memcache is a memory store space, and you can run Memcache on one or more servers. You can also configure your client to speak to a particular set of instances. So, you can run two different Memcache processes on the same host and yet they are completely independent. Unless, if you have partitioned your data, then it becomes necessary to know from which instance to get the data from or to put into.
+
+36. Explain how you can minimize the Memcached server outages?
+Answer:
+When one instance fails, several of them goes down, this will put a larger load on the database server when lost data is reloaded as the client make a request. To avoid this, if your code has been written to minimize cache stampedes then it will leave a minimal impact
+Another way is to bring up an instance of Memcached on a new machine using the lost machines IP address
+Code is another option to minimize server outages as it gives you the liberty to change the Memcached server list with minimal work
+Setting timeout value is another option that some Memcached clients implement for Memcached server outage. When your Memcached server goes down, the client will keep trying to send a request till the time-out limit is reached
+
+37. Is continuous delivery related to the dev-ops movement? How so?
+Answer: Absolutely. In any organization where there is a separate operations department, and especially where there is an independent QA or testing function, we see that much of the pain in getting software delivered is caused by poor communication between these groups, exacerbated by an underlying cultural divide. Apps are measured according to throughput, and ops are measured according to stability. Testing gets it in the neck from both sides, and like release management, is often a political pawn in the fight between apps and ops. The point of dev-ops is that developers need to learn how to create high-quality, production-ready software, and ops need to learn that Agile techniques are actually powerful tools to enable effective, low-risk change management. Ultimately, we’re all trying to achieve the same thing – creating business value through software – but we need to get better at working together and focusing on this goal rather than trying to optimize our own domains. Unfortunately, many organizations aren’t set up in a way that rewards that kind of thinking. According to Forrester.
+
+38. What are the advantages of DevOps with respect to Technical and Business perspective?
+Answer:
+Technical benefits:
+
+Software delivery is continuous.
+Reduces Complexity in problems.
+Faster approach to resolve problems
+Manpower is reduced.
+Business benefits:
+
+The high rate of delivering its features
+Stable operating environments
+More time gained to Add values.
+Enabling faster feature time to market
+
+39. Explain AWS?
+Answer: AWS stands for Amazon Web Service which is a collection of remote computing services also known as cloud computing. This technology of cloud computing is also known as IaaS or Infrastructure as a Service.
+
+40. What is DevOps engineer’s duty with regards to Agile development?
+Answer: DevOps engineer works very closely with Agile development teams to ensure they have an environment necessary to support functions such as automated testing, Continuous Integration, and Continuous Delivery. DevOps engineer must be in constant contact with the developers and make all required parts of the environment work seamlessly.
+
+41. What is the most important thing DevOps helps us achieve?
+Answer: According to me, the most important thing that DevOps helps us achieve is to get the changes into production as quickly as possible while minimizing risks in software quality assurance and compliance. This is the primary objective of DevOps. Learn more in this DevOps tutorial blog.
+However, you can add many other positive effects of DevOps. For example, clearer communication and better working relationships between teams i.e. both the Ops team and Dev team collaborate together to deliver good quality software which in turn leads to higher customer satisfaction.
+
+42. Which VCS tool you are comfortable with?
+Answer: You can just mention the VCS tool that you have worked on like this: “I have worked on Git and one major advantage it has over other VCS tools like SVN is that it is a distributed version control system.”
+Distributed VCS tools do not necessarily rely on a central server to store all the versions of a project’s files. Instead, every developer “clones” a copy of a repository and has the full history of the project on their own hard drive.
+
+43. Which Testing tool are you comfortable with and what are the benefits of that tool?
+Answer: Here mention the testing tool that you have worked with and accordingly frame your answer. I have mentioned an example below:
+I have worked on Selenium to ensure high quality and more frequent releases.
+
+Some advantages of Selenium are:
+
+It is free and open source
+It has a large user base and helping communities
+It has cross Browser compatibility (Firefox, Chrome, Internet Explorer, Safari, etc.)
+It has great platform compatibility (Windows, Mac OS, Linux, etc.)
+It supports multiple programming languages (Java, C#, Ruby, Python, Pearl, etc.)
+It has fresh and regular repository developments
+It supports distributed testing
+
+44. Why is Continuous monitoring necessary
+Answer: I will suggest you go with the below-mentioned flow:
+Continuous Monitoring allows timely identification of problems or weaknesses and quick corrective action that helps reduce expenses of an organization. Continuous monitoring provides a solution that addresses three operational disciplines known as:
+
+continuous audit
+continuous controls monitoring
+continuous transaction inspection
+45. What is the one most important thing DevOps helps do?
+Answer: The most important thing DevOps helps do is to get the changes into production as quickly as possible while minimizing risks in software quality assurance and compliance. That is the primary objective of DevOps. However, there are many other positive side-effects to DevOps. For example, clearer communication and better working relationships between teams which creates a less stressful working environment.
+
+46. Describe two-factor authentication?
+Answer: Two-factor authentication is a security process in which the user provides two means of identification from separate categories of credentials; one is typically a physical token,
+
+47. Explain how can create a backup and copy files in Jenkins?
+Answer: Answer to this question is really direct. To create a backup, all you need to do is to periodically back up your JENKINS_HOME directory. This contains all of your build jobs configurations, your slave node configurations, and your build history. To create a back-up of your Jenkins setup, just copy this directory. You can also copy a job directory to clone or replicate a job or rename the directory.
+
+48. What is Cloud Computing?
+Answer: It is advance stage technology implemented so that the cloud provides the services globally as per the user requirements. It provides a method to access several servers worldwide.
+
+49. Explain with a use case where DevOps can be used in industry/ real-life?
+Answer: There are many industries that are using DevOps so you can mention any of those use cases, you can also refer the below example:
+Etsy is a peer-to-peer e-commerce website focused on handmade or vintage items and supplies, as well as unique factory-manufactured items. Etsy struggled with slow, painful site updates that frequently caused the site to go down. It affected sales for millions of Etsy’s users who sold goods through the online market place and risked driving them to the competitor.
+
+With the help of a new technical management team, Etsy transitioned from its waterfall model, which produced four-hour full-site deployments twice weekly, to a more agile approach. Today, it has a fully automated deployment pipeline, and its continuous delivery practices have reportedly resulted in more than 50 deployments a day with fewer disruptions.
+
+50. Explain how would you handle revision (version) control?
+Answer: My approach to handling revision control would be to post the code on SourceForge or GitHub so everyone can view it. Also, I will post the checklist from the last revision to make sure that any unsolved issues are resolved.
+
+51. How would you make software deployable?
+Answer: The ability to script the installation and reconfiguration of software systems is essential towards controlled and automated change. Although there is an increasing trend for new software to enable this, older systems and products suffer from the assumption that changes would be infrequent and minor, and so make automated changes difficult. As a professional who appreciates the need to expose configuration and settings in a manner accessible to automation, I will work with concepts like Inversion of Control (IoC) and Dependency Injection, scripted installation, test harnesses, separation of concerns, command-line tools, and infrastructure as code.
+
diff --git a/Interview/devops-checklist.md b/Interview/devops-checklist.md
new file mode 100644
index 00000000..95805434
--- /dev/null
+++ b/Interview/devops-checklist.md
@@ -0,0 +1,95 @@
+# Devops Checklist
+
+ This list is not exhaustive but enumerates only technical basic, must-know skills, and some random thoughts. You may use them as a checklist to evaluate yourself or someone else or to prepare for your next DevOps/SRE job interviews.
+
+- This list is opinionated.
+
+
+- [ ] You should master *nix systems and have a good understanding of how Linux distributions work.
+- [ ] Be at ease with Terminal. You may have GUIs to manage your servers but you have to LOVE the terminal no matter what’s the case, it is faster, secure and honestly, it is easier once you master it.
+- [ ]How to get the CPU/system info (cat /proc/version, /proc/cpuinfo, uptime, et. al.)
+- [ ] How cron jobs work. Set cron jobs on specific days/time/month.
+- [ ] How to know what OS you are running on your machine (cat /etc/lsb-release)
+- [ ] Learn the difference between different *nix OSs and How to know what OS you are running on your machine (e.g. cat /etc/lsb-release)
+- [ ] Difference between shells: sh/dash/bash/ash/zsh ..
+- [ ] How to set and unset ENV variables. Exporting ENV variable is temporary, how to export permanent variables ?
+- [ ] What are shell configuration files : ~/.bashrc, .bash_profile, .environment .. How to “source” settings for program initialization files.
+- [ ] Knowing Vim, its configuration (.vimrc) and some of its basic tips is a must.
+- [ ] How logging works in *nix systems, what are logging levels and how to work with log management tools (rsyslog, logstash, fluentd, logwatch, awslogs ..)
+- [ ] How swapping works. What is swappiness. (swapon -s, /proc/sys/vm/swappiness, sysctl vm.swappiness ..)
+- [ ] How to view/set network configuration on a system
+- [ ] How to set static/dynamic IP address on a machine with different subnets? (Hint: CIDR)
+- [ ] How to view/set/backup your router settings?
+- [ ] How DNS works ? How to set-up a DNS server (Bind, Unbound, PowerDNS, Dnsmasq ..) ? What is the difference between recursive and authoritative DNS ? How to troubleshoot DNS (nslookup, dig ..etc)
+- [ ] Get familiar with DNS and A, AAAA, C, CNAME, TXT records
+- [ ] How SSH works, how to debug it and how you can generate ssh keys and do passwordless login to other machines
+- [ ] How to set-up a web server (Apache, Nginx ..)
+- [ ] What are the difference between Nginx and Apache ? When to use Nginx ? When to use Apache ? You may use both of them in the same web application, when and how ?
+- [ ] How to set-up a reverse-proxy (Nginx ..)
+- [ ] How to set-up a caching server ( Squid, Nginx ..)
+- [ ] How to set-up a load balancer ( HAproxy, Nginx ..)
+- [ ] What is an init system ? Do you know Systemd (used by Ubuntu since 15.04) , Upstart (developed by Ubuntu), SysV ..
+- [ ] Get familiar with Systemd and how to analyze and manage services using commands like systemctl and journalctl
+- [ ] Compiling any software from its source (gcc, make and other related stuff)
+- [ ] How to compress/decompress a file in different formats via terminal (mostly: tar/tar.gz)
+- [ ] How to set-up firewalls (iptables at least ufw) : set rules,list rules, route traffic, block a protocol/port ..
+- [ ] Learn most used port numbers on which services runs by default (like: SSH (22), Web (80), HTTP/S (443) etc.)
+- [ ] Learn how to live debug and trace running application in production servers.
+- [ ] Be at ease with scripting languages. Bash is a must (Other scripting languages are very useful like Python, Perl..).
+- [ ] Learn how to use at least one of the configuration management and remote execution tools (Ansible, Puppet, SaltStack, Chef ..etc). Your choice should be based on criterias like: syntax, performance, templating language, push vs pull model, performance, architecture, integration with other tools, scalability, availability ..etc.
+- [ ] Learn how to configure and use continuous integration and continuous delivery tools like Jenkins, Travis CI, Buildbot, GoCd. Integrating this tools with other tools (like Selenium, build tools, configuration management software, Docker, Cloud providers’ SDKs ..etc) is helpful.
+- [ ] Learn distributed version control system Git and its basic commands (pull/push/commit/clone/branch/merge/logs…etc.). Understand git workflows. Do you know how to revert a Git repository to a previous commit ?
+- [ ] How to use SSH-keys. Try Github, Bitbucket or Gitlab .. to configure passwordless access to the repo/account
+- [ ]Get familiar with tools like Vagrant to help you create distributable and portable development environments.
+- [ ] Start looking into infrastructure as code and infrastructure provisioning automation tools like Terraform and Packer
+- [ ] Start looking into containers and Docker. It’s underlying architecture (cgroups and namespaces). How it works?
+- [ ] Start getting familiar with basic Docker commands (logs/inspect/top/ps/rm). Also look into docker hub (push/pull image)
+- [ ] Start looking into container orchestration tools: Docker Swarm, Kubernetes, Mesosphere DC/OS, AWS ECS
+- [ ] Dive into DB (MySQL or any other which you like)
+- [ ] Learn about Redis/Memcache and similar tools
+- [ ] What is your backup strategy ? How do you test if a backup is reliable
+- [ ] Do you know ext4, ntfs, fat ? Do you know Union filesystems ?
+- [ ] Develop your Cloud Computing skills. Start by choosing a cloud infrastructure provider: Amazon Web Services, Google Cloud Platform, Digitalocean, Microsoft Azure. Or create your own private cloud using OpenStack.
+- [ ] What about staging servers ? What is your testing strategy Unit Testing ? End-to-end ? So you really need staging servers ? Google “staging servers must die”.
+- [ ] Read about PaaS/Iaas/Saas/CaaS/FaaS/DaaS and serverless architecture
+- [ ] Learn how to use and configure Cloud resources from your CLI using Cloud Shells or from your programs using Cloud SDKs
+- [ ] Are you familiar with the OSI Model and the TCP/IP model specifications ? What are the difference between TCP and UDP ? Do you know vxlan ?
+- [ ] Master useful commands like process monitoring commands (ps, top, htop, atop ..), system performance commands (nmon, iostat, sar, vmstat ..) and network troubleshooting and analysis (nmap, tcpdump, ping, traceroute, airmon, airodump ..).
+- [ ] Get to know HTTP status codes (2xx, 3xx, 4xx, 5xx)
+- [ ] Are you familiar with IDEs (Sublime Text, Atom, Eclipse ..) ?
+- [ ] Network packet analysis: tcpdump, Wireshark ..
+- [ ] What happens exactly when you hit google.com in the browser? From your browser’s cache, local DNS cache, local network configuration(hosts file), routing, DNS, network, web protocols, caching systems to web servers (Most basic question yet difficult if goes deep).
+- [ ] Get familiar with the mumble-jumble of Kernel versions and how to patch them.
+- [ ] Get familiar with how SSL/TLS works and how digital certificates works (https)
+- [ ] Get familiar with secure protocols: TLS, STARTTLS, SSL, HTTPS, SCP, SSH, SFTP, FTPS ..
+- [ ] Know the difference between PPTP, OpenVPN, L2TP/IPSec
+- [ ] How to generate checksums (md5, SHA ..) to validate the integrity of any file
+- [ ] Get to know the difference between Monolithic and Microservices architecture.
+- [ ] Get to know the pro/cons of Microservices architecture and start building similar architectures
+- [ ] Do you know what is ChatOps ? Have you tried working with one of the known frameworks ? Hubot, Lita, Cog ?
+- [ ] How do you make zero downtime deployment ? What is your strategy to make rollbacks, self-healing, auto-scalability ?
+- [ ] Get familiar with APIs and services: RESTfull, RESTful-like, API gateways, Lambda functions, serverless computing,SOA, SOAP, JMS, CRUD ..
+- [ ] Read about stateless and stateful applications
+- [ ] Read about DevOps glossary (Google it)
+- [ ] How to secure your infrastructure, network and running applications ?
+- [ ] Learn how set-up, configure and use some monitoring systems (Nagios, Zabix, Sensu, prometheus..etc)
+- [ ] Read about Open Source and how you can contribute to Open source projects. For more info: http://jvns.ca/blog/2016/10/26/a-few-questions-about-open-source/
+- [ ] You should be able to do post-mortem if something bad happens to your systems. Make a detailed documentation about what went wrong and how we can prevent not to let it happen in future again.
+- [ ] Try to learn the approach how experts from StackOverflow are solving any problem. Always remember, it’s the technology which keeps on changing not the basics. Basics always remains the same.
+- [ ] Make Google, StackOverflow, Quora and other professional forums your friends.
+- [ ] Try to establish good development practices and a solid architecture.
+- [ ] Learn how to scale at production level.
+- [ ] Follow open-source projects (Kubernetes/Docker etc.) or what excites you.
+- [ ] Ask questions/doubts/issues on mailing-lists/public forums/tech meetups and learn from those.
+- [ ] Follow like-minded folks from the community and be updated with latest tech trends.
+- [ ] Follow some decent tech companies engineering blogs (We follow: Google/Uber/Quora/Github/Netflix). This is the place from where you can learn straight from the experts and get a chance to see their approach to solve any problem.
+- [ ] Browse a few aggregators like Reddit, hacker news, medium .. etc.
+- [ ] Follow like-minded developers and tech companies on twitter. ( I am always reading articles and watching talks/conferences, post-mortems are some of my favorite content. I also follow a few github repos to see what’s going on with the technology that I use.)
+- [ ] Read various technology-related blogs and subscribe to DevOps Newsletters.
+- [ ] If possible attend local area meetups and conferences. You will get a chance to learn a lot from seniors and others.
+- [ ]Learn about scalability and highly distributed systems. How to keep them UP and Running all the time?
+
+
+## Resources:
+
+- [The Must Know Checklist For DevOps & Site Reliability Engineers - Aymen El Amri](https://medium.com/faun/the-must-know-checklist-for-devops-system-reliability-engineers-f74c1cbf259d)
\ No newline at end of file
diff --git a/notes/devops-notes.md b/Interview/devops-notes.md
similarity index 89%
rename from notes/devops-notes.md
rename to Interview/devops-notes.md
index f08132c9..aa262069 100644
--- a/notes/devops-notes.md
+++ b/Interview/devops-notes.md
@@ -1,6 +1,6 @@
# Devops Notes
-### Top 5 DevOps Tools You Should Know In 2019
+### Top 5 DevOps Tools You Should Know In 2023
#### Ansible
@@ -52,4 +52,12 @@
- Guaranteed message delivery.
- Push work into background processes, freeing your web server up to handle more users.
- Scale the most frequently used parts of your system, without having to scale everything.
- - Handling everything with ease even if it seems to be a huge crash.
\ No newline at end of file
+ - Handling everything with ease even if it seems to be a huge crash.
+
+#### Git
+
+- Git is a widely adopted, distributed version control system (DVCS) that is fundamental to modern software development. It is considered an essential tool for source code management and collaborative software development.
+
+ -Distributed Version Control: Git follows a distributed version control model, which means that every developer has a full copy of the entire repository on their local machine.
+ -Branching and Merging: Git excels in branching and merging capabilities.
+ -Lightweight and Fast: Git is known for its speed and efficiency.
diff --git a/Interview/networking.md b/Interview/networking.md
new file mode 100644
index 00000000..72ca6042
--- /dev/null
+++ b/Interview/networking.md
@@ -0,0 +1 @@
+## Networking and OSI Model - Interview Preparations
diff --git a/Interview/readme.md b/Interview/readme.md
new file mode 100644
index 00000000..f9a127fe
--- /dev/null
+++ b/Interview/readme.md
@@ -0,0 +1,18 @@
+## Notes and Interview Questions:
+******************
+
+### Contents:
+
+- [DevOps Interview Questions](https://github.com/Tikam02/DevOps-Guide/blob/master/Interview/Dev-ops-Interview.md)
+
+- [Awesome Interview Questions](https://github.com/MaximAbramchuck/awesome-interview-questions#docker)
+
+- [Tech Interview Handbook](https://github.com/yangshun/tech-interview-handbook)
+
+- [Best Website a Programmer Should Visit](https://github.com/sdmg15/Best-websites-a-programmer-should-visit#interview-preparation)
+
+- [How to Prepare for Your DevOps Interview](https://dzone.com/articles/how-to-prepare-for-your-devops-interview)
+
+- [Top 20 Latest DevOps Interview Questions And Answers For 2020](https://www.softwaretestinghelp.com/devops-interview-questions)
+
+- [Top DevOps Interview Questions and Answers](https://hackr.io/blog/devops-interview-questions)
diff --git a/LINUX/Basic_Command b/LINUX/Basic_Command
new file mode 100644
index 00000000..9cedcec1
--- /dev/null
+++ b/LINUX/Basic_Command
@@ -0,0 +1,152 @@
+## LINUX COMMAND
+
+##DIRECTORY
+
+ sudo - super user do
+---
+ pwd --> displays present working directory
+---
+ mkdir (directory name) --> This command create a directory
+---
+ cd (directory/folder where you want to navigate) -->This command change directory.
+---
+ ls --> lists contents of current directory
+---
+ ls -l --> list contents of current directory with detailed output
+---
+ ll --> list contents of current directory with detailed output
+---
+ cd
+---
+ cd .. --> to come out of a directory
+---
+ rm -r testdir --> to remove a directory
+---
+ ~ --> Home directory
+---
+ mkdir -p folder/subfolder/subfolder2 --> create parent and child directory
+
+---
+---
+
+##FILE
+
+ touch test.txt(file name) --> creates a empty file
+---
+ ls -l --> lists the contents in current directory
+---
+ echo Print Output
+
+ echo "This is a text" > test.txt
+---
+ cat test.txt --> writes the content of file into terminal & exits
+---
+ more test.txt --> writes the content of file on terminal page by page ( to move to next page need to hit space bar on keyboard )
+---
+ less test.txt --> open the file on terminal & can be read line by line (use arrows to scroll up & down)
+
+ To comeout need to press 'q' on the key board
+---
+ vi test.txt --> Visual Editor
+ -This opens the file in read only mode
+ -To edit the file, press 'i' on keyboard for INSERT mode & then you can write anything
+ -once the text is entered, press 'ESC' on keyboard to return back on readonly mode
+ -press ':wq' on keyboard -- to save & come out of the file
+ -press ':q' on keyboard -- to come out of the file without saving
+ -press ':wq!' on keyboard -- to save forcefully & come out of the file
+ -press ':q!' on keyboard -- to come out of the file forcefully without saving
+---
+ rm test.txt --> To remove a file
+---
+COPY/RENAME/MOVE/OPERATION
+
+ While performing these operations, we can always use absolute paths or relative paths accrodingly.
+ These commands expects source & dest values
+
+ cp A.txt B.txt --> makes a copy of A.txt names it to B.txt in current directory
+
+ cp /home/A.txt /tmp/A.txt --> make a copy of A.txt to /tmp
+
+ cp -r testdir/ newdir/ --> makes a copy of testdir & names it to newdir in current dirctory
+
+ cp -r /home/testdir /tmp/testdir --> makes a copy of testdir to /tmp
+
+ mv A.txt new.txt ---> renames A.txt to new.txt in current path
+
+ mv A.txt /tmp ---> moves to A.txt to /tmp
+
+ mv testdir newdir --> renames testdir to newdir in crrent path
+
+ mv newdir /tmp ---> moves newdir to /tmp path
+
+---
+
+##Linux pipes
+
+ cat test.txt | grep 'searchkey' ---> Only gives lines from that file thant contains the key in ''
+
+ cat test.txt | less ---> Prints out file content, but you have the possibility to scroll
+ Quit the reading with 'q'
+
+ cat test.txt | uniq ---> This will sort the given file and print the unique values only.
+
+ cat test.txt | head -4 ---> Only prints out the last 4 lines of the command before the pipe, you can specify any number you want
+
+ ls | wc -l ---> prints out the linenumber of the command before the pipe
+
+---
+
+##PERMISSION
+
+Observe the output of ls:
+
+drwxrwxr-x 2 manifoldailearning manifoldailearning 4096 Nov 7 23:38 testdir
+-rw-rw-r-- 1 manifoldailearning manifoldailearning 126 Nov 7 23:37 abc.txt
+-rw-rw-r-- 1 manifoldailearning manifoldailearning 126 Nov 7 23:38 one.txt
+
+ drwxrwxr-x or -rw-rw-r-- --> Read/Write/Execute Permission for a file or a directory in linux
+
+ (1st value)manifoldailearning --> owner of the file/directory
+ (2nd value)manifoldailearning --> group who owns file/directory
+
+---
+
+How to update the owner & group for a file/dir -
+
+ chown ( change owner ) is the command to update the owners of dir/file
+ note: note that you need to have previliges to update the permissions for a file/directory
+
+ Syntax: chown owner:group filename/dirname
+
+---
+
+How to update the read,write & execute permissions for a file/dir
+
+ How to decode the Read/Write/Execute Permission terminology:
+
+ -/d ---> denotes if it is a file or directory ( - means file / d means directory )
+ rwx ---> means read,write & execute permissions for super user ( root )
+ rw- ---> means read,write permissions for the owner of the file ( ex: manifoldailearning as above )
+ r-- ---> means read only permissions for others ( whoever login to the machine )
+
+
+ r --> Permission to read the file.
+ w --> Permission to write (or delete) the file.
+ x --> Permission to execute the file, or, in the case of a directory, search it.
+
+ chmod ( change mode ) is the command to update the read/write/execute permissions for a file/directory
+ r = 4, w = 2, x = 1
+
+ - | rwx | rwx | rwx
+ - | 421 | 421 | 421
+
+ To update the permissions we can sum 421
+ If super user needs to have read,write & exeute give 7
+ If the owner need to read & write give 6
+ If other need to have only read give 4
+
+
+ chmod 777 file/dir -- rwx for root, rwx for owner, rwx for others
+ chmod 764 file/dir -- rwx for root, rw for owner, r for others
+ chmod 755 fire/dir -- rwx for root, rw for owner, rw for others
+---
diff --git a/LINUX/bash-scripts-manage-system/README.md b/LINUX/bash-scripts-manage-system/README.md
new file mode 100644
index 00000000..a92a4da8
--- /dev/null
+++ b/LINUX/bash-scripts-manage-system/README.md
@@ -0,0 +1,7 @@
+# How to Run
+
+```
+chmod +x system-management.sh
+./system-management.sh
+
+```
\ No newline at end of file
diff --git a/LINUX/bash-scripts-manage-system/system-management.sh b/LINUX/bash-scripts-manage-system/system-management.sh
new file mode 100644
index 00000000..f2ff6363
--- /dev/null
+++ b/LINUX/bash-scripts-manage-system/system-management.sh
@@ -0,0 +1,183 @@
+#!/bin/bash
+clear
+print_style () {
+
+ if [ "$2" == "info" ] ; then
+ COLOR="96m";
+ elif [ "$2" == "success" ] ; then
+ COLOR="92m";
+ elif [ "$2" == "warning" ] ; then
+ COLOR="93m";
+ elif [ "$2" == "danger" ] ; then
+ COLOR="91m";
+ else #default color
+ COLOR="0m";
+ fi
+
+ STARTCOLOR="\e[$COLOR";
+ ENDCOLOR="\e[0m";
+
+ printf "$STARTCOLOR%b$ENDCOLOR" "$1";
+ echo ""
+}
+
+
+
+ManageProc() {
+clear
+print_style "This menu facilitates process management, making it easy for you to monitor and control processes." "info"
+sleep 1
+PS3="Choose an item: If you don’t see anything, please press Enter."
+select CHOICE in "Top 10 CPU% Usage" "Process More Than X CPU Usage(in %)" "Top 10 Memory% Usage" "Process More X Memory Usage(in %)" "Zombie Process" "Kill Process" "Exit";do
+ case $REPLY in
+ 1)
+ clear
+ print_style "Below are the top 10 applications that utilize the most CPU resources." "info"
+ sleep 0.5
+ print_style "`ps -ax --sort=-%cpu --format pid,ppid,cmd,%cpu,%mem | head -n 10`" "warning";
+ ;;
+ 2)
+ clear
+ read -p "Please input your CPU% Usage percentage like 10.0: " threshold
+ sleep 0.5
+ print_style "`ps -ax --format pid,ppid,%cpu,%mem,cmd,user | awk -v threshold=$threshold '{ if ($3 > threshold ) print $0}'`" "warning";
+ ;;
+ 3)
+ clear
+ print_style "`ps ax --sort=-%mem --format pid,ppid,%cpu,%mem,cmd,user | head -n 10`" "warning"
+ ;;
+
+ 4)
+ clear
+ read -p "Please input your Memory% Usage percentage like: 10.0: " threshold
+ sleep 0.5
+ print_style "`ps -ax --sort=-%mem --format pid,ppid,%cpu,%mem,cmd,user | awk -v threshold=$threshold '{if ($4 > threshold ) print $0}'`" "warning";
+ ;;
+
+ 5)
+ clear
+ echo This is Zombie Process, please kill them.
+ sleep 0.5
+ print_style "`ps -ax --format pid,ppid,%cpu,%mem,cmd,stat | awk '$6 == "Z" { print $0 }'`" "danger";
+ ;;
+
+ 6)
+ read -p "Enter the PID of the process which you want to delete it: " ProcessID
+ echo "here is the process-id of this PID:"
+ print_style "`ps -ax --sort=-%mem --format pid,ppid,%cpu,%mem,cmd,user | awk -v pid=$ProcessID '{if ($1== pid ) print $0}'`" "info";
+ sleep 0.4
+ read -p "Enter the signal which you want to send it to the process: " signal
+ sleep 0.2
+ read -p "Are you sure you want to send this signal to this PID? Y|N " answer
+ case "$answer" in
+ Y|y)
+ print_style "sending signal ($signal) to the PID ($ProcessID) in 5 second, you can press Ctrl+C to cancel it." "danger";
+ sleep 5
+ kill -$signal $ProcessID
+ if [[ $? -eq 0 ]]
+ then
+ echo "the pid: $PID is successfully killed."
+ fi
+ ;;
+ N|n)
+ echo "Nothing to do "
+ ;;
+
+ *)
+ print_style "Bad Input" "danger";
+ ;;
+ esac
+ ;;
+ 7)
+ clear
+ print_style "Back to the main Menu..." "info"
+ sleep 1
+ print_style "Please press the Enter command"
+ break
+ ;;
+
+
+
+ esac
+done
+
+}
+
+
+
+ManagefileSys() {
+
+#!/bin/bash
+
+PS3="Choose an item: If you don’t see anything, please press Enter. "
+select CHOICE in "List Hard disk" "fine a file with size" "find a file" "find a pattern in files in your system" "Quit"
+do
+ case $REPLY in
+ 1)
+ lsblk -f
+ ;;
+ 2)
+
+ read -p "Enter the size in M-Byte: " fileSize
+ find / -type f -size +${fileSize}M -exec ls -lah {} \;
+ ;;
+ 3)
+ read -p "What is the name of the file you are Looking for: " fileName
+ find / -name $fileName
+ ;;
+ 4)
+ read -p "Enter the pattern: " pattern
+ find / -type f -name "*" -exec grep -i $pattern {} \;
+ ;;
+ 5)
+ clear
+ print_style "Back to the main Menu..." "info"
+ sleep 1
+ print_style "Please press the Enter command "
+ break
+ ;;
+ *)
+ echo "bad input!!!"
+ ;;
+ esac
+done
+
+
+}
+
+
+
+
+
+
+PS3="What do you Want to do: "
+select fruit in "Manage your Process." "Adding a iptables rule." "Managing your filesystem." "Quit"
+do
+
+ case $REPLY in
+ 1)
+ echo "Manage your Process. "
+ ManageProc
+ ;;
+ 2)
+ echo "Adding a iptables rule. "
+ ;;
+ 3)
+ echo "Managing your filesystem. "
+ ManagefileSys
+ ;;
+
+ 4)
+ echo "Quitting "
+ sleep 1
+ break
+ ;;
+ *)
+ echo "bad input!!!"
+ ;;
+ esac
+done
+
+
+
+
diff --git a/Networking/cheatsheet/BGP.pdf b/Networking/cheatsheet/BGP.pdf
new file mode 100644
index 00000000..8363286d
Binary files /dev/null and b/Networking/cheatsheet/BGP.pdf differ
diff --git a/Networking/cheatsheet/Cisco_IOS_Versions.pdf b/Networking/cheatsheet/Cisco_IOS_Versions.pdf
new file mode 100644
index 00000000..19c38b12
Binary files /dev/null and b/Networking/cheatsheet/Cisco_IOS_Versions.pdf differ
diff --git a/Networking/cheatsheet/EIGRP.pdf b/Networking/cheatsheet/EIGRP.pdf
new file mode 100644
index 00000000..c3c7af18
Binary files /dev/null and b/Networking/cheatsheet/EIGRP.pdf differ
diff --git a/Networking/cheatsheet/First_Hop_Redundancy.pdf b/Networking/cheatsheet/First_Hop_Redundancy.pdf
new file mode 100644
index 00000000..190890e5
Binary files /dev/null and b/Networking/cheatsheet/First_Hop_Redundancy.pdf differ
diff --git a/Networking/cheatsheet/Frame_Mode_MPLS.pdf b/Networking/cheatsheet/Frame_Mode_MPLS.pdf
new file mode 100644
index 00000000..6ab871ec
Binary files /dev/null and b/Networking/cheatsheet/Frame_Mode_MPLS.pdf differ
diff --git a/Networking/cheatsheet/IEEE_802.11_WLAN.pdf b/Networking/cheatsheet/IEEE_802.11_WLAN.pdf
new file mode 100644
index 00000000..0be97a9d
Binary files /dev/null and b/Networking/cheatsheet/IEEE_802.11_WLAN.pdf differ
diff --git a/Networking/cheatsheet/IEEE_802.1X.pdf b/Networking/cheatsheet/IEEE_802.1X.pdf
new file mode 100644
index 00000000..76c29633
Binary files /dev/null and b/Networking/cheatsheet/IEEE_802.1X.pdf differ
diff --git a/Networking/cheatsheet/IOS_IPv4_Access_Lists.pdf b/Networking/cheatsheet/IOS_IPv4_Access_Lists.pdf
new file mode 100644
index 00000000..7f302ec3
Binary files /dev/null and b/Networking/cheatsheet/IOS_IPv4_Access_Lists.pdf differ
diff --git a/Networking/cheatsheet/IOS_Interior_Routing_Protocols.pdf b/Networking/cheatsheet/IOS_Interior_Routing_Protocols.pdf
new file mode 100644
index 00000000..7ca96ec5
Binary files /dev/null and b/Networking/cheatsheet/IOS_Interior_Routing_Protocols.pdf differ
diff --git a/Networking/cheatsheet/IOS_Zone-Based_Firewall.pdf b/Networking/cheatsheet/IOS_Zone-Based_Firewall.pdf
new file mode 100644
index 00000000..ef25c58c
Binary files /dev/null and b/Networking/cheatsheet/IOS_Zone-Based_Firewall.pdf differ
diff --git a/Networking/cheatsheet/IPsec.pdf b/Networking/cheatsheet/IPsec.pdf
new file mode 100644
index 00000000..19beabbf
Binary files /dev/null and b/Networking/cheatsheet/IPsec.pdf differ
diff --git a/Networking/cheatsheet/IPv4_Multicast.pdf b/Networking/cheatsheet/IPv4_Multicast.pdf
new file mode 100644
index 00000000..8297cc14
Binary files /dev/null and b/Networking/cheatsheet/IPv4_Multicast.pdf differ
diff --git a/Networking/cheatsheet/IPv4_Subnetting.pdf b/Networking/cheatsheet/IPv4_Subnetting.pdf
new file mode 100644
index 00000000..d972a9ba
Binary files /dev/null and b/Networking/cheatsheet/IPv4_Subnetting.pdf differ
diff --git a/Networking/cheatsheet/IPv6.pdf b/Networking/cheatsheet/IPv6.pdf
new file mode 100644
index 00000000..abfcfd1d
Binary files /dev/null and b/Networking/cheatsheet/IPv6.pdf differ
diff --git a/Networking/cheatsheet/IS-IS.pdf b/Networking/cheatsheet/IS-IS.pdf
new file mode 100644
index 00000000..2bcda0cf
Binary files /dev/null and b/Networking/cheatsheet/IS-IS.pdf differ
diff --git a/Networking/cheatsheet/NAT.pdf b/Networking/cheatsheet/NAT.pdf
new file mode 100644
index 00000000..7e9a7746
Binary files /dev/null and b/Networking/cheatsheet/NAT.pdf differ
diff --git a/Networking/cheatsheet/OSPF.pdf b/Networking/cheatsheet/OSPF.pdf
new file mode 100644
index 00000000..f09c8d54
Binary files /dev/null and b/Networking/cheatsheet/OSPF.pdf differ
diff --git a/Networking/cheatsheet/PPP.pdf b/Networking/cheatsheet/PPP.pdf
new file mode 100644
index 00000000..88634cc0
Binary files /dev/null and b/Networking/cheatsheet/PPP.pdf differ
diff --git a/Networking/cheatsheet/QoS.pdf b/Networking/cheatsheet/QoS.pdf
new file mode 100644
index 00000000..59761819
Binary files /dev/null and b/Networking/cheatsheet/QoS.pdf differ
diff --git a/Networking/cheatsheet/RIP.pdf b/Networking/cheatsheet/RIP.pdf
new file mode 100644
index 00000000..42c97fef
Binary files /dev/null and b/Networking/cheatsheet/RIP.pdf differ
diff --git a/Networking/cheatsheet/Readme.md b/Networking/cheatsheet/Readme.md
new file mode 100644
index 00000000..f4287fae
--- /dev/null
+++ b/Networking/cheatsheet/Readme.md
@@ -0,0 +1,14 @@
+# Cheatsheets
+
+
+### Resources :
+- [Docker Cheatsheet](https://cheatsheet.dennyzhang.com/cheatsheet-docker-a4)
+- [Kubernetes Cheatsheet](https://cheatsheet.dennyzhang.com/cheatsheet-kubernetes-A4)
+- [Kubernets YAML Templates](https://cheatsheet.dennyzhang.com/kubernetes-yaml-templates)
+- [Development Tools Cheatsheet](https://cheatsheet.dennyzhang.com/category/tools)
+- [Linux Cheatsheet](https://cheatsheet.dennyzhang.com/category/linux)
+- [Kubectl get nodes error!](https://jessicadeen.com/kubectl-get-nodes-error-unable-to-connect-to-the-server-dial-tcp-i-o-timeout/)
+- [Troubleshoot kubectl connection refused](https://medium.com/@texasdave2/troubleshoot-kubectl-connection-refused-6f5445a396ed)
+- [Kubernetes Monitoring-sysdig](https://sysdig.com/blog/kubernetes-monitoring-prometheus/)
+- [Kubernetes Monitoring with helm- Digitalocean](https://www.digitalocean.com/community/tutorials/how-to-set-up-digitalocean-kubernetes-cluster-monitoring-with-helm-and-prometheus-operator)
+- [Getting into DevOps - Reddit](https://www.reddit.com/r/devops/comments/dbusbr/monthly_getting_into_devops_thread_201910/)
\ No newline at end of file
diff --git a/Networking/cheatsheet/Spanning_Tree.pdf b/Networking/cheatsheet/Spanning_Tree.pdf
new file mode 100644
index 00000000..9305d37d
Binary files /dev/null and b/Networking/cheatsheet/Spanning_Tree.pdf differ
diff --git a/Networking/cheatsheet/VLANs.pdf b/Networking/cheatsheet/VLANs.pdf
new file mode 100644
index 00000000..ee1b1781
Binary files /dev/null and b/Networking/cheatsheet/VLANs.pdf differ
diff --git a/Networking/cheatsheet/VOIP_Basics.pdf b/Networking/cheatsheet/VOIP_Basics.pdf
new file mode 100644
index 00000000..4c63c296
Binary files /dev/null and b/Networking/cheatsheet/VOIP_Basics.pdf differ
diff --git a/Networking/cheatsheet/Wireshark_Display_Filters.pdf b/Networking/cheatsheet/Wireshark_Display_Filters.pdf
new file mode 100644
index 00000000..f904987a
Binary files /dev/null and b/Networking/cheatsheet/Wireshark_Display_Filters.pdf differ
diff --git a/Networking/cheatsheet/common_ports.pdf b/Networking/cheatsheet/common_ports.pdf
new file mode 100644
index 00000000..3d85f3b0
Binary files /dev/null and b/Networking/cheatsheet/common_ports.pdf differ
diff --git a/Networking/cheatsheet/physical_terminations.pdf b/Networking/cheatsheet/physical_terminations.pdf
new file mode 100644
index 00000000..636a4667
Binary files /dev/null and b/Networking/cheatsheet/physical_terminations.pdf differ
diff --git a/Networking/cheatsheet/redhat-networking-commands.pdf b/Networking/cheatsheet/redhat-networking-commands.pdf
new file mode 100644
index 00000000..8438fd85
Binary files /dev/null and b/Networking/cheatsheet/redhat-networking-commands.pdf differ
diff --git a/Networking/cheatsheet/scapy.pdf b/Networking/cheatsheet/scapy.pdf
new file mode 100644
index 00000000..c6d0a63e
Binary files /dev/null and b/Networking/cheatsheet/scapy.pdf differ
diff --git a/Networking/cheatsheet/tcpdump.pdf b/Networking/cheatsheet/tcpdump.pdf
new file mode 100644
index 00000000..e887e053
Binary files /dev/null and b/Networking/cheatsheet/tcpdump.pdf differ
diff --git a/Networking/networking-commands.md b/Networking/networking-commands.md
new file mode 100644
index 00000000..26f6ed64
--- /dev/null
+++ b/Networking/networking-commands.md
@@ -0,0 +1,375 @@
+# Networking Commands
+
+## List of Linux networking tools
+********************************
+
+
+### Common System Administrator files and commands
+
+- #### Network Status commands
+
+ - ```netstat ``` -- running error stats + counts on config interface every N seconds
+ - ```netstat –a``` -- socket ports and state
+ - ```netstat -s``` protocol (tcp etc.) counts and errors
+ - ```netstat -r``` -- routing table dump
+
+ - ```netstat –i``` -- list of interfaces and gives 3 letter interface names
+- If you use the –n flag, host addressed will be numeric and avoid a DNS lookup,which might be faster in some cases. Combine with the other switches
+
+- #### Network interfaces commands
+
+ - ```ifconfig –a``` -- Show all interfaces
+
+ - ```ifconfig ``` -- setup for a particular interface, e.g. ln0
+
+ - ```ifconfig ``` -- Set params of the interface. Root only. Typically IP address, subnet, are set upon bootup in /etc/rc*ROOT ONLY Connectivity.
+
+ - ```ping ``` -- send an ICMP echo message (one packet) to a host.This may go continually until you hit Control-C.Ping means a packet was sent from your machine via ICMP, and echoed at the IP level. ping tells you if the OS is up; but doesn't tell you if inetd or other daemons are running.
+
+ - ```telnet host ``` -- talk to "hosts" at the given port number. By default, the telnetport is port 23. See the file /etc/services for a list of what services are in use at what ports.A few samples:7 – echo port, use control-] to get out 25 – SMTP, use to send mail 79 - Finger.
+
+ - ```telnet ip-number``` -- Can tell if inetd is functioning. With telnet you can use the ip number instead of the host name. If ip-number as opposed to telnet hostname works, you have problems with the name server. If you can ping, but you can't telnet, you have problems with getting processes running and possibly inetd configuration problems.
+
+- #### Routing
+
+ - ```netstat –r``` -- Print routing tables. The routing tables are stored in the kernel and used by ip to route packets to non-local networks.
+ - ```route ... params ``` -- The route command is used for setting a static (non-dynamic by hand route) route path in the route tables. It is typically used at boot in the /etc/rc scripts. It can be used for setting a default route; i.e., when in doubt send all packets to a particular local gateway. Generally ROOT ONLY.
+ - ```routed``` -- The BSD daemon that does dynamic routing. Started at boot. This runs the RIP routing protocol. ROOT ONLY. You won’t be able to run this without root access.
+ - ```gated``` -- Gated is an alternative routing daemon to RIP.It uses the OSPF, EGP, and RIP protocols in one place. ROOT ONLY.
+ - ```traceroute ``` -- Useful for tracing route of IP packets. The packet causes message to be sent back from all gateways in between the source and destination.
+
+- #### Arp
+
+ - ```arp –a``` -- Print the arp table. Arp is used to translate IP addresses into Ethernet addresses. Root can add and delete arp entries. Deleting them can be useful if an arp entry is malformed or just wrong. Arp entries explicitly added by root are permanent -- they can also be by proxy. The arp table is stored in the kernel and manipulated dynamically. Arp entries are cached and will time out and are deleted normally in 20 minutes.
+
+- #### NFS/NIS - Network file system/yellow pages
+ - ```df .``` -- Shows your filesystem and mount for the current directory.
+ - ```df -t nfs``` -- Show nfs mounts.
+ - ```mount``` -- Use to mount a file system, ROOT ONLY. /etc/fstab contains the mounts done at boot time./etc/exports contains mount points exported on a suste,//etc/mtab contains the mount table built by mount.
+
+- #### Other Useful Commands
+ - ```ps aux or ps alx``` -- List of processes in action, usage varies from system to system.“ps -aux | grep “ often useful to filter output by string.
+ - ```ps``` -- List your processes in the foreground.
+ - ```nslookup (or nslookup )``` -- Makes queries to the DNS server to translate IP to a name, or vice versa.
+ - ```ftp ``` -- Transfer files to host. Often can use login=“anonymous” , p/w=“guest”.
+ - ```rcp system:file system:file``` -- Rcp performs a remote copy from one system to another, and is used much like Unix cp. Rcp and rsh use rshd which is controlled by inetd. The rshd security protocol is very weak, and uses the .rhosts and /etc/hosts.equiv files. Since security is so weak these protocols are often banned from systems (e.g., add “*” to rhosts and anyone could log into your account).
+ - ```rsh host ``` --BSD remote shell.
+ - ```rlogin -l ``` -- Logs into the host with a virtual terminal like telnet.
+
+- Important Files
+ - /etc/hosts - names to ip addresses
+ - /etc/networks - network names to ip addresses
+ - /etc/protocols - protocol names to protocol numbers
+ - /etc/services - tcp/udp service names to port numbers
+
+
+#### netstat (ss)
+
+- Displays contents of /proc/net files. It works with the Linux Network Subsystem, it will tell you what the status of ports are ie. open, closed, waiting, masquerade connections. It will also display various other things. It has many different options.
+- Netstat (Network Statistic) command display connection info, routing table information etc. To displays routing table information use option as -r.
+
+- Sample output:
+
+```bash
+Proto Recv-Q Send-Q Local Address Foreign Address (state)
+tcp4 0 0 127.0.0.1.62132 127.0.0.1.http ESTABLISHED
+tcp4 0 0 127.0.0.1.http * LISTEN
+```
+
+### tcpdump
+This is a sniffer, a program that captures packets off a network interface and interprets them for you. It understands all basic internet protocols, and can be used to save entire packets for later inspection.
+
+### ping
+The ping command (named after the sound of an active sonar system) sends echo requests to the host you specify on the command line, and lists the responses received their round trip time. PING (Packet INternet Groper) command is the best way to test connectivity between two nodes. Whether it is Local Area Network (LAN) or Wide Area Network (WAN). Ping use ICMP (Internet Control Message Protocol) to communicate to other devices. You can ping host name of ip address using below command.
+```
+$ ping google.com
+PING google.com (216.58.198.78): 56 data bytes
+64 bytes from 216.58.198.78: icmp_seq=0 ttl=46 time=6.108 ms
+64 bytes from 216.58.198.78: icmp_seq=1 ttl=46 time=6.222 ms
+^C
+--- google.com ping statistics ---
+2 packets transmitted, 2 packets received, 0.0% packet loss
+round-trip min/avg/max/stddev = 6.108/6.165/6.222/0.057 ms
+```
+
+### traceroute
+traceroute will show the route of a packet. It attempts to list the series of hosts through which your packets travel on their way to a given destination. Also have a look at xtraceroute (one of several graphical equivalents of this program). traceroute is a network troubleshooting utility which shows number of hops taken to reach destination also determine packets traveling path. Below we are tracing route to global DNS server IP Address and able to reach destination also shows path of that packet is traveling.
+```
+$ traceroute -I google.com
+traceroute to google.com (216.58.198.78), 128 hops max, 72 byte packets
+1 52.93.7.1 (52.93.7.1) 6.361 ms 6.229 ms 6.106 ms
+2 72.14.215.85 (72.14.215.85) 5.939 ms 5.460 ms 5.914 ms
+3 209.85.252.198 (209.85.252.198) 6.012 ms 5.694 ms 5.761 ms
+4 64.233.174.27 (64.233.174.27) 5.079 ms 4.776 ms 4.662 ms
+5 dub08s02-in-f78.1e100.net (216.58.198.78) 6.650 ms 5.509 ms 5.596 ms
+```
+
+### tracepath
+tracepath performs a very simlar function to traceroute the main difference is that tracepath doesn't take complicated options.
+
+### nmap
+“ network exploration tool and security scanner”. nmap is a very advanced network tool used to query machines (local or remote) as to whether they are up and what ports are open on these machines. Some features only activate when Nmap is run with privileges. More information: .
+```
+# Try to determine whether the specified hosts are up and what are their names:
+nmap -sn {{ip_or_hostname}} {{optional_another_address}}
+
+# Like above, but also run a default 1000-port TCP scan if host seems up:
+nmap {{ip_or_hostname}} {{optional_another_address}}
+
+# Also enable scripts, service detection, OS fingerprinting and traceroute:
+nmap -A {{address_or_addresses}}
+
+# Assume good network connection and speed up execution:
+nmap -T4 {{address_or_addresses}}
+
+# Scan a specific list of ports (use -p- for all ports 1-65535):
+nmap -p {{port1,port2,…,portN}} {{address_or_addresses}}
+
+# Perform TCP and UDP scanning (use -sU for UDP only, -sZ for SCTP, -sO for IP):
+nmap -sSU {{address_or_addresses}}
+
+# Perform TLS cipher scan against a host to determine supported ciphers and SSL/TLS protocols:
+nmap --script ssl-enum-ciphers {{address_or_addresses}} -p 443
+
+# Perform full port, service, version detection scan with all default NSE scripts active against a host to determin weaknesses and info:
+nmap -sC -sV {{address_or_addresses}}
+
+```
+
+
+### dig
+Dig (domain information groper) query DNS related information like A Record, CNAME, MX Record etc. This command mainly use to troubleshoot DNS related query.
+```
+$ dig amazon.com
+
+; <<>> DiG 9.8.3-P1 <<>> amazon.com
+;; global options: +cmd
+;; Got answer:
+;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30832
+;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0
+
+;; QUESTION SECTION:
+;amazon.com. IN A
+
+;; ANSWER SECTION:
+amazon.com. 17 IN A 54.239.25.200
+amazon.com. 17 IN A 54.239.25.208
+amazon.com. 17 IN A 54.239.26.128
+amazon.com. 17 IN A 54.239.17.6
+amazon.com. 17 IN A 54.239.17.7
+amazon.com. 17 IN A 54.239.25.192
+
+;; Query time: 3 msec
+;; SERVER: 10.78.97.142#53(10.78.97.142)
+;; WHEN: Thu Dec 29 13:56:22 2016
+;; MSG SIZE rcvd: 124
+
+```
+
+
+### nslookup
+nslookup command also use to find out DNS related query. The following examples shows A Record (IP Address) of tecmint.com.
+```
+nslookup amazon.com
+Server: 10.78.97.142
+Address: 10.78.97.142#53
+
+Non-authoritative answer:
+Name: amazon.com
+Address: 54.239.25.192
+Name: amazon.com
+Address: 54.239.25.200
+Name: amazon.com
+Address: 54.239.25.208
+Name: amazon.com
+Address: 54.239.26.128
+Name: amazon.com
+Address: 54.239.17.6
+Name: amazon.com
+Address: 54.239.17.7
+```
+
+### host
+host command to find name to IP or IP to name in IPv4 or IPv6 and also query DNS records.
+```
+$ host amazon.com
+amazon.com has address 54.239.17.6
+amazon.com has address 54.239.17.7
+amazon.com has address 54.239.25.192
+amazon.com has address 54.239.25.200
+amazon.com has address 54.239.25.208
+amazon.com has address 54.239.26.128
+amazon.com mail is handled by 10 amazon-smtp.amazon.com.
+```
+
+### hostname
+hostname is to identify in a network. Execute hostname command to see the hostname of your box. You can set hostname permanently in /etc/sysconfig/network. Need to reboot box once set a proper hostname.
+```
+$ hostname -f
+miglen.development.box
+```
+
+### arp
+ARP (Address Resolution Protocol) is useful to view / add the contents of the kernel’s ARP tables. To see default table use the command as.
+
+## Configuration
+
+
+
+
+### ifconfig
+This command is used to configure network interfaces, or to display their current configuration. In addition to activating and deactivating interfaces with the “up” and “down” settings, this command is necessary for setting an interface's address information if you don't have the ifcfg script.
+
+* ifup - Use ifup device-name to bring an interface up by following a script (which will contain your default networking settings). Simply type ifup and you will get help on using the script.
+* ifdown - Use ifdown device-name to bring an interface down using a script (which will contain your default network settings). Simply type ifdown and you will get help on using the script.
+* ifcfg - Use ifcfg to configure a particular interface. Simply type ifcfg to get help on using this script.
+
+### route
+The route command is the tool used to display or modify the routing table. To add a gateway as the default you would type:
+```
+$ route -n
+Kernel IP routing table
+Destination Gateway Genmask Flags Metric Ref Use Iface
+0.0.0.0 172.31.16.1 0.0.0.0 UG 0 0 0 eth0
+172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
+172.31.16.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
+```
+### iwconfig
+iwconfig command in Linux is use to configure a wireless network interface. You can see and set the basic Wi-Fi details like SSID channel and encryption. You can refer man page of iwconfig to know more.
+
+### ip
+
+
+
+**************************************
+
+
+
+```bash
+$ watch ss -tp # Network connections
+$ netstat -ant # Tcp connections -anu=udp
+$ netstat -tulpn # Connections with PIDs
+$ lsof -i # Established connections
+$ smb:// ip /share # Access windows smb share
+$ share user x.x.x.x c$ # Mount Windows share
+$ smbclient -0 user\\\\ ip \\ share # SMB connect
+$ ifconfig eth# ip / cidr # Set IP and netmask
+$ ifconfig ethO:l ip / cidr # Set virtual interface
+$ route add default gw gw_ip # Set GW
+$ ifconfig eth# mtu [size] # Change MTU size
+$ export MAC=xx: xx: xx: xx: xx: xx # Change MAC
+$ ifconfig int hw ether MAC # Change MAC
+$ macchanger -m MAC int # Backtrack MAC changer
+$ iwlist int scan # Built-in wifi scanner
+$ dig -x ip # Domain lookup for IP
+$ host ip # Domain lookup for IP
+$ host -t SRV _ service _tcp.url.com # Domain SRV lookup
+$ dig @ ip domain -t AXFR # DNS Zone Xfer
+$ host -l domain namesvr # DNS Zone Xfer
+$ ip xfrm state list # Print existing VPN keys
+$ ip addr add ip / cidr dev ethO # Adds 'hidden' interface
+$ /var/log/messages | grep DHCP # List DHCP assignments
+$ tcpkill host ip and port port # Block ip:port
+$ echo "1" /proc/sys/net/ipv4/ip_forward # Turn on IP Forwarding
+$ echo "nameserver x.x.x.x" /etc/resolv.conf # Add DNS Server
+```
+
+
+- ```arpwatch``` – Ethernet Activity Monitor.
+- ``` bmon``` – bandwidth monitor and rate estimator.
+- ```bwm-ng```– live network bandwidth monitor.
+- ```curl``` – transferring data with URLs. (or try httpie)
+- ```darkstat``` – captures network traffic, usage statistics.
+- ```dhclient``` – Dynamic Host Configuration Protocol Client
+- ```dig``` – query DNS servers for information.
+- ```dstat``` – replacement for vmstat, iostat, mpstat, netstat and ifstat.
+- ```ethtool``` – utility for controlling network drivers and hardware.
+- ```gated``` – gateway routing daemon.
+- ```host``` – DNS lookup utility.
+- ```hping``` – TCP/IP packet assembler/analyzer.
+- ```ibmonitor``` – shows bandwidth and total data transferred.
+- ```ifstat``` – report network interfaces bandwidth.
+- ```iftop``` – display bandwidth usage.
+- ```ip ```– a command with more features that ifconfig (net-tools).
+- ```iperf3``` – network bandwidth measurement tool. (above screenshot Stacklinux VPS)
+- ```iproute2``` – collection of utilities for controlling TCP/IP.
+- ```iptables``` – take control of network traffic.
+- ```IPTraf``` – An IP Network Monitor.
+- ```iputils``` – set of small useful utilities for Linux networking.
+- ```iw``` – a new nl80211 based CLI configuration utility for wireless devices.
+- ```jwhois (whois)``` – client for the whois service.
+- ```“lsof -i”``` – reveal information about your network sockets.
+- ```mtr``` – network diagnostic tool.
+- ```net-tools``` – utilities include: arp, hostname, ifconfig, - netstat, rarp, route, plipconfig, slattach, mii-tool, iptunnel and ipmaddr.
+- ```ncat``` – improved re-implementation of the venerable netcat.
+- ```netcat``` – networking utility for reading/writing network connections.
+- ```nethogs``` – a small ‘net top’ tool.
+- ```Netperf``` – Network bandwidth Testing.
+- ```netsniff-ng``` – Swiss army knife for daily Linux network plumbing.
+- ```netstat``` – Print network connections, routing tables, statistics, etc.
+- ```netwatch``` – monitoring Network Connections.
+- ```ngrep``` – grep applied to the network layer.
+- ```nload``` – display network usage.
+- ```nmap``` – network discovery and security auditing.
+- ```nmcli``` – a command-line tool for controlling NetworkManager and reporting network status.
+- ```nmtui``` – provides a text interface to configure networking by controlling NetworkManager.
+- ```nslookup``` – query Internet name servers interactively.
+- ```ping``` – send icmp echo_request to network hosts.
+- ```route``` – show / manipulate the IP routing table.
+- ```slurm``` – network load monitor.
+- ```snort``` – Network Intrusion Detection and Prevention System.
+- ```smokeping``` – keeps track of your network latency.
+- ```socat``` – establishes two bidirectional byte streams and transfers data between them.
+- ```speedometer``` – Measure and display the rate of data across a network.
+- ```speedtest-cli``` – test internet bandwidth using speedtest.net
+- ```ss``` – utility to investigate sockets.
+- ```ssh``` – secure system administration and file transfers over insecure networks.
+- ```tcpdump``` – command-line packet analyzer.
+- ```tcptrack``` – Displays information about tcp connections on a network interface.
+- ```telnet``` – user interface to the TELNET protocol.
+- ```tracepath``` – very similar function to traceroute.
+- ```traceroute``` – print the route packets trace to network host.
+- ```vnStat```– network traffic monitor.
+- ```websocat``` – Connection forwarder from/to web sockets to/from usual sockets, in style of socat.
+- ```wget``` – retrieving files using HTTP, HTTPS, FTP and FTPS.
+- Wireless Tools for Linux – includes iwconfig, iwlist, iwspy, iwpriv and ifrename.
+- ```Wireshark``` – network protocol analyzer.
+
+
+- ```watch ss -tp ``` -- Network Connections
+
+- ```netstat -ant ``` -- TCP connections
+
+- ```netstat -anu``` -- UDP Connections
+
+- ```netstat -tulpn``` -- Connections with PIDs
+
+- ```lsof -i``` -- Established Connections
+
+- ```smb:/// ``` -- Access Windows SMB Share
+
+- ```share c$``` -- Mount Windows Share
+
+- ```ifconfig ``` -- Set IP and netmask
+
+- ```ifconfig eth0:1 ``` -- Set virtual interface
+
+- ```route add default gw ``` -- Set Default Gateway
+
+- ```ifconfig mtu ``` -- Change MTU size
+
+- ```export MAC= ``` -- Change MAC Address
+
+- ```ifconfig int hw ether ``` -- Change MAC Address
+
+- ``` dig -x ``` -- Domain Lookup IP
+
+- ```host ``` -- Domain Lookup IP
+
+- ```dig@<IP> -t AXFR``` -- DNS Zone Transfer
+
+- ```host -l ``` -- DNS Zone Transfer
+
+- ```echo "1" > /proc/sys/net/ipv4/ip forward``` -- Enable IP Forwarding
+
+- ``` echo <"NAMESERVER"> > /etc/resolv.conf``` -- Add DNS Server
diff --git a/Networking/networking-concepts.md b/Networking/networking-concepts.md
new file mode 100644
index 00000000..00c99202
--- /dev/null
+++ b/Networking/networking-concepts.md
@@ -0,0 +1,323 @@
+## Networking Notes:
+
+- [Networking Notes:](#networking-notes)
+- [OSI Model](#osi-model)
+- [Four DoD layers](#four-dod-layers)
+- [TCP/IP Model](#tcpip-model)
+- [IP Addresses:](#ip-addresses)
+ - [Concepts:](#concepts)
+ - [Resources:](#resources)
+- [DNS:](#dns)
+ - [Concepts:](#concepts-1)
+ - [Resources:](#resources-1)
+- [Proxy server](#proxy-server)
+- [Routing Bridging and NAT](#routing-bridging-and-nat)
+- [Firewalls and Ports](#firewalls-and-ports)
+- [References:](#references)
+
+**********************
+
+
+
+***********************
+
+## OSI Model
+
+
+***************************
+## Four DoD layers
+
+- The DoD (or tcp/ip) model has only four layers, roughly mapping its network access layer to OSI layers 1 and 2 (Physical and Datalink), its internet (IP) layer to the OSI network layer, its host-to-host (tcp, udp) layer to OSI layer 4 (transport) and its application layer to OSI layers 5, 6 and 7.
+
+
+
+
+*****************************
+
+## TCP/IP Model
+
+- the TCP/IP model,similar to the OSI model, has a set of layers.The OSI has seven layers and TCP/IP model has four layers.
+
+- Ths OSI model and the TCP/Ip models were both created independently.The TCP/IP network model represents reality in the world whereas the OSI model represents an ideal.
+
+
+
+- Application Layer:
+ - Defines TCP/IP application protocols and how host programs interface with transport layer services to use the network.
+
+ - Protocols : HTTP, FTP,SMTP, DNS
+
+- Transport Layer:
+ - Provides communication session management between the nodes/computers.Defines the level of service and states of the connection used when transporting data.
+
+ - Protocols: TCP, UDP,RTP
+
+- Internet Layer:
+ - Packages Data into IP datagrams which contains source and destination address information that is used to forward the datagrams between host and networks.Performs routing of Ip datagrams.
+
+ - Protocols: IP,ICMP,ARP,RARP
+
+- Network Access Layer:
+ - Specifies details of how data is physically sent through the network,including how bits are electronically signaled by hardware devices.
+
+ - Protocols: Ethernet,Frame relays,RS-2
+
+
+
+
+*********************************************
+## IP Addresses:
+
+### Concepts:
+
+- Each device connected to the internet has a unique identifier. Most networks today, including all computers on the internet, use the TCP/IP as a standard to communicate on the network. In the TCP/IP protocol, this unique identifier is the IP Address. The two kinds of IP Addresses are IPv4 and IPv6.
+
+- These eight bit sections are known as octets. The example IP address, then, becomes 11000000.10101000.01111011.10000100. This number only makes a little more sense, so for most uses, convert the binary address into dotted-decimal format (192.168.123.132). The decimal numbers separated by periods are the octets converted from binary to decimal notation.
+
+- For a TCP/IP wide area network (WAN) to work efficiently as a collection of networks, the routers that pass packets of data between networks do not know the exact location of a host for which a packet of information is destined. Routers only know what network the host is a member of and use information stored in their route table to determine how to get the packet to the destination host's network. After the packet is delivered to the destination's network, the packet is delivered to the appropriate host.
+
+- IPv4 vs IPv6
+
+ - IPv4 uses 32 binary bits to create a single unique address on the network. An IPv4 address is expressed by four numbers separated by dots. Each number is the decimal (base-10) representation for an eight-digit binary (base-2) number, also called an octet.
+
+ 
+
+ - IPv6 uses 128 binary bits to create a single unique address on the network. An IPv6 address is expressed by eight groups of hexadecimal (base-16) numbers separated by colons. Groups of numbers that contain all zeros are often omitted to save space, leaving a colon separator to mark the gap .
+
+ 
+
+
+- IP Classes
+
+ - Typically, the IPv4 space allows us to have addresses between 0.0.0.0 to 255.255.255.255. However, some numbers in that range are reserved for specific purposes on TCP/IP networks. These reservations are recognized by the authority on TCP/IP addressing, the Internet Assigned Numbers Authority (IANA). Four specific reservations include the following:
+
+ - 0.0.0.0 — This represents the default network, which is the abstract concept of just being connected to a TCP/IP network.
+
+ - 255.255.255.255 — This address is reserved for network broadcasts, or messages that should go to all computers on the network.
+
+ - 127.0.0.1 — This is called the loopback address, meaning your computer’s way of identifying itself, whether or not it has an assigned IP address.
+
+ - 169.254.0.1 to 169.254.255.254 — This is the Automatic Private IP Addressing (APIPA) range of addresses assigned automatically when a computer’s unsuccessful getting an address from a DHCP server.
+
+ - The other IP address reservations are for subnet classes. A subnet is a smaller network of computers connected to a larger network through a router. The subnet can have its own address system so computers on the same subnet can communicate quickly without sending data across the larger network. A router on a TCP/IP network, including the Internet, is configured to recognize one or more subnets and route network traffic appropriately. The following are the IP addresses reserved for subnets:
+
+ - 10.0.0.0 to 10.255.255.255 — This falls within the Class A address range of 1.0.0.0 to 127.0.0.0, in which the first bit is 0.
+
+ - 172.16.0.0 to 172.31.255.255 — This falls within the Class B address range of 128.0.0.0 to 191.255.0.0, in which the first two bits are 10.
+
+ - 192.168.0.0 to 192.168.255.255 — This falls within the Class C range of 192.0.0.0 through 223.255.255.0, in which the first three bits are 110.
+
+ - Multicast (formerly called Class D) — The first four bits in the address are 1110, with addresses ranging from 224.0.0.0 to 239.255.255.255.
+
+ - Reserved for future/experimental use (formerly called Class E) — addresses 240.0.0.0 to 254.255.255.254.
+
+ - The first three (within Classes A, B and C) are those most used in creating subnets. Later, we’ll see how a subnet uses these addresses. The IANA has outlined specific uses for multicast addresses within Internet Engineering Task Force (IETF) document RFC 5771. However, it hasn’t designated a purpose or future plan for Class E addresses since it reserved the block in its 1989 document RFC 1112. Before IPv6, the Internet was filled with debate about whether the IANA should release Class E for general use.
+
+- Subnet mask
+
+ - The second item, which is required for TCP/IP to work, is the subnet mask. The subnet mask is used by the TCP/IP protocol to determine whether a host is on the local subnet or on a remote network.
+
+ - In TCP/IP, the parts of the IP address that are used as the network and host addresses are not fixed, so the network and host addresses above cannot be determined unless you have more information. This information is supplied in another 32-bit number called a subnet mask. In this example, the subnet mask is 255.255.255.0. It is not obvious what this number means unless you know that 255 in binary notation equals 11111111; so, the subnet mask is:
+
+
+ 11111111.11111111.11111111.0000000
+
+
+ - Lining up the IP address and the subnet mask together, the network and host portions of the address can be separated:
+
+
+ - 11000000.10101000.01111011.10000100 -- IP address (192.168.123.132)
+
+ - 11111111.11111111.11111111.00000000 -- Subnet mask (255.255.255.0)
+
+
+ - The first 24 bits (the number of ones in the subnet mask) are identified as the network address, with the last 8 bits (the number of remaining zeros in the subnet mask) identified as the host address. This gives you the following:
+
+
+ 11000000.10101000.01111011.00000000 -- Network address (192.168.123.0)
+ 00000000.00000000.00000000.10000100 -- Host address (000.000.000.132)
+
+
+ - So now you know, for this example using a 255.255.255.0 subnet mask, that the network ID is 192.168.123.0, and the host address is 0.0.0.132. When a packet arrives on the 192.168.123.0 subnet (from the local subnet or a remote network), and it has a destination address of 192.168.123.132, your computer will receive it from the network and process it.
+
+ - Almost all decimal subnet masks convert to binary numbers that are all ones on the left and all zeros on the right. Some other common subnet masks are:
+
+
+ | Decimal | Binary |
+ |------------------|-----------------------------------|
+ | 255.255.255.192 | 1111111.11111111.1111111.11000000 |
+ | 255.255.255.224 | 1111111.11111111.1111111.11100000 |
+
+- Subnetting
+
+ - A Class A, B, or C TCP/IP network can be further divided, or subnetted, by a system administrator. This becomes necessary as you reconcile the logical address scheme of the Internet (the abstract world of IP addresses and subnets) with the physical networks in use by the real world.
+
+ - A system administrator who is allocated a block of IP addresses may be administering networks that are not organized in a way that easily fits these addresses. For example, you have a wide area network with 150 hosts on three networks (in different cities) that are connected by a TCP/IP router. Each of these three networks has 50 hosts. You are allocated the class C network 192.168.123.0. (For illustration, this address is actually from a range that is not allocated on the Internet.) This means that you can use the addresses 192.168.123.1 to 192.168.123.254 for your 150 hosts.
+
+ - Two addresses that cannot be used in your example are 192.168.123.0 and 192.168.123.255 because binary addresses with a host portion of all ones and all zeros are invalid. The zero address is invalid because it is used to specify a network without specifying a host. The 255 address (in binary notation, a host address of all ones) is used to broadcast a message to every host on a network. Just remember that the first and last address in any network or subnet cannot be assigned to any individual host.
+
+ - You should now be able to give IP addresses to 254 hosts. This works fine if all 150 computers are on a single network. However, your 150 computers are on three separate physical networks. Instead of requesting more address blocks for each network, you divide your network into subnets that enable you to use one block of addresses on multiple physical networks.
+
+ - In this case, you divide your network into four subnets by using a subnet mask that makes the network address larger and the possible range of host addresses smaller. In other words, you are 'borrowing' some of the bits usually used for the host address, and using them for the network portion of the address. The subnet mask 255.255.255.192 gives you four networks of 62 hosts each. This works because in binary notation, 255.255.255.192 is the same as 1111111.11111111.1111111.11000000. The first two digits of the last octet become network addresses, so you get the additional networks 00000000 (0), 01000000 (64), 10000000 (128) and 11000000 (192). (Some administrators will only use two of the subnetworks using 255.255.255.192 as a subnet mask. For more information on this topic, see RFC 1878.) In these four networks, the last 6 binary digits can be used for host addresses.
+
+ - Using a subnet mask of 255.255.255.192, your 192.168.123.0 network then becomes the four networks 192.168.123.0, 192.168.123.64, 192.168.123.128 and 192.168.123.192. These four networks would have as valid host addresses:
+
+
+ - 192.168.123.1-62
+ - 192.168.123.65-126
+ - 192.168.123.129-190
+ - 192.168.123.193-254
+
+
+ - Remember, again, that binary host addresses with all ones or all zeros are invalid, so you cannot use addresses with the last octet of 0, 63, 64, 127, 128, 191, 192, or 255.
+
+ - You can see how this works by looking at two host addresses, 192.168.123.71 and 192.168.123.133. If you used the default Class C subnet mask of 255.255.255.0, both addresses are on the 192.168.123.0 network. However, if you use the subnet mask of 255.255.255.192, they are on different networks; 192.168.123.71 is on the 192.168.123.64 network, 192.168.123.133 is on the 192.168.123.128 network.
+
+- Default gateways
+
+ - If a TCP/IP computer needs to communicate with a host on another network, it will usually communicate through a device called a router. In TCP/IP terms, a router that is specified on a host, which links the host's subnet to other networks, is called a default gateway. This section explains how TCP/IP determines whether or not to send packets to its default gateway to reach another computer or device on the network.
+
+ - When a host attempts to communicate with another device using TCP/IP, it performs a comparison process using the defined subnet mask and the destination IP address versus the subnet mask and its own IP address. The result of this comparison tells the computer whether the destination is a local host or a remote host.
+
+ - If the result of this process determines the destination to be a local host, then the computer will simply send the packet on the local subnet. If the result of the comparison determines the destination to be a remote host, then the computer will forward the packet to the default gateway defined in its TCP/IP properties. It is then the responsibility of the router to forward the packet to the correct subnet.
+
+
+
+
+### Resources:
+
+- [What computer networks are and how to actually understand them](https://www.freecodecamp.org/news/computer-networks-and-how-to-actually-understand-them-c1401908172d/)
+- [Understanding TCP/IP addressing and subnetting basics](https://support.microsoft.com/en-in/help/164015/understanding-tcp-ip-addressing-and-subnetting-basics)
+- [Ip addressing guide](https://www.cisco.com/c/dam/en/us/solutions/collateral/enterprise/design-zone-smart-business-architecture/sba_ipAddr_dg.pdf)
+- [What is port forwarding and what it is used for?](https://superuser.com/questions/284051/what-is-port-forwarding-and-what-is-it-used-for)
+- [Port forwarding for beginners](https://medium.com/datadriveninvestor/port-forwarding-for-beginners-11355d000867)
+
+
+
+
+
+*********************************************
+
+
+## DNS:
+
+### Concepts:
+
+- The Domain Name System (DNS) is a distributed directory that resolves human-readable hostnames, such as www.dyn.com, into machine-readable IP addresses like 50.16.85.103. DNS is also a directory of crucial information about domain names, such as email servers (MX records) and sending verification (DKIM, SPF, DMARC), TXT record verification of domain ownership, and even SSH fingerprints (SSHFP).
+
+- Each device connected to the Internet has a unique IP address which other machines use to find the device. DNS servers eliminate the need for humans to memorize IP addresses such as 192.168.1.1 (in IPv4), or more complex newer alphanumeric IP addresses such as 2400:cb00:2048:1::c629:d7a2 (in IPv6).
+
+- How does DNS work?
+
+ - The process of DNS resolution involves converting a hostname (such as www.example.com) into a computer-friendly IP address (such as 192.168.1.1). An IP address is given to each device on the Internet, and that address is necessary to find the appropriate Internet device - like a street address is used to find a particular home. When a user wants to load a webpage, a translation must occur between what a user types into their web browser (example.com) and the machine-friendly address necessary to locate the example.com webpage.
+
+ - In order to understand the process behind the DNS resolution, it’s important to learn about the different hardware components a DNS query must pass between. For the web browser, the DNS lookup occurs “ behind the scenes” and requires no interaction from the user’s computer apart from the initial request.
+
+- There are 4 DNS servers involved in loading a webpage:
+
+ - DNS recursor - The recursor can be thought of as a librarian who is asked to go find a particular book somewhere in a library. The DNS recursor is a server designed to receive queries from client machines through applications such as web browsers. Typically the recursor is then responsible for making additional requests in order to satisfy the client’s DNS query.
+
+ - Root nameserver - The root server is the first step in translating (resolving) human readable host names into IP addresses. It can be thought of like an index in a library that points to different racks of books - typically it serves as a reference to other more specific locations.
+
+ - TLD nameserver - The top level domain server (TLD) can be thought of as a specific rack of books in a library. This nameserver is the next step in the search for a specific IP address, and it hosts the last portion of a hostname (In example.com, the TLD server is “com”).
+
+ - Authoritative nameserver - This final nameserver can be thought of as a dictionary on a rack of books, in which a specific name can be translated into its definition. The authoritative nameserver is the last stop in the nameserver query. If the authoritative name server has access to the requested record, it will return the IP address for the requested hostname back to the DNS Recursor (the librarian) that made the initial request.
+
+- DNS Records
+
+ - A record:
+ - The A record, which is also called a host record contains the ipv4-address of a computer.When a DNS client queries a DNS server for an A record, then the DNS server will resolve the hostname in the query to an ip address. An AAAA record is similar but contains an ipv6 address instead of ipv4.
+
+ - PTR record :
+ - A PTR record is the reverse of an A record. It contains the name of a computer and can be used to resolve an ip address to a hostname.
+
+ - NS record:
+ - A NS record or nameserver record is a record that points to a DNS name server (in this zone). You can list all your name servers for your DNS zone in distinct NS records.
+
+ - glue A record :
+ - An A record that maps the name of an NS record to an ip address is said to be a glue record.
+
+ - SOA record:
+ - The SOA record of a zone contains meta information about the zone itself. The contents of the SOA record is explained in detail in the section about zone transfers. There is exactly one SOA record for each zone.
+
+ - CNAME record :
+ - A CNAME record maps a hostname to a hostname, creating effectively an alias for an existing hostname. The name of the mail server is often aliased to mail or smtp, and the name of a web server to www.
+ -
+ - MX record :
+ - The MX record points to an smtp server. When you send an email to another domain, then your mail server will need the MX record of the target domain's mail server.
+
+
+
+### Resources:
+
+- [What is DNS - AWS](https://aws.amazon.com/route53/what-is-dns/)
+- [What is DNS - Cloudflare](https://www.cloudflare.com/learning/dns/what-is-dns/)
+- [DNS: Why It’s Important and How It Works](https://dyn.com/blog/dns-why-its-important-how-it-works/)
+- [An Introduction to DNS Terminology, Components, and Concepts](https://www.digitalocean.com/community/tutorials/an-introduction-to-dns-terminology-components-and-concepts)
+- [Reviewing DNS Concepts](https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/reviewing-dns-concepts)
+
+********************************************
+
+## Proxy server
+
+- What is an HTTP proxy and how does it work?
+
+ The simple diagram looks like this:
+
+ |CLIENT <---> PROXY <---> SERVER |
+ | (Browser)-------------------(Web Server)|
+
+
+The HTTP request is sent from Client to port 8080 of the Proxy Server. The Proxy Server then originates a new HTTP request to the destination site. The proxy, depending on the configuration, will often add a "X-Forwarded-For" header to the HTTP request. The log files on the destination web site will show the proxy's IP address, but may or may not be configured to log the "X-Forwarded-For" address.
+
+It was popular years ago, and they still stick around. However, the proxy server, most of the part has been replaced by NAT that is now build into routers. We still use proxy server every once in a while for very specific usage such as hacking/security communities, mostly to hide the id of the connection side.
+
+Internally (within a network), it can be very useful for caching proxy(Squid). For instance, this can be useful when lots of our network computers trying to do Windows Update, the proxy server can cache GBs of files once and for all, and saving bandwidth.
+
+
+**********************************************
+
+## Routing Bridging and NAT
+### NAT
+ The motivation behind NAT or Network Address Translation comes from the continuously increasing number of network applications and users along with the limited pool of public IPv4 addresses.
+
+
+NAT enables hosts on an internal network to access an external network. NAT not only solves the problem of IPv4 address shortage but it also solves security loopholes since NAT prevents devices on the external network from directly communicating with hosts on the internal network that use private addresses.
+
+#### Private IP Addresses
+While public IP addresses are used for direct communication on the internet and are handled and distributed by dedicated organizations, private IP addresses are not used for direct communication on the internet and can be used by anyone randomly on an internal network. So a private IP address can be assigned to multiple machines as long as they don't belong to the same internal network.
+
+- Reserved private IP addresses
+
+ - Class A:
+ - 10.0.0.0 - 10.255.255.255
+ - Class B:
+ - 172.16.0.0 – 172.31.255.255
+ - Class C:
+ - 192.168.0.0 – 192.168.255.255
+
+NAT is usually implemented on network egress devices such as routers or firewalls. An internal network can be an entreprise or a home. So, when you are using your computer at home and you want to access the internet to chat with some friends, a packet is sent to your home router where there is a NAT configured. For a traffic coming from an internal network (home) and going to an external network (internet), the NAT will translate the source IP address (private) which is in this case your computer's, into a specific public IP address so you can communicate with the public or external network. And vice versa, when a traffic is coming from an external network and going to an internal network, the NAT will translate the destination IP address (public) into a specific private IP address.
+
+#### Static NAT vs Dynamic NAT
+When a private IP address is linked to a fixed IP address, this is called static NAT because it is one-to-one mode. Whereas in dynamic NAT, a private IP address is mapped to a group of public IP addresses. Static NAT could result in wasting IP addresses because the public IP address is always reserved for a specific host whether they are online or offline. However, dynamic NAT temporarily assigns a random IP address in the pool of addresses to the host. When the latter is no longer online, dynamic NAT frees that formerly claimed IP address and it is then available for other users.
+
+#### NAPT and Easy IP
+Despite that, dynamic NAT is far from perfect because it does not handle port numbers translation. This is where NAPT or Network Address and Port Translation comes to the rescue because it enables a public IP address to map multiple private IP addresses through ports. In this mode, both IP addresses and transport-layer ports are translated so that different private addresses with different source port numbers are mapped to the same public address with different source port numbers.
+
+Easy IP also translates both IP addresses and transport-layer port numbers. However, Easy IP applies to scenarios where public IP addresses are not fixed, such as scenarios where public IP addresses are dynamically obtained by egress devices on private networks through DHCP (Dynamic Host Configuration Protocol) for example.
+
+*********************************************
+
+## Firewalls and Ports
+
+***********************************************
+
+
+
+
+
+********************
+
+## References:
+
+- [Networking for Devops](https://www.youtube.com/playlist?list=PLFjq8z-aGyQ7BGJKANiIusSq92L7OTytJ)
diff --git a/Networking/readme.md b/Networking/readme.md
new file mode 100644
index 00000000..1b1c3766
--- /dev/null
+++ b/Networking/readme.md
@@ -0,0 +1,5 @@
+# Networking:
+
+- [Networking Commands](networking-commands.md)
+- [Networking Concepts](networking-concepts.md)
+- [Networking Cheatsheets](cheatsheet)
diff --git a/notes/os-commands.md b/OS/os-commands.md
similarity index 55%
rename from notes/os-commands.md
rename to OS/os-commands.md
index 810b36be..c478dc6e 100644
--- a/notes/os-commands.md
+++ b/OS/os-commands.md
@@ -1,10 +1,12 @@
# OS commands
- [Linux Performance monitoring]()
- - [top]()
- - [ps aux]()
- - [kill]()
-
+ - [top](#top)
+ - [ps aux](#ps)
+ - [kill](#kill)
+ - [df](#df)
+ - [ss](#ss)
+ - [lsof](#lsof)
***************
@@ -14,7 +16,7 @@
- Display Processes for a Specific User
-``` $ top -u root ``
+``` $ top -u root ```
@@ -27,6 +29,7 @@
- [Linux CPU Performance Monitoring Tutorial](https://www.slashroot.in/linux-cpu-performance-monitoring-tutorial)
- [20 Command Line Tools to Monitor Linux Performance](https://www.tecmint.com/command-line-tools-to-monitor-linux-performance/)
- [How to Use the Linux Top command](https://vitux.com/how-to-use-the-ubuntu-linux-top-command/)
+- [Process Scheduling in Linux](https://www.scaler.com/topics/operating-system/process-scheduling/)
****************
@@ -97,7 +100,7 @@
- To view only PID, USER and CMD columns, we can use the following command.
-``` $ps –eo pid,user,cmd ``
+``` $ps –eo pid,user,cmd ```
- Finding the process which is using the highest memory
@@ -163,4 +166,97 @@
- [Understanding the kill command, and how to terminate processes in Linux](https://bencane.com/2014/04/01/understanding-the-kill-command-and-how-to-terminate-processes-in-linux/)
- [A Guide to Kill, Pkill and Killall Commands to Terminate a Process in Linux](https://www.tecmint.com/how-to-kill-a-process-in-linux/)
- [How To Use ps, kill, and nice to Manage Processes in Linux](https://www.digitalocean.com/community/tutorials/how-to-use-ps-kill-and-nice-to-manage-processes-in-linux)
-- [Linux / Unix: killall Command Examples](https://www.cyberciti.biz/faq/unix-linux-killall-command-examples-usage-syntax/)
\ No newline at end of file
+- [Linux / Unix: killall Command Examples](https://www.cyberciti.biz/faq/unix-linux-killall-command-examples-usage-syntax/)
+
+**************************
+## df
+
+- `df` (abbreviated disk **d**isk **f**ree) is a standard Unix command used to display the amount of available disk space for file systems on which the invoking user has appropriate write access.
+- `df` for Unix-like and Linux systems is a part of X/Open portability guide since issue 2 of 1987.
+- Syntax:
+
+```$ df```
+
+```bash
+Filesystem 1024-blocks Free %Used Iused %Iused Mounted on
+/dev/hd4 32768 16016 52% 2271 14% /
+/dev/hd2 4587520 1889420 59% 37791 4% /usr
+/dev/hd9var 65536 12032 82% 518 4% /var
+/dev/hd3 819200 637832 23% 1829 1% /tmp
+/dev/hd1 524288 395848 25% 421 1% /home
+/proc - - - - - /proc
+/dev/hd10opt 65536 26004 61% 654 4% /opt
+```
+
+- To get a more readable format we can pass the `-h` argument which displays in more human readable formats like `KB, MB, GB, or TB`
+
+`$ df -h or df --human-redable`
+
+```
+Filesystem Size Used Avail Use% Mounted on
+/dev/root 3.0G 2.3G 720M 77% /
+devtmpfs 123M 0 123M 0% /dev
+```
+
+- Other useful arguments include
+ - `-a or --all`: List all dummy, duplicate, or inaccessible files which are ommited by default.
+ - `-k`: Use 1024-byte units, instead of default 512-byte units, when writing large figures.
+ - `-P or --portabilty`: Use a POSIX portable output format, when writing to files.
+ - `-t fstype or --type=fstype`: Limit the listing of the fstype. By default nothing is ommited.
+
+### Resources:
+
+- [Manual Page from GNU Coreutils](https://www.gnu.org/software/coreutils/manual/html_node/df-invocation.html)
+- [Linux General Commands Manual](https://www.mankier.com/1/df)
+- [FreeBSD General Commands Manual](https://www.freebsd.org/cgi/man.cgi?query=df&sektion=1)
+- [df commands examples](https://www.tecmint.com/how-to-check-disk-space-in-linux/)
+
+---
+
+## ss
+
+* The `ss` command is a tool used to dump socket statistics and display information in a similar fashion as `netstat`.
+* The `ss` command can display stats for `PACKETS, TCP, UDP, DCCP, RAW` and `Unix Domain Sockets`.
+* Usage:
+ * `$ ss` will list all the connections regardless of the state they are in.
+ * `$ ss -a` will list all the listening and not listening ports.
+ * `$ ss -l` will display only the listening ports.
+ * `$ ss -t` will display only the TCP connections.
+ * `$ ss -lt` will display the listening TCP ports.
+ * `$ ss -ua` will display all the UDP ports.
+ * `$ ss -lu` will display all the listening UDP ports.
+ * `$ ss -p` will display all the PID (Process IDs) of the sockets.
+ * `$ ss -s` will display all the summary statistics.
+ * `$ ss -4` and `$ ss -6` will display the ipv4 and ipv6 connections respectively.
+ * `$ ss -at '(dport = :22 or sport = :22)'`, will filter all socket connections with a given destination port (dport) and source port (sport).
+ * alternatively `$ ss -at '(dport = :ssh or sport = :ssh)'`, will filter all socket connections with a given destination port (dport) and source port (sport), but here the port is given as a service.
+
+### Resources
+
+- [linux.com's ss resource](https://www.linux.com/topic/networking/introduction-ss-command/)
+- [techmint's ss resource](https://www.tecmint.com/ss-command-examples-in-linux/)
+
+**************************
+
+# lsof
+
+* lsof is a command meaning `list open files`, which is used in many Unix-like systems to report a list of all open files and the processes that opened them.
+* In linux/unix, everything is treated as files (pipes, sockets, directories, devices etc). Hence `lsof` is very handy tool in analyzing these resources.
+* Usage:
+ * `$ lsof` will list all open files.
+ * `$ lsof -u username` will list files opened by specific user.
+ * `$ lsof -i TCP:22` will list processes running on specific port.
+ * `$ lsof -i 4` or `$ lsof -i 6` will list IPv4 and IPv6 network files.
+ * `$ lsof -i TCP:1-1024` will list processes running on specific range of port.
+ * `$ lsof -i -u^username` will list open files not owned by specific user.
+ * `$ lsof -i` will shows the list of all network connections `LISTENING & ESTABLISHED`.
+ * `$ lsof -p 1` will show open files owned by specific process id.
+ * `$ lsof -c process-name` will list out all the files opened by a particular process.
+
+### Resources
+
+- [lsof wikipedia](https://en.wikipedia.org/wiki/Lsof)
+- [lsof tecmint doc](https://www.tecmint.com/10-lsof-command-examples-in-linux/)
+- [lsof geeksforgeeks doc](https://www.geeksforgeeks.org/lsof-command-in-linux-with-examples/)
+- [lsof man page](https://man7.org/linux/man-pages/man8/lsof.8.html)
+
diff --git a/notes/Os-concepts.md b/OS/os-concepts.md
similarity index 87%
rename from notes/Os-concepts.md
rename to OS/os-concepts.md
index 51e8a759..eb8fc321 100644
--- a/notes/Os-concepts.md
+++ b/OS/os-concepts.md
@@ -53,6 +53,10 @@ There are 2 operating system design principles, which are: (1) Separation of mec
The 3 types of Operating Systems commonly used nowadays are: (1) Monolithic OS, where the entire OS is working in kernel space and is alone in supervisor mode; (2) Modular OS, in which some part of the system core will be located in independent files called modules that can be added to the system at run time; and (3) Micro OS, where the kernel is broken down into separate processes, known as servers. Some of the servers run in kernel space and some run in user-space.
+#### Resources:
+
+- [Operating System Tutorial](https://www.scaler.com/topics/operating-system/)
+
**************
## Boot Process
@@ -126,54 +130,11 @@ The 3 types of Operating Systems commonly used nowadays are: (1) Monolithic OS,
### Concepts
-- A process is basically a program in execution. The execution of a process must progress in a sequential fashion. To put it in simple terms, we write our computer programs in a text file and when we execute this program, it becomes a process which performs all the tasks mentioned in the program.
-
-- When a program is loaded into the memory and it becomes a process, it can be divided into four sections ─ stack, heap, text and data.
-
-
-
-- Stack: The process Stack contains the temporary data such as method/function parameters, return address and local variables.
-
-- Heap: This is dynamically allocated memory to a process during its run time.
-
-- Text: This includes the current activity represented by the value of Program Counter and the contents of the processor’s registers.
-
-- Data: This section contains the global and static variables.
-
-- When a process executes, it passes through different states. These stages may differ in different operating systems, and the names of these states are also not standardized. In general, a process can have one of the following five states at a time:
-
- - Start: This is the initial state when a process is first started/created.
-
- - Ready: The process is waiting to be assigned to a processor. Ready processes are waiting to have the processor allocated to them by the operating system so that they can run. Process may come into this state after Start state or while running it by but interrupted by the scheduler to assign CPU to some other process.
-
- - Running: Once the process has been assigned to a processor by the OS scheduler, the process state is set to running and the processor executes its instructions.
-
- - Waiting: Process moves into the waiting state if it needs to wait for a resource, such as waiting for user input, or waiting for a file to become available.
-
- - Terminated or Exit: Once the process finishes its execution, or it is terminated by the operating system, it is moved to the terminated state where it waits to be removed from main memory.
-
-- A Process Control Block is a data structure maintained by the Operating System for every process. The PCB is identified by an integer process ID (PID). A PCB keeps all the information needed to keep track of a process.
-
-
-
-- Process State: The current state of the process i.e., whether it is ready, running, waiting, or whatever.
-- Process Privileges: This is required to allow/disallow access to system resources.
-
-- Process ID: Unique identification for each of the process in the operating system.
-
-- Pointer: A pointer to parent process.
-
-- Program Counter: Program Counter is a pointer to the address of the next instruction to be executed for this process.
-
-- CPU Registers: Various CPU registers where process need to be stored for execution for running state.
-- CPU Scheduling Information: Process priority and other scheduling information which is required to schedule the process.
-- Memory Management Information: This includes the information of page table, memory limits, Segment table depending on memory used by the operating system.
+- When a program is loaded into the memory and it becomes a process, it can be divided into four sections ─ stack, heap, text and data.
-- Accounting Information: This includes the amount of CPU used for process execution, time limits, execution ID etc.
-- IO Status Information: This includes a list of I/O devices allocated to the process.
- root and chroot
@@ -279,15 +240,12 @@ The 3 types of Operating Systems commonly used nowadays are: (1) Monolithic OS,
- Definition: A Thread also called lightweight process, is basic CPU utilization; it compromises a thread ID, a program counter, a register set, and a stack. A thread is an entity within a process that can be scheduled for execution.
-- A thread is a flow of execution through the process code, with its own program counter that keeps track of which instruction to execute next, system registers which hold its current working variables, and a stack which contains the execution history.
-- A thread shares with its peer threads few information like code segment, data segment and open files. When one thread alters a code segment memory item, all other threads see that.
-- A thread is also called a lightweight process. Threads provide a way to improve application performance through parallelism. Threads represent a software approach to improving performance of operating system by reducing the overhead thread is equivalent to a classical process.
-- Each thread belongs to exactly one process and no thread can exist outside a process. Each thread represents a separate flow of control. Threads have been successfully used in implementing network servers and web server. They also provide a suitable foundation for parallel execution of applications on shared memory multiprocessors.
-
+
+
- Benefits of Multi-threading
@@ -324,14 +282,9 @@ The 3 types of Operating Systems commonly used nowadays are: (1) Monolithic OS,
- Process scheduling is an essential part of a Multiprogramming operating systems. Such operating systems allow more than one process to be loaded into the executable memory at a time and the loaded process shares the CPU using time multiplexing.
-- The OS maintains all Process Control Blocks (PCBs) in Process Scheduling Queues. The OS maintains a separate queue for each of the process states and PCBs of all processes in the same execution state are placed in the same queue. When the state of a process is changed, its PCB is unlinked from its current queue and moved to its new state queue.
- The Operating System maintains the following important process scheduling queues:
- - Job queue − This queue keeps all the processes in the system.
- - Ready queue − This queue keeps a set of all processes residing in main memory, ready and waiting to execute. A new process is always put in this queue.
- - Device queues − The processes which are blocked due to unavailability of an I/O device constitute this queue.
-
### Resources:
@@ -349,9 +302,7 @@ The 3 types of Operating Systems commonly used nowadays are: (1) Monolithic OS,
### Concepts
-- Memory management is the functionality of an operating system which handles or manages primary memory and moves processes back and forth between main memory and disk during execution. Memory management keeps track of each and every memory location, regardless of either it is allocated to some process or it is free. It checks how much memory is to be allocated to processes. It decides which process will get memory at what time. It tracks whenever some memory gets freed or unallocated and correspondingly it updates the status.
-
- The process address space is the set of logical addresses that a process references in its code. For example, when 32-bit addressing is in use, addresses can range from 0 to 0x7fffffff; that is, 2³¹ possible numbers, for a total theoretical size of 2 gigabytes.
@@ -360,7 +311,7 @@ The 3 types of Operating Systems commonly used nowadays are: (1) Monolithic OS,
- Symbolic addresses: The addresses used in a source code. The variable names, constants, and instruction labels are the basic elements of the symbolic address space.
- -Relative addresses: At the time of compilation, a compiler converts symbolic addresses into relative addresses.
+ - Relative addresses: At the time of compilation, a compiler converts symbolic addresses into relative addresses.
- Physical addresses: The loader generates these addresses at the time when a program is loaded into main memory.
@@ -369,6 +320,7 @@ The 3 types of Operating Systems commonly used nowadays are: (1) Monolithic OS,
- The set of all logical addresses generated by a program is referred to as a logical address space. The set of all physical addresses corresponding to these logical addresses is referred to as a physical address space.
+
### Resources:
- [The Linux Kernerl Docs - Memory Management](https://www.kernel.org/doc/html/latest/admin-guide/mm/index.html)
@@ -400,7 +352,6 @@ The 3 types of Operating Systems commonly used nowadays are: (1) Monolithic OS,
- Semaphores, Shared Memory and Message Queues do relate to IPC in a very special way, since Semaphores, Shared Memory and Message Queues are “Inter-process Communication Resources” or “Inter-process Communication Facilities”, and different in the way they represent IPC from “Inter-process Communication Mechanisms” like Pipes and FIFOs. Semaphores, Shared Memory and Message Queues are System V (AT&T System V.2 release of UNIX) IPC facilities, and they represent wrapper functions that have been developed and inserted in suitable libraries to harness the energy and beauty of IPC mechanisms.
-
- Data sharing among processes can be obtained by storing data in temporary files protected by locks. But this mechanism is never implemented as it proves costly since it requires accesses to the disk filesystem. For that reason, all UNIX Kernels include a set of system calls that supports process communications without interacting with the filesystem.
@@ -452,13 +403,7 @@ The 3 types of Operating Systems commonly used nowadays are: (1) Monolithic OS,
- Management of I/O devices is a very important part of the operating system - so important and so varied that entire I/O subsystems are devoted to its operation. ( Consider the range of devices on a modern computer, from mice, keyboards, disk drives, display adapters, USB devices, network connections, audio I/O, printers, special devices for the handicapped, and many special-purpose peripherals.
-- An I/O system is required to take an application I/O request and send it to the physical device, then take whatever response comes back from the device and send it to the application. I/O devices can be divided into two categories:
-
- - Block devices — A block device is one with which the driver communicates by sending entire blocks of data. For example, hard disks, USB cameras, Disk-On-Key etc.
-
- - Character Devices — A character device is one with which the driver communicates by sending and receiving single characters (bytes, octets). For example, serial ports, parallel ports, sounds cards etc.
-
- Device Controllers
diff --git a/OS/readme.md b/OS/readme.md
new file mode 100644
index 00000000..dc001947
--- /dev/null
+++ b/OS/readme.md
@@ -0,0 +1,42 @@
+## Operating System
+
+- [OS Concepts for DevOps](#os-concepts-for-devops)
+- [Operating System](#operating-system)
+- [Boot Process](#boot-process)
+ - [System startup](#system-startup)
+ - [Stage 1 boot loader](#stage-1-boot-loader)
+ - [Stage 2 boot loader](#stage-2-boot-loader)
+ - [Kernel](#kernel)
+ - [Init](#init)
+ - [Resources:](#resources)
+- [Process and Process Management](#process-and-process-management)
+ - [Concepts](#concepts)
+ - [Resources:](#resources-1)
+- [Linux Signals](#linux-signals)
+ - [Concepts](#concepts-1)
+ - [Resources:](#resources-2)
+- [Threads and Concurrency](#threads-and-concurrency)
+ - [Concepts](#concepts-2)
+ - [Resources:](#resources-3)
+- [Scheduling](#scheduling)
+ - [Concepts](#concepts-3)
+ - [Resources:](#resources-4)
+- [Memory Management](#memory-management)
+ - [Concepts](#concepts-4)
+ - [Resources:](#resources-5)
+- [Inter-Process Communication](#inter-process-communication)
+ - [Concepts](#concepts-5)
+ - [Resources:](#resources-6)
+- [I/O Management](#io-management)
+ - [Concepts](#concepts-6)
+ - [Resources:](#resources-7)
+- [Virtualization](#virtualization)
+ - [Concepts](#concepts-7)
+ - [Resources:](#resources-8)
+- [Distributed File Systems](#distributed-file-systems)
+ - [Concepts](#concepts-8)
+ - [Resources:](#resources-9)
+- [Cloud Computing](#cloud-computing)
+ - [Concepts](#concepts)
+ - [Resources:](#resources-10)
+- [References:](#references)
diff --git a/Programming/readme.md b/Programming/readme.md
new file mode 100644
index 00000000..27cb8b71
--- /dev/null
+++ b/Programming/readme.md
@@ -0,0 +1,13 @@
+## Programming Laguages You Should Know
+
+### Python
+
+### Bash
+
+### JS
+
+### Go
+
+### YML
+
+### Markdown
\ No newline at end of file
diff --git a/README.md b/README.md
index 51138124..a87c70e2 100644
--- a/README.md
+++ b/README.md
@@ -2,45 +2,77 @@

-   
-
+   
+
+
+
*******************
-### File Directories
- - [Docker](https://github.com/Tikam02/DevOps-Guide/tree/master/Docker)
- - [Docker Concepts](https://github.com/Tikam02/DevOps-Guide/blob/master/Docker/docker-concepts.md)
- - [Docker Notes](https://github.com/Tikam02/DevOps-Guide/blob/master/Docker/docker-notes.md)
- - [Tutorial Series ](https://github.com/Tikam02/DevOps-Guide/tree/master/Docker)
- - [Kubernetes](https://github.com/Tikam02/DevOps-Guide/tree/master/kubernetes)
- - [Kubernetes Concepts](https://github.com/Tikam02/DevOps-Guide/blob/master/kubernetes/kuber-concepts.md)
- - [Kubernetes Commands](https://github.com/Tikam02/DevOps-Guide/blob/master/kubernetes/kubernetes-commands.md)
- - [Tutorial Series](https://github.com/Tikam02/DevOps-Guide/tree/master/kubernetes)
- - [Kubernetes Advanced - Deep dive](https://github.com/Tikam02/DevOps-Guide/blob/master/kubernetes/kube-advanced.md)
-- [Infrastructure as Code](https://github.com/Tikam02/DevOps-Guide/tree/master/CI-CD)
- - [Ansible](./IaC/Ansible/readme.md)
- - [Chef](./IaC/chef/readme.md)
- - [Puppet](../DevOps-Guide/IaC/Puppet/readme.md)
- - [Terraform](./IaC/Terraform/readme.md)
- - [CI-CD](https://github.com/Tikam02/DevOps-Guide/tree/master/CI-CD)
- - [Git Concepts & Tutorials]()
- - [Jenkins Concepts & Tutorials]()
- - [Notes](https://github.com/Tikam02/DevOps-Guide/tree/master/notes)
- - [Networking Notes & Concepts](https://github.com/Tikam02/DevOps-Guide/blob/master/notes/networking-notes.md)
- - [Networking Commands for Devops](notes/networking-commands.md)
- - [Os Concepts for DevOps](https://github.com/Tikam02/DevOps-Guide/blob/master/notes/Os-concepts.md)
- - [Os Commands for DevOps](notes/os-commands.md)
- - [DevOps Interview Questions](https://github.com/Tikam02/DevOps-Guide/blob/master/notes/Dev-ops-Interview.md)
- - [Books](https://github.com/Tikam02/DevOps-Guide/tree/master/books)
-
-******************
-
-
-
-
-* Foundation
-
-
-* Devops Flow
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
********************
@@ -48,45 +80,104 @@
### Getting Started DevOps Links:
- [What is Devops - AWS](https://aws.amazon.com/devops/what-is-devops/)
-- [DevOps Roadmap by kamranahmedse](https://github.com/kamranahmedse/developer-roadmap/blob/master/images/devops.png)
+- [What is DevOps - Logit.io](https://logit.io/blog/post/what-is-devops)
+- [DevOps Roadmap by kamranahmedse](https://github.com/kamranahmedse/developer-roadmap/blob/master/public/roadmaps/devops.png)
+- [Devops Roadmap by Nguyen Truong Duong](https://github.com/raycad/devops-roadmap)
+- [Roadmap To devops](https://medium.com/faun/the-roadmap-to-become-a-devops-dude-from-server-to-serverless-dd97420f640e)
- [r/devops](https://www.reddit.com/r/devops/)
- [IBM Kubernetes Handson Labs](https://github.com/IBM/kube101/tree/master/workshop)
- [Getting Started With Azure DevOps](https://github.com/microsoft/azuredevopslabs)
- [Getting started with Google Cloud Platform](https://cloud.google.com/gcp/getting-started/)
- [Freecodecamp Devops Getting Started Articles](https://www.freecodecamp.org/news/tag/devops/)
- [The-devops-roadmap-for-programmers](https://dzone.com/articles/the-devops-roadmap-for-programmers)
-- [Roadmap To devops](https://medium.com/faun/the-roadmap-to-become-a-devops-dude-from-server-to-serverless-dd97420f640e)
- [DevOps Getting Started](https://medium.com/@devfire/how-to-become-a-devops-engineer-in-six-months-or-less-366097df7737)
- [How-to-get-started-with-devops](https://dev.to/liquid_chickens/how-to-get-started-with-devops)
- [Going-from-it-to-devops](https://medium.com/better-programming/going-from-it-to-devops-996192520331)
+- [How to Become a DevOps Engineer in Six Months](https://spacelift.io/blog/how-to-become-devops-engineer)
+- [Who is DevOps? Is it Worth it to Become a DevOps Engineer?](https://spacelift.io/blog/who-is-devops-engineer)
+- [Dynamic DevOps Roadmap: Experience-Driven DevOps](https://devopsroadmap.io/)
-
-
-*******************
-### Some Important Links :
-- [Docker Cheatsheet](https://cheatsheet.dennyzhang.com/cheatsheet-docker-a4)
-- [Kubernetes Cheatsheet](https://cheatsheet.dennyzhang.com/cheatsheet-kubernetes-A4)
-- [Kubernets YAML Templates](https://cheatsheet.dennyzhang.com/kubernetes-yaml-templates)
-- [Development Tools Cheatsheet](https://cheatsheet.dennyzhang.com/category/tools)
-- [Linux Cheatsheet](https://cheatsheet.dennyzhang.com/category/linux)
-- [Kubectl get nodes error!](https://jessicadeen.com/kubectl-get-nodes-error-unable-to-connect-to-the-server-dial-tcp-i-o-timeout/)
-- [Troubleshoot kubectl connection refused](https://medium.com/@texasdave2/troubleshoot-kubectl-connection-refused-6f5445a396ed)
-- [Kubernetes Monitoring-sysdig](https://sysdig.com/blog/kubernetes-monitoring-prometheus/)
-- [Kubernetes Monitoring with helm- Digitalocean](https://www.digitalocean.com/community/tutorials/how-to-set-up-digitalocean-kubernetes-cluster-monitoring-with-helm-and-prometheus-operator)
-- [Getting into DevOps - Reddit](https://www.reddit.com/r/devops/comments/dbusbr/monthly_getting_into_devops_thread_201910/)
-
**************************
-## To Do
-- [ ] Add More Notes on OS/Linux
-- [ ] Add more concepts of CI/CD
-- [ ] Add more interview Question about OS and Networking
-- [ ] Kubernetes Monitoring - Prometheus and Grafana
-- [ ] Add IaC concepts and Tools
-- [ ] Add - AWS CloudFormation,Terraform,Chef,Ansible,Puppet
-
-**************************
+## Contributors ✨
+
+Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
+
+
+
+
+
+
+
+
+
+
+
+This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
+
+********************************************
+
+*********************************************
## License
This project is licensed under the MIT License - Copyright (c) 2019 Tikam Alma
diff --git a/Servers/Apache/Readme.md b/Servers/Apache/Readme.md
new file mode 100644
index 00000000..b7d6883a
--- /dev/null
+++ b/Servers/Apache/Readme.md
@@ -0,0 +1,6 @@
+# Apahe2 Server
+
+- Deployment
+- Configurations
+- Mods
+- Security
\ No newline at end of file
diff --git a/Servers/Apache/configs/templates/deploy-django.md b/Servers/Apache/configs/templates/deploy-django.md
new file mode 100644
index 00000000..5e95504f
--- /dev/null
+++ b/Servers/Apache/configs/templates/deploy-django.md
@@ -0,0 +1 @@
+## Deploy Django
\ No newline at end of file
diff --git a/Servers/Apache/configs/templates/deploy-node-server.md b/Servers/Apache/configs/templates/deploy-node-server.md
new file mode 100644
index 00000000..2368ca8c
--- /dev/null
+++ b/Servers/Apache/configs/templates/deploy-node-server.md
@@ -0,0 +1 @@
+## Deploy Node server
\ No newline at end of file
diff --git a/Servers/Apache/configs/templates/deploy-static-sites.md b/Servers/Apache/configs/templates/deploy-static-sites.md
new file mode 100644
index 00000000..a4dfca13
--- /dev/null
+++ b/Servers/Apache/configs/templates/deploy-static-sites.md
@@ -0,0 +1 @@
+## Deploy Static Websites
\ No newline at end of file
diff --git a/Servers/Apache/configs/templates/django.no-ssl.domain.conf b/Servers/Apache/configs/templates/django.no-ssl.domain.conf
new file mode 100644
index 00000000..b571f2ad
--- /dev/null
+++ b/Servers/Apache/configs/templates/django.no-ssl.domain.conf
@@ -0,0 +1,44 @@
+# -----------------------------------------------------------------------
+# | Config file for example.com host to deploy django server via apache2 |
+# -----------------------------------------------------------------------
+# When you use daemon mode, the number of processes and threads is static. This is one of the immediate benefits of using daemon mode.
+# Specifically, that process management is more predictable. One of the big problems with using embedded mode is that Apache can decide to create additional processes or kill off existing ones.
+# For a web application with large startup costs this is not a good idea as you could suddenly see increased CPU usage due to more processes being started right at the time you don't need it such as when a throughput spike occurs.
+# This can actually cause performance to degrade in the short term rather than improve.
+
+#Use Daemon Mode by Restricting WSGIRestrictEmbedded On
+WSGIRestrictEmbedded On
+
+
+
+ ServerName example.com
+ ServerAlias www.example.com
+
+ # Path for Django Project /home/DJANGO_PROJECT/
+ DocumentRoot /home/DJANGO_PROJECT/
+
+ WSGIDaemonProcess DJANGO_PROJECT python-path=/home/DJANGO_PROJECT/:/home/env/lib/python2.7/site-packages
+ WSGIProcessGroup DJANGO_PROJECT
+ WSGIScriptAlias / /home/DJANGO_PROJECT/WSGI_RELATIVE_PATH
+
+
+
+ Require all granted
+
+
+
+
+ # Include the basic DevOpsGuide Apache Config set
+ Include dgac/basic.conf
+ # Include Required configs from /dgac/
+ Include dgac/tls/ssl_engine.conf
+ Include dgac/tls/certificate_files.conf
+ Include dgac/rewrites/rewrite_nowww.conf
+
+
+
+
+ Require all granted
+
+
+
\ No newline at end of file
diff --git a/Servers/Apache/configs/templates/django.ssl.domain.conf b/Servers/Apache/configs/templates/django.ssl.domain.conf
new file mode 100644
index 00000000..9226ba1f
--- /dev/null
+++ b/Servers/Apache/configs/templates/django.ssl.domain.conf
@@ -0,0 +1,44 @@
+# -----------------------------------------------------------------------
+# | Config file for example.com host to deploy django server via apache2 |
+# -----------------------------------------------------------------------
+# When you use daemon mode, the number of processes and threads is static. This is one of the immediate benefits of using daemon mode.
+# Specifically, that process management is more predictable. One of the big problems with using embedded mode is that Apache can decide to create additional processes or kill off existing ones.
+# For a web application with large startup costs this is not a good idea as you could suddenly see increased CPU usage due to more processes being started right at the time you don't need it such as when a throughput spike occurs.
+# This can actually cause performance to degrade in the short term rather than improve.
+
+#Use Daemon Mode by Restricting WSGIRestrictEmbedded On
+WSGIRestrictEmbedded On
+
+
+
+ ServerName example.com
+ ServerAlias www.example.com
+
+ # Path for Django Project /home/DJANGO_PROJECT/
+ DocumentRoot /home/DJANGO_PROJECT/
+
+ WSGIDaemonProcess DJANGO_PROJECT python-path=/home/DJANGO_PROJECT/:/home/env/lib/python2.7/site-packages
+ WSGIProcessGroup DJANGO_PROJECT
+ WSGIScriptAlias / /home/DJANGO_PROJECT/WSGI_RELATIVE_PATH
+
+
+
+ Require all granted
+
+
+
+
+ # Include the basic DevOpsGuide Apache Config set
+ Include dgac/basic.conf
+ # Include Required configs from /dgac/
+ Include dgac/tls/ssl_engine.conf
+ Include dgac/tls/certificate_files.conf
+ Include dgac/rewrites/rewrite_nowww.conf
+
+
+
+
+ Require all granted
+
+
+
\ No newline at end of file
diff --git a/Servers/Apache/deployment.md b/Servers/Apache/deployment.md
new file mode 100644
index 00000000..edcfc65b
--- /dev/null
+++ b/Servers/Apache/deployment.md
@@ -0,0 +1 @@
+# Apache2 Server Deployment
diff --git a/Servers/Apache/dgac/basic.conf b/Servers/Apache/dgac/basic.conf
new file mode 100644
index 00000000..0f089424
--- /dev/null
+++ b/Servers/Apache/dgac/basic.conf
@@ -0,0 +1,6 @@
+
+Include dgac/security/referrer-policy.conf
+Include dgac/security/x-content-type-options.conf
+Include dgac/security/x-frame-options.conf
+Include dgac/cross-origin/images.conf
+Include dgac/cross-origin/web_fonts.conf
diff --git a/Servers/Apache/dgac/cross-origin/images.conf b/Servers/Apache/dgac/cross-origin/images.conf
new file mode 100644
index 00000000..eb54f64c
--- /dev/null
+++ b/Servers/Apache/dgac/cross-origin/images.conf
@@ -0,0 +1,17 @@
+# ----------------------------------------------------------------------
+# | Cross-origin images |
+# ----------------------------------------------------------------------
+
+# Send the CORS header for images when browsers request it.
+#
+# https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image
+# https://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html
+
+
+
+
+ SetEnvIf Origin ":" IS_CORS
+ Header set Access-Control-Allow-Origin "*" env=IS_CORS
+
+
+
diff --git a/Servers/Apache/dgac/cross-origin/requests.conf b/Servers/Apache/dgac/cross-origin/requests.conf
new file mode 100644
index 00000000..d997865c
--- /dev/null
+++ b/Servers/Apache/dgac/cross-origin/requests.conf
@@ -0,0 +1,26 @@
+# ----------------------------------------------------------------------
+# | Cross-origin requests |
+# ----------------------------------------------------------------------
+
+# Allow cross-origin requests.
+#
+# https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
+# https://enable-cors.org/
+# https://www.w3.org/TR/cors/
+
+# (!) Do not use this without understanding the consequences.
+# This will permit access from any other website.
+# Instead of using this file, consider using a specific rule such as
+# allowing access based on (sub)domain:
+#
+# Header set Access-Control-Allow-Origin "subdomain.example.com"
+#
+# (1) When `Access-Control-Allow-Origin` points to a specific rule rather
+# than `*`, then `Vary: Origin` should be sent along with the response.
+
+
+ Header set Access-Control-Allow-Origin "*"
+
+ # (1)
+ # Header append Vary Origin
+
diff --git a/Servers/Apache/dgac/cross-origin/resource_timing.conf b/Servers/Apache/dgac/cross-origin/resource_timing.conf
new file mode 100644
index 00000000..013df74d
--- /dev/null
+++ b/Servers/Apache/dgac/cross-origin/resource_timing.conf
@@ -0,0 +1,17 @@
+# ----------------------------------------------------------------------
+# | Cross-origin resource timing |
+# ----------------------------------------------------------------------
+
+# Allow cross-origin access to the timing information for all resources.
+#
+# If a resource isn't served with a `Timing-Allow-Origin` header that would
+# allow its timing information to be shared with the document, some of the
+# attributes of the `PerformanceResourceTiming` object will be set to zero.
+#
+# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Timing-Allow-Origin
+# https://www.w3.org/TR/resource-timing/
+# https://www.stevesouders.com/blog/2014/08/21/resource-timing-practical-tips/
+
+
+ Header set Timing-Allow-Origin: "*"
+
diff --git a/Servers/Apache/dgac/cross-origin/web_fonts.conf b/Servers/Apache/dgac/cross-origin/web_fonts.conf
new file mode 100644
index 00000000..8bd8f9b5
--- /dev/null
+++ b/Servers/Apache/dgac/cross-origin/web_fonts.conf
@@ -0,0 +1,13 @@
+# ----------------------------------------------------------------------
+# | Cross-origin web fonts |
+# ----------------------------------------------------------------------
+
+# Allow cross-origin access to web fonts.
+#
+# https://developers.google.com/fonts/docs/troubleshooting
+
+
+
+ Header set Access-Control-Allow-Origin "*"
+
+
diff --git a/Servers/Apache/dgac/errors/custom_errors.conf b/Servers/Apache/dgac/errors/custom_errors.conf
new file mode 100644
index 00000000..b9cd5784
--- /dev/null
+++ b/Servers/Apache/dgac/errors/custom_errors.conf
@@ -0,0 +1,9 @@
+# ----------------------------------------------------------------------
+# | Custom error messages/pages |
+# ----------------------------------------------------------------------
+
+# Customize what Apache returns to the client in case of an error.
+#
+# https://httpd.apache.org/docs/current/mod/core.html#errordocument
+
+ErrorDocument 404 /404.html
diff --git a/Servers/Apache/dgac/errors/error_prevention.conf b/Servers/Apache/dgac/errors/error_prevention.conf
new file mode 100644
index 00000000..c4aacdaa
--- /dev/null
+++ b/Servers/Apache/dgac/errors/error_prevention.conf
@@ -0,0 +1,12 @@
+# ----------------------------------------------------------------------
+# | Error prevention |
+# ----------------------------------------------------------------------
+
+# Disable the pattern matching based on filenames.
+#
+# This setting prevents Apache from returning a 404 error as the result of a
+# rewrite when the directory with the same name does not exist.
+#
+# https://httpd.apache.org/docs/current/content-negotiation.html#multiviews
+
+Options -MultiViews
diff --git a/Servers/Apache/dgac/media_types/character_encodings.conf b/Servers/Apache/dgac/media_types/character_encodings.conf
new file mode 100644
index 00000000..56428686
--- /dev/null
+++ b/Servers/Apache/dgac/media_types/character_encodings.conf
@@ -0,0 +1,38 @@
+# ----------------------------------------------------------------------
+# | Character encodings |
+# ----------------------------------------------------------------------
+
+# Serve all resources labeled as `text/html` or `text/plain` with the media type
+# `charset` parameter set to `UTF-8`.
+#
+# https://httpd.apache.org/docs/current/mod/core.html#adddefaultcharset
+
+AddDefaultCharset utf-8
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+# Serve the following file types with the media type `charset` parameter set to
+# `UTF-8`.
+#
+# https://httpd.apache.org/docs/current/mod/mod_mime.html#addcharset
+
+
+ AddCharset utf-8 .appcache \
+ .bbaw \
+ .css \
+ .htc \
+ .ics \
+ .js \
+ .json \
+ .manifest \
+ .map \
+ .markdown \
+ .md \
+ .mjs \
+ .topojson \
+ .vtt \
+ .vcard \
+ .vcf \
+ .webmanifest \
+ .xloc
+
diff --git a/Servers/Apache/dgac/media_types/media_types.conf b/Servers/Apache/dgac/media_types/media_types.conf
new file mode 100644
index 00000000..e7a8942e
--- /dev/null
+++ b/Servers/Apache/dgac/media_types/media_types.conf
@@ -0,0 +1,89 @@
+# ----------------------------------------------------------------------
+# | Media types |
+# ----------------------------------------------------------------------
+
+# Serve resources with the proper media types (f.k.a. MIME types).
+#
+# https://www.iana.org/assignments/media-types/media-types.xhtml
+# https://httpd.apache.org/docs/current/mod/mod_mime.html#addtype
+
+
+
+ # Data interchange
+
+ AddType application/atom+xml atom
+ AddType application/json json map topojson
+ AddType application/ld+json jsonld
+ AddType application/rss+xml rss
+ AddType application/geo+json geojson
+ AddType application/rdf+xml rdf
+ AddType application/xml xml
+
+
+ # JavaScript
+
+ # Servers should use text/javascript for JavaScript resources.
+ # https://html.spec.whatwg.org/multipage/scripting.html#scriptingLanguages
+
+ AddType text/javascript js mjs
+
+
+ # Manifest files
+
+ AddType application/manifest+json webmanifest
+ AddType application/x-web-app-manifest+json webapp
+ AddType text/cache-manifest appcache
+
+
+ # Media files
+
+ AddType audio/mp4 f4a f4b m4a
+ AddType audio/ogg oga ogg opus
+ AddType image/avif avif
+ AddType image/avif-sequence avifs
+ AddType image/bmp bmp
+ AddType image/jxl jxl
+ AddType image/svg+xml svg svgz
+ AddType image/webp webp
+ AddType video/mp4 f4v f4p m4v mp4
+ AddType video/ogg ogv
+ AddType video/webm webm
+ AddType video/x-flv flv
+
+ # Serving `.ico` image files with a different media type prevents
+ # Internet Explorer from displaying them as images:
+ # https://github.com/h5bp/html5-boilerplate/commit/37b5fec090d00f38de64b591bcddcb205aadf8ee
+
+ AddType image/x-icon cur ico
+
+
+ # WebAssembly
+
+ AddType application/wasm wasm
+
+
+ # Web fonts
+
+ AddType font/woff woff
+ AddType font/woff2 woff2
+ AddType application/vnd.ms-fontobject eot
+ AddType font/ttf ttf
+ AddType font/collection ttc
+ AddType font/otf otf
+
+
+ # Other
+
+ AddType application/octet-stream safariextz
+ AddType application/x-bb-appworld bbaw
+ AddType application/x-chrome-extension crx
+ AddType application/x-opera-extension oex
+ AddType application/x-xpinstall xpi
+ AddType text/calendar ics
+ AddType text/markdown markdown md
+ AddType text/vcard vcard vcf
+ AddType text/vnd.rim.location.xloc xloc
+ AddType text/vtt vtt
+ AddType text/x-component htc
+
+
diff --git a/Servers/Apache/dgac/rewrites/rewrite_engine.conf b/Servers/Apache/dgac/rewrites/rewrite_engine.conf
new file mode 100644
index 00000000..6028961d
--- /dev/null
+++ b/Servers/Apache/dgac/rewrites/rewrite_engine.conf
@@ -0,0 +1,48 @@
+# ----------------------------------------------------------------------
+# | Rewrite engine |
+# ----------------------------------------------------------------------
+
+# (1) Turn on the rewrite engine (this is necessary in order for the
+# `RewriteRule` directives to work).
+#
+# https://httpd.apache.org/docs/current/mod/mod_rewrite.html#RewriteEngine
+#
+# (2) Enable the `FollowSymLinks` option if it isn't already.
+#
+# https://httpd.apache.org/docs/current/mod/core.html#options
+#
+# (3) If your web host doesn't allow the `FollowSymlinks` option, you need to
+# comment it out or remove it, and then uncomment the
+# `Options +SymLinksIfOwnerMatch` line (4), but be aware of the performance
+# impact.
+#
+# https://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks
+#
+# (4) Some cloud hosting services will require you set `RewriteBase`.
+#
+# https://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-modrewrite-not-working-on-my-site
+# https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase
+#
+# (5) Depending on how your server is set up, you may also need to use the
+# `RewriteOptions` directive to enable some options for the rewrite engine.
+#
+# https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions
+
+
+
+ # (1)
+ RewriteEngine On
+
+ # (2)
+ Options +FollowSymlinks
+
+ # (3)
+ # Options +SymLinksIfOwnerMatch
+
+ # (4)
+ # RewriteBase /
+
+ # (5)
+ # RewriteOptions
+
+
diff --git a/Servers/Apache/dgac/rewrites/rewrite_http_to_https.conf b/Servers/Apache/dgac/rewrites/rewrite_http_to_https.conf
new file mode 100644
index 00000000..9eaf97af
--- /dev/null
+++ b/Servers/Apache/dgac/rewrites/rewrite_http_to_https.conf
@@ -0,0 +1,24 @@
+# ----------------------------------------------------------------------
+# | Forcing `https://` |
+# ----------------------------------------------------------------------
+
+# Redirect from the `http://` to the `https://` version of the URL.
+#
+# https://wiki.apache.org/httpd/RewriteHTTPToHTTPS
+
+# (1) If you're using cPanel AutoSSL or the Let's Encrypt webroot method it
+# will fail to validate the certificate if validation requests are
+# redirected to HTTPS. Turn on the condition(s) you need.
+#
+# https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml
+# https://tools.ietf.org/html/draft-ietf-acme-acme-12
+
+
+ RewriteEngine On
+ RewriteCond %{HTTPS} !=on
+ # (1)
+ # RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
+ # RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[\w-]+$
+ # RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
+ RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
+
diff --git a/Servers/Apache/dgac/rewrites/rewrite_nowww.conf b/Servers/Apache/dgac/rewrites/rewrite_nowww.conf
new file mode 100644
index 00000000..a7a7a133
--- /dev/null
+++ b/Servers/Apache/dgac/rewrites/rewrite_nowww.conf
@@ -0,0 +1,40 @@
+# ----------------------------------------------------------------------
+# | Suppressing the `www.` at the beginning of URLs |
+# ----------------------------------------------------------------------
+
+# Rewrite www.example.com → example.com
+
+# The same content should never be available under two different URLs,
+# especially not with and without `www.` at the beginning.
+# This can cause SEO problems (duplicate content), and therefore, you should
+# choose one of the alternatives and redirect the other one.
+#
+# (!) NEVER USE BOTH WWW-RELATED RULES AT THE SAME TIME!
+
+# (1) Set %{ENV:PROTO} variable, to allow rewrites to redirect with the
+# appropriate schema automatically (http or https).
+#
+# (2) The rule assumes by default that both HTTP and HTTPS environments are
+# available for redirection.
+# If your SSL certificate could not handle one of the domains used during
+# redirection, you should turn the condition on.
+#
+# https://github.com/h5bp/server-configs-apache/issues/52
+
+
+
+ RewriteEngine On
+
+ # (1)
+ RewriteCond %{HTTPS} =on
+ RewriteRule ^ - [E=PROTO:https]
+ RewriteCond %{HTTPS} !=on
+ RewriteRule ^ - [E=PROTO:http]
+
+ # (2)
+ # RewriteCond %{HTTPS} !=on
+
+ RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
+ RewriteRule ^ %{ENV:PROTO}://%1%{REQUEST_URI} [R=301,L]
+
+
diff --git a/Servers/Apache/dgac/rewrites/rewrite_www.conf b/Servers/Apache/dgac/rewrites/rewrite_www.conf
new file mode 100644
index 00000000..cf3f6378
--- /dev/null
+++ b/Servers/Apache/dgac/rewrites/rewrite_www.conf
@@ -0,0 +1,45 @@
+# ----------------------------------------------------------------------
+# | Forcing the `www.` at the beginning of URLs |
+# ----------------------------------------------------------------------
+
+# Rewrite example.com → www.example.com
+
+# The same content should never be available under two different URLs,
+# especially not with and without `www.` at the beginning.
+# This can cause SEO problems (duplicate content), and therefore, you should
+# choose one of the alternatives and redirect the other one.
+#
+# (!) NEVER USE BOTH WWW-RELATED RULES AT THE SAME TIME!
+
+# (1) Set %{ENV:PROTO} variable, to allow rewrites to redirect with the
+# appropriate schema automatically (http or https).
+#
+# (2) The rule assumes by default that both HTTP and HTTPS environments are
+# available for redirection.
+# If your SSL certificate could not handle one of the domains used during
+# redirection, you should turn the condition on.
+#
+# https://github.com/h5bp/server-configs-apache/issues/52
+
+# Be aware that the following might not be a good idea if you use "real"
+# subdomains for certain parts of your website.
+
+
+
+ RewriteEngine On
+
+ # (1)
+ RewriteCond %{HTTPS} =on
+ RewriteRule ^ - [E=PROTO:https]
+ RewriteCond %{HTTPS} !=on
+ RewriteRule ^ - [E=PROTO:http]
+
+ # (2)
+ # RewriteCond %{HTTPS} !=on
+
+ RewriteCond %{HTTP_HOST} !^www\. [NC]
+ RewriteCond %{SERVER_ADDR} !=127.0.0.1
+ RewriteCond %{SERVER_ADDR} !=::1
+ RewriteRule ^ %{ENV:PROTO}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
+
+
diff --git a/Servers/Apache/dgac/security/content-security-policy.conf b/Servers/Apache/dgac/security/content-security-policy.conf
new file mode 100644
index 00000000..c2544f00
--- /dev/null
+++ b/Servers/Apache/dgac/security/content-security-policy.conf
@@ -0,0 +1,87 @@
+# ----------------------------------------------------------------------
+# | Content Security Policy (CSP) |
+# ----------------------------------------------------------------------
+
+# Mitigate the risk of cross-site scripting and other content-injection
+# attacks.
+#
+# This can be done by setting a Content Security Policy which permits
+# trusted sources of content for your website.
+#
+# There is no policy that fits all websites, you will have to modify the
+# `Content-Security-Policy` directives in the example depending on your needs.
+#
+# The example policy below aims to:
+#
+# (1) Restrict all fetches by default to the origin of the current website by
+# setting the `default-src` directive to `'self'` - which acts as a
+# fallback to all "Fetch directives" (https://developer.mozilla.org/en-US/docs/Glossary/Fetch_directive).
+#
+# This is convenient as you do not have to specify all Fetch directives
+# that apply to your site, for example:
+# `connect-src 'self'; font-src 'self'; script-src 'self'; style-src 'self'`, etc.
+#
+# This restriction also means that you must explicitly define from which
+# site(s) your website is allowed to load resources from.
+#
+# (2) The `` element is not allowed on the website. This is to prevent
+# attackers from changing the locations of resources loaded from relative
+# URLs.
+#
+# If you want to use the `` element, then `base-uri 'self'` can be
+# used instead.
+#
+# (3) Form submissions are only allowed from the current website by setting:
+# `form-action 'self'`.
+#
+# (4) Prevents all websites (including your own) from embedding your webpages
+# within e.g. the `