From e6a80309e055339a590bf5a3da550ad5e58942b4 Mon Sep 17 00:00:00 2001 From: abregman Date: Sun, 30 Oct 2022 21:49:50 +0200 Subject: [PATCH] Add Terraform and Linux questions and exercises Also updated the script that counts questions to actually update the number in README.md --- README.md | 65 +++++---- images/logos/chaos_engineering.png | Bin 0 -> 11163 bytes images/sre_checklist.png | Bin 0 -> 22298 bytes scripts/count_questions.sh | 8 +- topics/chaos_engineering/README.md | 31 +++++ topics/linux/README.md | 110 +++++++++------ topics/linux/exercises/copy/README.md | 15 +++ topics/linux/exercises/copy/solution.md | 25 ++++ .../linux/exercises/create_remove/README.md | 14 ++ .../linux/exercises/create_remove/solution.md | 21 +++ topics/linux/exercises/navigation/README.md | 19 +++ topics/linux/exercises/navigation/solution.md | 28 ++++ topics/linux/exercises/uniqe_count/README.md | 9 ++ topics/linux/exercises/uniqe_count/ip_list | 115 ++++++++++++++++ .../linux/exercises/uniqe_count/solution.md | 9 ++ topics/terraform/README.md | 125 +++++++++++++++++- 16 files changed, 529 insertions(+), 65 deletions(-) create mode 100644 images/logos/chaos_engineering.png create mode 100644 images/sre_checklist.png create mode 100644 topics/chaos_engineering/README.md create mode 100644 topics/linux/exercises/copy/README.md create mode 100644 topics/linux/exercises/copy/solution.md create mode 100644 topics/linux/exercises/create_remove/README.md create mode 100644 topics/linux/exercises/create_remove/solution.md create mode 100644 topics/linux/exercises/navigation/README.md create mode 100644 topics/linux/exercises/navigation/solution.md create mode 100644 topics/linux/exercises/uniqe_count/README.md create mode 100644 topics/linux/exercises/uniqe_count/ip_list create mode 100644 topics/linux/exercises/uniqe_count/solution.md diff --git a/README.md b/README.md index a88a795..4107cdd 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ :information_source:  This repo contains questions and exercises on various technical topics, sometimes related to DevOps and SRE -:bar_chart:  There are currently **2538** exercises and questions +:bar_chart:  There are currently **2557** exercises and questions :warning:  You can use these for preparing for an interview but most of the questions and exercises don't represent an actual interview. Please read [FAQ page](faq.md) for more details @@ -23,7 +23,7 @@ Git
Git
ansible
Ansible
Network
Network
- Linux
Linux
+ @@ -32,7 +32,7 @@ go
Go
Bash
Shell Scripting
kubernetes
Kubernetes
- Prometheus
Prometheus
+ Cloud
Cloud
@@ -40,7 +40,6 @@ azure
Azure
Google Cloud Platform
Google Cloud Platform
openstack
OpenStack
- security
Security
Operating System
Operating System
@@ -48,7 +47,6 @@ Elastic
Elastic
Virtualization
Virtualization
DNS
DNS
- Misc
Misc
Testing
Testing
@@ -56,7 +54,6 @@ RegEx
Regex
Design
System Design
Hardware
Hardware
- Big Data
Big Data
Certificates
Certificates
@@ -64,7 +61,6 @@ sql
SQL
OpenShift
OpenShift
Storage
Storage
- HR
Soft Skills
Terraform
Terraform
@@ -72,14 +68,26 @@ puppet
Puppet
Distributed
Distributed
you
Questions you can ask
- perl
Perl
Circle CI
Circle CI
Argo
Argo
- Kafka
Kafka
+ Kafka
Kafka
DataDog
+ perl
Perl
+ + Linux
Linux
+ Prometheus
Prometheus
+ Big Data
Big Data
+ HR
Soft Skills
+ security
Security
+ + + Chaos Engineering
Chaos Engineering
+ Misc
Misc
+ + @@ -89,35 +97,28 @@ ## Network
-What do you need in order to communicate?
+In general, what do you need in order to communicate?
- A common language (for the two ends to understand) - A way to address who do you want to communicate with - A Connection (so the content of the communication can reach the recipients) +
What is TCP/IP?
A set of protocols that define how two or more devices can communicate with each other. + To learn more about TCP/IP, read [here](http://www.penguintutor.com/linux/basic-network-reference) -
-
-What is APIPA?
-APIPA is a set of it addresses that devices are allocated -when the main DHCP server is not reachable -
- -
-What ip range does APIPA use?
-APIPA uses the ip range: 169.254.0.1 - 169.254.255.254.
What is Ethernet?
Ethernet simply refers to the most common type of Local Area Network (LAN) used today. A LAN—in contrast to a WAN (Wide Area Network), which spans a larger geographical area—is a connected network of computers in a small area, like your office, college campus, or even home. +
@@ -416,7 +417,22 @@ For example, your computer's private IP could be 192.168.1.100, but your router Which factors affect network performances
-#### Network - Data and Control planes +
+What is APIPA?
+ +APIPA is a set of it addresses that devices are allocated +when the main DHCP server is not reachable + +
+ +
+What ip range does APIPA use?
+ +APIPA uses the ip range: 169.254.0.1 - 169.254.255.254. + +
+ +#### Control Plane and Data Plane
What "control plane" refers to?
@@ -2887,9 +2903,8 @@ Google Drive Explain MBR
-## Questions you CAN ask - +## Questions you CAN ask A list of questions you as a candidate can ask the interviewer during or after the interview. These are only a suggestion, use them carefully. Not every interviewer will be able to answer these (or happy to) which should be perhaps a red flag warning for your regarding working in such place but that's really up to you. @@ -3679,7 +3694,9 @@ If you are looking for a way to prepare for a certain exam this is the section f * [Certified Kubernetes Administrator (CKA)](topics/kubernetes/CKA.md) (Latest update: 2022) -## Other DevOps Projects +## Additional DevOps and SRE Projects + +

diff --git a/images/logos/chaos_engineering.png b/images/logos/chaos_engineering.png new file mode 100644 index 0000000000000000000000000000000000000000..1d2ba53e5d37195cd2f1b8584ab74f3917c18d79 GIT binary patch literal 11163 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 literal 0 HcmV?d00001 diff --git a/scripts/count_questions.sh b/scripts/count_questions.sh index 1db56bc..112dcca 100755 --- a/scripts/count_questions.sh +++ b/scripts/count_questions.sh @@ -1,3 +1,9 @@ #!/usr/bin/env bash -echo $(( $(grep -E "\[Exercise\]|" -c README.md topics/*/README.md | awk -F: '{ s+=$2 } END { print s }' ))) +set -eu + +count=$(echo $(( $(grep -E "\[Exercise\]|" -c README.md topics/*/README.md | awk -F: '{ s+=$2 } END { print s }' )))) + +echo "There are $count questions and exercises" + +sed -i "s/currently \*\*[0-9]*\*\*/currently \*\*$count\\**/" README.md diff --git a/topics/chaos_engineering/README.md b/topics/chaos_engineering/README.md new file mode 100644 index 0000000..c442886 --- /dev/null +++ b/topics/chaos_engineering/README.md @@ -0,0 +1,31 @@ +# Chaos Engineering + +- [Chaos Engineering](#chaos-engineering) + - [Chaos Engineering Questions](#chaos-engineering-questions) + - [Basics](#basics) + +## Chaos Engineering Questions + +### Basics + +
+What is Chaos Engineering?
+ +[Wikipedia](https://en.wikipedia.org/wiki/Chaos_engineering): "Chaos Engineering is the discipline of experimenting on a system in order to build confidence in the system's capability to withstand turbulent conditions in production." + +[TechTarget](https://www.techtarget.com/searchitoperations/definition/chaos-engineering): "Chaos engineering is the process of testing a distributed computing system to ensure that it can withstand unexpected disruptions." + +
+ +
+What's a typical Chaos Engineering workflow?
+ +According to [Gremlin](gremlin.com) there are three steps: + +1. Planning an experiment where you design and choose a scenario in which your system should fail to operate properly +2. You execute the smallest possible experiment to test your theory +3. If nothing goes wrong, you scale your experiment and make the blast radius bigger. If your system breaks, you better understand why and start dealing with it + +The process then repeats itself either with same scenario or a new one. + +
\ No newline at end of file diff --git a/topics/linux/README.md b/topics/linux/README.md index 9054a8b..ea1baf4 100644 --- a/topics/linux/README.md +++ b/topics/linux/README.md @@ -2,46 +2,69 @@ ## Linux Master Application -A completely free application for testing your knowledge on Linux +A completely free application for testing your knowledge on Linux. +Desclaimer: developed by repository owner -
+ -## Linux Self Assessment +- [Linux](#linux) + - [Linux Master Application](#linux-master-application) + - [Linux Exercises](#linux-exercises) + - [Basics](#basics) + - [Misc](#misc) + - [Linux Questions](#linux-questions) + - [Linux 101](#linux-101) + - [I/O Redirection](#io-redirection) + - [Filesystem Hierarchy Standard](#filesystem-hierarchy-standard) + - [Permissions](#permissions) + - [Scenarios](#scenarios) + - [Systemd](#systemd) + - [Troubleshooting and Debugging](#troubleshooting-and-debugging) + - [Scenarios](#scenarios-1) + - [Kernel](#kernel) + - [SSH](#ssh) + - [Globbing & Wildcards](#globbing--wildcards) + - [Boot Process](#boot-process) + - [Disk and Filesystem](#disk-and-filesystem) + - [Performance Analysis](#performance-analysis) + - [Processes](#processes) + - [Security](#security) + - [Networking](#networking) + - [DNS](#dns) + - [Packaging](#packaging) + - [DNF](#dnf) + - [Applications and Services](#applications-and-services) + - [Users and Groups](#users-and-groups) + - [Hardware](#hardware) + - [Namespaces](#namespaces) + - [Virtualization](#virtualization) + - [AWK](#awk) + - [System Calls](#system-calls) + - [Filesystem & Files](#filesystem--files) + - [Advanced Networking](#advanced-networking) + - [Memory](#memory) + - [Distributions](#distributions) + - [Sed](#sed) + - [Misc](#misc-1) -* [Linux 101](#questions-linux-101) -* [Linux I/O Redirection](#questions-linux-redirection) -* [Linux Filesystem Hierarchy Standard](#questions-linux-fhs) -* [Linux Permissions](#questions-linux-permissions) -* [Linux Scenarios](#questions-linux-scenarios) -* [Linux Systemd](#questions-linux-systemd) -* [Linux Troubleshooting and Debugging](#questions-linux-troubleshooting) -* [Linux kernel](#questions-linux-kernel) -* [Linux SSH](#questions-linux-ssh) -* [Linux Globbing and Wildcards](#questions-linux-wildcards) -* [Linux Boot Process](#questions-linux-boot) -* [Linux Disk and Filesystem](#questions-linux-disk-fs) -* [Linux Performance Analysis](#questions-linux-performance-analysis) -* [Linux Processes](#questions-linux-processes) -* [Linux Security](#questions-linux-security) -* [Linux Networking](#questions-linux-networking) -* [Linux DNS](#questions-linux-dns) -* [Linux Packaging](#questions-linux-packaging) -* [Linux DNF](#questions-linux-dnf) -* [Linux Applications and Services](#questions-linux-apps-and-services) -* [Linux Users and Groups](#questions-linux-users-and-groups) -* [Linux Hardware](#questions-linux-hardware) -* [Linux Namepsaces](#questions-linux-namespaces) -* [Linux Virtualization](#questions-linux-virtualization) -* [Linux AWK](#questions-linux-awk) -* [Linux System Calls](#questions-linux-system-calls) -* [Linux Filesystem and Files](#questions-linux-fs-files) -* [Linux Advanced Networking](#questions-linux-advanced-networking) -* [Linux Memory](#questions-linux-memory) -* [Linux Distributions](#questions-linux-distributions) -* [Linux Sed](#questions-linux-sed) -* [Linux Misc](#questions-linux-misc) +## Linux Exercises + +### Basics + +|Name|Topic|Objective & Instructions|Solution|Comments| +|--------|--------|------|----|----| +| Navigation | cd, pwd | [Exercise](exercises/navigation/README.md) | [Solution](exercises/navigation/solution.md) +| Create and Destroy | touch, rm, mkdir | [Exercise](exercises/create_remove/README.md) | [Solution](exercises/create_remove/solution.md) +| Copy Time | touch, cp, ls | [Exercise](exercises/copy/README.md) | [Solution](exercises/copy/solution.md) + +### Misc + +|Name|Topic|Objective & Instructions|Solution|Comments| +|--------|--------|------|----|----| +| Unique Count | | [Exercise](exercises/uniqe_count/README.md) | [Solution](exercises/uniqe_count/solution.md) + +## Linux Questions - ### Linux 101
@@ -50,6 +73,7 @@ A completely free application for testing your knowledge on Linux [Wikipedia](https://en.wikipedia.org/wiki/Linux): "Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged in a Linux distribution." [Red Hat](https://www.redhat.com/en/topics/linux/what-is-linux): "Linux® is an open source operating system (OS). An operating system is the software that directly manages a system’s hardware and resources, like CPU, memory, and storage. The OS sits between applications and hardware and makes the connections between all of your software and the physical resources that do the work." +
@@ -479,8 +503,7 @@ To stop a service: `systemctl stop ` Describe how to make a certain process/app a service
- -### Troubleshooting & Debugging +### Troubleshooting and Debugging
Where system logs are located?
@@ -551,7 +574,16 @@ tail -f How you measure time execution of a program?
- +#### Scenarios + +
+You have a process writing to a file. You don't know which process exactly, you just know the path of the file. You would like to kill the process as it's no longer needed. How would you achieve it?
+ +1. Run `lsof ` +2. Use the pid (process ID) from the lsof command and run `kill ` + +
+ ### Kernel
diff --git a/topics/linux/exercises/copy/README.md b/topics/linux/exercises/copy/README.md new file mode 100644 index 0000000..5b07d95 --- /dev/null +++ b/topics/linux/exercises/copy/README.md @@ -0,0 +1,15 @@ +# Copy Time + +## Objectives + +1. Create an empty file called `x` in `/tmp` +2. Copy the `x` file you created to your home directory +3. Create a copy of `x` file called `y` +4. Create a directory called `files` and move `x` and `y` there +5. Copy the directory "files" and name the copy `copy_of_files` +6. Rename `copy_of_files` directory to `files2` +7. Remove `files` and `files2` directories + +## Solution + +Click [here](solution.md) to view the solution. \ No newline at end of file diff --git a/topics/linux/exercises/copy/solution.md b/topics/linux/exercises/copy/solution.md new file mode 100644 index 0000000..c9d2b8c --- /dev/null +++ b/topics/linux/exercises/copy/solution.md @@ -0,0 +1,25 @@ +# Copy Time + +## Objectives + +1. Create an empty file called `x` in `/tmp` +2. Copy the `x` file you created to your home directory +3. Create a copy of `x` file called `y` +4. Create a directory called `files` and move `x` and `y` there +5. Copy the directory "files" and name the copy `copy_of_files` +6. Rename `copy_of_files` directory to `files2` +7. Remove `files` and `files2` directories + +## Solution + +``` +touch /tmp/x +cp x ~/ +cp x y +mkdir files +cp x files +cp y files +cp -r files copy_of_files +mv copy_of_files files2 +rm -rf files files2 +``` \ No newline at end of file diff --git a/topics/linux/exercises/create_remove/README.md b/topics/linux/exercises/create_remove/README.md new file mode 100644 index 0000000..ceffd33 --- /dev/null +++ b/topics/linux/exercises/create_remove/README.md @@ -0,0 +1,14 @@ +# Create & Destroy + +## Objectives + +1. Create a file called `x` +2. Create a directory called `content` +3. Move `x` file to the `content` directory +4. Create a file insidethe `content` directory called `y` +5. Create the following directory structure in `content` directory: `dir1/dir2/dir3` +6. Remove the content directory + +## Solution + +Click [here](solution.md) to view the solution. \ No newline at end of file diff --git a/topics/linux/exercises/create_remove/solution.md b/topics/linux/exercises/create_remove/solution.md new file mode 100644 index 0000000..1cd8a58 --- /dev/null +++ b/topics/linux/exercises/create_remove/solution.md @@ -0,0 +1,21 @@ +# Create & Destroy + +## Objectives + +1. Create a file called `x` +2. Create a directory called `content` +3. Move `x` file to the `content` directory +4. Create a file insidethe `content` directory called `y` +5. Create the following directory structure in `content` directory: `dir1/dir2/dir3` +6. Remove the content directory + +## Solution + +``` +touch x +mkdir content +mv x content +touch content/y +mkdir -p content/dir1/dir2/dir3 +rm -rf content +``` \ No newline at end of file diff --git a/topics/linux/exercises/navigation/README.md b/topics/linux/exercises/navigation/README.md new file mode 100644 index 0000000..37d5e46 --- /dev/null +++ b/topics/linux/exercises/navigation/README.md @@ -0,0 +1,19 @@ +# Navigation + +## Requirements + +1. Linux :) + +## Objectives + +1. Change directory to `/tmp` +2. Move to parent directory +3. Change directory to home directory +4. Move to parent directory +5. Move again to parent directory + 1. Where are you at? Verify with a command +6. Change to last visited directory + +## Solution + +Click [here](solution.md) to view the solution \ No newline at end of file diff --git a/topics/linux/exercises/navigation/solution.md b/topics/linux/exercises/navigation/solution.md new file mode 100644 index 0000000..b35855f --- /dev/null +++ b/topics/linux/exercises/navigation/solution.md @@ -0,0 +1,28 @@ +# Navigation + +## Requirements + +1. Linux :) + +## Objectives + +1. Change directory to `/tmp` +2. Move to parent directory +3. Change directory to home directory +4. Move to parent directory +5. Move again to parent directory + 1. Where are you at? Verify with a command +6. Change to last visited directory + +## Solution + +``` +cd /tmp +cd .. +cd ~ +cd .. +cd .. +# root (/) +pwd +cd - +``` \ No newline at end of file diff --git a/topics/linux/exercises/uniqe_count/README.md b/topics/linux/exercises/uniqe_count/README.md new file mode 100644 index 0000000..8c79cc9 --- /dev/null +++ b/topics/linux/exercises/uniqe_count/README.md @@ -0,0 +1,9 @@ +# Unique Count + +## Objectives + +In this directory you have a file with list of IP addresses called `ip_list`. Using the file, determine which IP address is the most recurring (listed the most times). + +# Solution + +Click [here](solution.md) to view the solution \ No newline at end of file diff --git a/topics/linux/exercises/uniqe_count/ip_list b/topics/linux/exercises/uniqe_count/ip_list new file mode 100644 index 0000000..1e05879 --- /dev/null +++ b/topics/linux/exercises/uniqe_count/ip_list @@ -0,0 +1,115 @@ +88.249.123.246 GET 200 +204.14.121.43 GET 200 +49.11.110.6 GET 200 +137.126.109.160 GET 200 +107.13.168.5 GET 200 +232.136.91.101 GET 404 +43.140.194.174 GET 200 +137.126.109.160 GET 200 +63.219.2.31 GET 200 +17.86.6.109 GET 200 +119.89.134.53 GET 404 +137.126.109.160 GET 200 +204.14.121.43 GET 200 +238.183.3.55 GET 200 +254.62.231.49 GET 200 +250.1.145.213 POST 200 +17.86.6.109 GET 404 +119.89.134.53 POST 200 +88.249.123.246 GET 200 +49.11.110.61 GET 200 +107.13.168.5 GET 504 +232.136.91.101 GET 200 +137.126.109.160 POST 200 +63.219.2.31 GET 200 +17.86.6.109 GET 200 +119.89.134.53 GET 504 +17.86.6.109 GET 200 +197.1.166.141 GET 200 +17.86.6.109 GET 200 +87.21.188.245 GET 504 +235.230.62.243 GET 200 +246.3.48.149 GET 200 +194.131.205.190 GET 504 +222.129.41.212 POST 200 +224.57.91.248 GET 504 +238.183.3.55 GET 200 +137.126.109.160 GET 504 +254.62.231.49 POST 200 +250.1.145.213 GET 504 +185.80.235.15 GET 200 +137.126.109.160 GET 200 +63.219.2.31 GET 504 +17.86.6.109 GET 200 +119.89.134.53 POST 200 +63.219.2.31 GET 504 +17.86.6.109 GET 200 +119.89.134.53 GET 504 +88.249.123.246 GET 200 +238.183.3.55 POST 200 +224.57.91.248 GET 504 +238.183.3.55 POST 200 +254.62.231.49 GET 200 +254.62.231.49 POST 404 +250.1.145.213 GET 200 +221.169.255.179 GET 200 +220.35.213.247 GET 200 +67.89.94.133 GET 200 +77.192.163.242 POST 200 +204.14.121.43 GET 200 +22.244.145.46 GET 200 +89.127.55.7 GET 200 +137.126.109.160 GET 200 +88.249.123.246 POST 200 +238.183.3.55 GET 200 +254.62.231.49 GET 200 +250.1.145.213 GET 200 +137.126.109.160 POST 200 +221.169.255.179 GET 200 +232.136.91.101 GET 200 +197.1.166.141 GET 200 +87.21.188.245 GET 200 +235.230.62.243 GET 200 +246.3.48.149 GET 200 +194.131.205.190 GET 200 +222.129.41.212 GET 200 +137.126.109.160 GET 200 +224.57.91.248 GET 200 +185.80.235.15 GET 200 +137.126.109.160 GET 200 +63.219.2.31 GET 200 +17.86.6.109 GET 200 +119.89.134.53 GET 200 +88.249.123.246 GET 200 +238.183.3.55 GET 200 +254.62.231.49 GET 200 +250.1.145.213 GET 200 +63.219.2.31 GET 200 +17.86.6.109 GET 200 +119.89.134.53 POST 200 +88.249.123.246 GET 200 +137.126.109.160 POST 200 +238.183.3.55 GET 200 +254.62.231.49 POST 200 +250.1.145.213 GET 200 +137.126.109.160 POST 200 +63.219.2.31 GET 200 +17.86.6.109 GET 404 +107.13.168.5 POST 200 +232.136.91.101 GET 200 +137.126.109.160 POST 200 +63.219.2.31 GET 200 +17.86.6.109 GET 200 +197.1.166.141 GET 200 +87.21.188.245 POST 200 +235.230.62.243 POST 200 +246.3.48.149 GET 200 +194.131.205.190 GET 200 +224.57.91.248 GET 200 +238.183.3.55 POST 200 +254.62.231.49 GET 200 +88.249.123.246 GET 200 +49.11.110.61 GET 200 +107.13.168.5 POST 200 +232.136.91.101 GET 200 +204.14.121.43 POST 200 diff --git a/topics/linux/exercises/uniqe_count/solution.md b/topics/linux/exercises/uniqe_count/solution.md new file mode 100644 index 0000000..134ffb4 --- /dev/null +++ b/topics/linux/exercises/uniqe_count/solution.md @@ -0,0 +1,9 @@ +# Unique Count + +## Objectives + +In this directory you have a file with list of IP addresses called `ip_list`. Using the file, determine which IP address is the most recurring (listed the most times). + +# Solution + +`sort ip_list | cut -d' ' -f1 | uniq -c | sort -n | tail -1` \ No newline at end of file diff --git a/topics/terraform/README.md b/topics/terraform/README.md index 2e8aeb0..e9bdbe0 100644 --- a/topics/terraform/README.md +++ b/topics/terraform/README.md @@ -26,6 +26,7 @@ - [AWS](#aws-1) - [Validations](#validations) - [Terraform Syntax](#terraform-syntax) + - [Production](#production) ## Exercises @@ -839,6 +840,7 @@ terraform { How terraform apply workflow is different when a remote backend is used?
It starts with acquiring a state lock so others can't modify the state at the same time. +
@@ -846,6 +848,7 @@ It starts with acquiring a state lock so others can't modify the state at the sa 1. You remove the backend code and perform `terraform init` to switch back to `local` backend 2. You remove the resources that are the remote backend itself +
@@ -853,7 +856,16 @@ It starts with acquiring a state lock so others can't modify the state at the sa That's true and quite a limitation as it means you'll have to go to the resources of the remote backend and copy some values to the backend configuration. -One way to deal with it is using partial configurations in a completel separate file from the backend itself and then load them with `terraform init -backend-config=some_backend_partial_conf.hcl` +One way to deal with it is using partial configurations in a completely separate file from the backend itself and then load them with `terraform init -backend-config=some_backend_partial_conf.hcl` + +
+ +
+Is there a way to obtain information from a remote backend/state usign Terraform?
+ +Yes, using the concept of data sources. There is a data source for a remote state called "terraform_remote_state". + +You can use it the following syntax `data.terraform_remote_state..outputs.`
@@ -873,6 +885,12 @@ True +
+Why workspaces might not be the best solution for managing states for different environemnts? like staging and production
+ +One reason is that all the workspaces are stored in one location (as in one backend) and usually you don't want to use the same access control and authentication for both staging and production for obvious reasons. Also working in workspaces is quite prone to human errors as you might accidently think you are in one workspace, while you are working a completely different one. +
+ #### State Hands-On @@ -925,6 +943,8 @@ True [Terraform.io](https://www.terraform.io/language/modules/develop): "A module is a container for multiple resources that are used together. Modules can be used to create lightweight abstractions, so that you can describe your infrastructure in terms of its architecture, rather than directly in terms of physical objects." +In addition, modules are great for creating reuable Terraform code that can be shared and used not only between different repositories but even within the same repo, between different environments (like staging and production). +
@@ -1045,4 +1065,107 @@ variable "some_var" {
Demonstrate using the ternary syntax
+
+ +
+What templatefile function does?
+ +Renders a template file and returns the result as string. +
+ +
+How do you test terraform syntax?
+ +A valid answer could be "I write Terraform configuration and try to execute it" but this makes testing cumbersome and quite complex in general. + +There is `terraform console` command which allows you to easily execute terraform functions and experiment with general syntax. + +
+ +
+True or False? Terraform console should be used carefully as it may modify your resources
+ +False. terraform console is ready-only. +
+ +
+You need to render a template and get it as string. Which function would you use?
+ +`templatefile` function. +
+ + +### Production + +This section is about how Terraform is actually used in real-life scenarios and organizations. + +
+What structure layout do you use for your projects?
+ +There is no right or wrong answer, just what you personally adopted or your team, and being able to explain why. + +One common approach is to have a separate directory for each environment. + +``` +terraform_project/ + staging/ + production/ +``` + +Each environment has its own backend (as you don't want to use the same authentication and access controls for all environments) + +Going further, under each environment you'll separate between comoponents, applications and services + + +``` +terraform_project/ + staging/ + applications/ + some-app-service-1/ + some-app-service-2/ + databases/ + mongo/ + postgres/ + networking/ +``` +
+ +
+What files do you have you have in your Terraform projects?
+ +Again, no right or wrong answer. Just your personal experience. + +main.tf +providers.tf +outputs.tf +variables.tf +dependencies.tf + +Each one of these files can be divided to smaller parts if needed (no reason to maintain VERY long files) +
+ +
+An engineer in your team complains about having to copy-paste quite a lot of code between different folders and files of Terraform. What would you do?
+ +Suggest to use Terraform modules. +
+ +
+When working with nested layout of many directories, it can make it cumbresome to run terraform commands in many different folders. How to deal with it?
+ +There are multiple ways to deal with it: +1. Write scripts that perform some commands recurisvely with different conditions +2. Use tools like Terragrunt where you commands like "run-all" that can run in parallel on multiple different paths +
+ +
+One of the engineers in your team complains the inline shell scripts are quite big and maintaining them in Terraform files seems like a bad idea. What would you do?
+ +A good solution for not including shell scripts inline (as in inside terraform configuration files) is to keep them in a separate file and then use the terraform `templatefile` function to render and get them as a string +
+ +
+You noticed a lot of your Terraform code/configuration is duplicated, between repositories and also within the same repository between different directories. What one way you may adopt that will help handling with that?
+ +Using Terraform modules can help greatly with duplicated code and so different environments for example (staging and production) can reuse the same code by using the same modules.
\ No newline at end of file