Skip to content

Commit f75270b

Browse files
committed
slides - debug,vars, inventory vars, directory layouts
1 parent b1ae4f6 commit f75270b

File tree

16 files changed

+285
-81
lines changed

16 files changed

+285
-81
lines changed

.vscode/extensions.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"recommendations": [
3+
"haaaad.ansible"
4+
]
5+
}

TODO.md

+2-12
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,7 @@
44
- write up handout
55
- Test lenght
66
- build docs with sphinx, da wir kein PDF Export haben?
7-
- Wie machen wir die Slides ?
87

9-
## Dauer zwischen Chapters
10-
11-
- 0_prelude
12-
- slideds 0,25
13-
- 1 overview
14-
- slides 0,25
15-
- Demo/workshop 0,5
16-
- 2 basic playbook
17-
- slides 0,25
18-
- work/workshop
19-
- Pause?? oder mach ma gleich Variablen
8+
Coole memes
209

10+
https://www.imagenesmy.com/imagenes/configuration-management-meme-a3.html

demos/2-basic-playbook/simple.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
apt:
99
name: nginx
1010
state: latest
11-
notify: restart ngnix
11+
notify: restart nginx
1212

1313
- name: deploy our awesome app - index.html
1414
copy:
@@ -21,7 +21,7 @@
2121
dest: /var/www/html/image.jpg
2222

2323
handlers:
24-
- name: restart ngnix
24+
- name: restart nginx
2525
service:
2626
name: nginx.service
2727
state: restarted

doc/make.bat

Whitespace-only changes.

environment/env_config.yml

+13-13
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,19 @@ workshop_configuration:
3838
usage: 'managed_host'
3939
os: 'linux'
4040

41-
- name: 'debian2'
42-
ami_id: 'ami-0ca467408e84df23c'
43-
instance_type: 't2.micro'
44-
subnet_ip: '22'
45-
usage: 'managed_host'
46-
os: 'linux'
41+
# - name: 'debian2'
42+
# ami_id: 'ami-0ca467408e84df23c'
43+
# instance_type: 't2.micro'
44+
# subnet_ip: '22'
45+
# usage: 'managed_host'
46+
# os: 'linux'
4747

48-
- name: 'win1'
49-
ami_id: 'ami-023361bb7fb02858c'
50-
instance_type: 't2.medium'
51-
subnet_ip: '41'
52-
usage: 'managed_host'
53-
os: 'windows'
54-
user_data: "{{ lookup('template', 'assets/win_ami_userdata.txt.j2') }}"
48+
# - name: 'win1'
49+
# ami_id: 'ami-023361bb7fb02858c'
50+
# instance_type: 't2.medium'
51+
# subnet_ip: '41'
52+
# usage: 'managed_host'
53+
# os: 'windows'
54+
# user_data: "{{ lookup('template', 'assets/win_ami_userdata.txt.j2') }}"
5555

5656

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<section data-markdown="">
2+
# Playbook Modus/Syntax Check
3+
4+
## Dry-run
5+
6+
Da die meisten Module Idempotend sind, können wir die Playbooks im "Dry Run" laufen lassen.
7+
Es werden **keinen Änderungen** vorgenommen von den Tasks, aber welche Task sich **ändern wird zurückgegeben**.
8+
9+
```bash
10+
ansible-playbook simple.yml -i inventory.ini --check
11+
```
12+
13+
> Achtung es gibt Preview Module wo zb. die Funktion für einen Dry Run fehlt!! (Ansible Modul Index überprüfen)
14+
15+
## Syntax Check
16+
17+
Der Syntax vom Playbook wird ohne ausführung kontrolliert.
18+
19+
```bash
20+
ansible-playbook simple.yml -i inventory --syntax-check
21+
```
22+
23+
notes:
24+
- Wenn man vorab wissen will was sich ändert wird
25+
26+
- Syntax Check
27+
28+
Nützlich wenn das Playbook schon ziemlich groß ist, und man vor dem Testrun nur die Syntax controllieren will
29+
</section>
30+
<section data-markdown="">
31+
# Debug Parameter
32+
33+
```bash
34+
ansible-playbook simple.yml -i inventory.ini -vvv
35+
```
36+
37+
Es wird der Output bzw. Return Value jedes Tasks/Module ausgegeben
38+
39+
> Mehr **v** in -v setzt den Debug Level höher
40+
</section>
41+
<section data-markdown="">
42+
# Debug in Playbook
43+
44+
```YAML
45+
tasks:
46+
- apt:
47+
name: nano
48+
register: apt_result # Speichert den Return Value vom Module in eine Variable apt_result
49+
50+
- debug:
51+
var: apt_result # Gibt die Variable apt_result aus
52+
53+
- debug:
54+
msg: "This is a Output" # Gibt den Text aus
55+
56+
- debug:
57+
msg: "Das ist der Output von apt_result stdout: {{ apt_result.stdout }}" # Gibt den Variablen Inhalt apt_result.stdout mit dem Text aus (String Combine)
58+
```
59+
60+
notes:
61+
- Module Result > register
62+
- register
63+
- Jinja2 Templating Engine > kommt noch
64+
65+
</section>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<section data-markdown="">
2+
# Variablen - Scope
3+
4+
```ini
5+
# Inventory File
6+
host1 ansible_host=10.0.0.1 application=app1 # host_vars
7+
host2 ansible_host=10.0.0.2 application=app2 # host_vars
8+
9+
[web] # inventory group
10+
host1
11+
host2
12+
13+
[web:vars] # group_vars
14+
webserver="apache"
15+
```
16+
17+
```yaml
18+
# playbook
19+
hosts: all
20+
vars:
21+
size: "big"
22+
tasks:
23+
- debug: # Jeder Host hat sein eigenen Variablen Scope!
24+
var: application
25+
# host1 => application = app1
26+
# host2 => application = app2
27+
28+
- debug: # Variable in Inventory Group "web" enthalten, und ist in jedem Scope definiert
29+
var: webserver
30+
# host1 => apache
31+
# host2 => apache
32+
33+
- debug: # Variable ist im Play enthalten, und ist dann in jedem Scope verfügbar
34+
var: size
35+
# host1 => size = "big"
36+
# host2 => size = "big"
37+
38+
- debug: # Variable ist im invenotry per host definiert, daher unterschiedlich im Scope
39+
var: ansible_host
40+
# host1 => ansible_host = 10.0.0.1
41+
# host2 => ansible_host = 10.0.0.2
42+
```
43+
44+
notes:
45+
- Erkäre den Host Variablen Scope
46+
- Alles wird in einem großen Scope per Host zusammengeführt
47+
- Variablen Überschreiben sich, siehe playbook basic
48+
- Nochmal nachfragen ob es klar ist, **CRITICAL CONCEPT**
49+
50+
</section>
51+
<section data-markdown="">
52+
# Variablen von externen Dateien
53+
54+
```yaml
55+
# config/settings.yml
56+
webserver:
57+
port: 80
58+
root: /var/root
59+
```
60+
61+
```yaml
62+
- hosts: webserver
63+
vars_files:
64+
- config/settings.yml
65+
tasks:
66+
- debug:
67+
var: webserver.port
68+
# Output: webserver.port => 80
69+
```
70+
notes:
71+
- Externe Dateien
72+
73+
</section>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<section>
2+
<h1>Inventory Group Vars / Host Vars</h1>
3+
<p>Variablen Files für Inventory Groups und Hosts sind immer relative zum Inventory Source definiert werden</p>
4+
<pre><code class="bash">ansible-playbook site.yml -i inventory.ini</code></pre>
5+
<p class="monospace" style="font-size: 0.6em">
6+
7+
simple-project<br>
8+
├── inventory.ini<br/>
9+
├── group_vars<br>
10+
│ ├── all<br>
11+
│ │ └── common.yml<br>
12+
│ ├── web<br>
13+
│ │ ├── webserver_config.yml<br>
14+
│ │ └── ufw.yml<br>
15+
│ └── database<br>
16+
│ &nbsp;&nbsp;├── mysql.yml<br>
17+
│ &nbsp;&nbsp;└── ufw.yml<br>
18+
├── host_vars<br>
19+
│ ├── db1<br>
20+
│ │ └── db_settings.yml<br>
21+
│ ├── db2<br>
22+
│ │ └── db_settings.yml<br>
23+
│ ├── web1<br>
24+
│ │ └── web_settings.yml<br>
25+
│ └── web2<br>
26+
│ &nbsp;&nbsp;└── web_settings.yml<br>
27+
└── site.yml<br/>
28+
</p>
29+
<aside class="notes">
30+
group_vars / host_vars werden immer relativ vom inventory file erkannt!!
31+
</aside>
32+
</section>
33+
34+
<section>
35+
<h1>Inventory spezifisches Layout</h1>
36+
<pre><code class="bash">ansible-playbook site.yml -inventory dev
37+
ansible-playbook site.yml -inventory prod
38+
</code></pre>
39+
<p class="monospace" style="font-size: 0.6em">
40+
project<br/>
41+
├── dev<br/>
42+
│ ├── group_vars<br/>
43+
│ │ └── web.yml<br/>
44+
│ ├── host_vars<br/>
45+
│ │ └── db1.yml<br/>
46+
│ └── hosts # InventoryFile<br/>
47+
├── prod<br/>
48+
│ ├── group_vars<br/>
49+
│ │ ├── web<br/>
50+
│ │ │ └── basic.yml<br/>
51+
│ │ │ └── settings<br/>
52+
│ │ │&nbsp;&nbsp;&nbsp;&nbsp;└── webserver_config.yml<br/>
53+
│ │ │&nbsp;&nbsp;&nbsp;&nbsp;└── av_config.yml<br/>
54+
│ │ └── web.yml<br/>
55+
│ ├── host_vars<br/>
56+
│ │ └── db1.yml<br/>
57+
│ └── hosts<br/>
58+
└── site.yml<br/>
59+
</p>
60+
<aside class="notes">
61+
- sucht entweder nach einem Group/Hostname.yml file oder nach einem Ordner
62+
- Nimmt auch var files in unterordner
63+
- inventory: wenn nur ein Ordner angegeben wird such er nach "hosts" datei
64+
</aside>
65+
</section>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<section data-markdown="">
2+
# Jinja2 Templating
3+
4+
Ansible beinhaltet die Jinja2 Templating Engine
5+
6+
Kann verwendet werden für:
7+
8+
- Variablen setzen / bearbeiten
9+
- Conditional Logic
10+
- Config Dateien generieren
11+
12+
http://jinja.pocoo.org/docs/2.10/
13+
14+
notes:
15+
- für was verwenden
16+
</section>
17+
<section>
18+
# Jinja2 Filters (Ansible Filters)
19+
20+
21+
22+
23+
24+
</section>

slides/index.html

+5-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,11 @@
4444
<section data-external="content/2_playbook_basics/1_vars_basic.html"></section>
4545
<section data-external="content/2_playbook_basics/2_playbook.html"></section>
4646

47-
47+
<section data-external="content/3_playbook_advanced/1_checks_syntax_debug.html"></section>
48+
<section data-external="content/3_playbook_advanced/2_vars.html"></section>
49+
<section data-external="content/3_playbook_advanced/3_vars_inventory.html"></section>
50+
<section data-external="content/3_playbook_advanced/4_jinja2.html"></section>
51+
4852
<!-- Outrow -->
4953
<!-- Something like this -->
5054
<!-- https://janusworx.com/images/2018/07/i-know-yaml-and-ansible.jpg -->

workshop/1-addhoc/inventory.ini

-25
This file was deleted.

workshop/2-basic-playbook/README.md

+11-10
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ ansible-playbook simple.yml -i inventory.ini
77

88
## Übung
99

10-
- Kopiere die voher erstellte **inventory.ini** in den neuen Workfolder
11-
- Erstelle eine neue Inventory Gruppe für die Debian Server 'web'
12-
- Installiere **nginx** auf beiden Servern Debian Servers (apt)
13-
- Kopiere **index.html**/**image.jpg** in das webroot **/var/www/html** (copy)
14-
- Handler benutzen, um das restarten des services **nginx.service** zu vermeiden bei mehrmaligen aufruf
15-
- Stelle sicher das das Playbook öfters ausgeführt werden kann und es kein **changed** retour liefert
16-
- Teste ob die beiden Debian Hosts eine Website bereitstellen mit dem Browser über die Public FQDN
10+
- Kopiere die voher erstellte **inventory.ini** von 1-addhoc in den neuen Workfolder
11+
- Erstelle eine neue Inventory Gruppe für die Debian Server 'web'
12+
- Erstelle ein Playbook "simple.yml" mit folgenden Tasks/Handlers
13+
- Installiere **nginx** auf beiden Debian hosts (apt)
14+
- Kopiere **index.html**/**image.jpg** in das webroot **/var/www/html** (copy)
15+
- Handler benutzen, um das restarten des services **nginx.service** zu vermeiden bei mehrmaligen aufruf
16+
- Stelle sicher das das Playbook öfters ausgeführt werden kann und es kein **changed** retour liefert
17+
- Teste ob die beiden Debian Hosts eine Website bereitstellen mit dem Browser über den Public FQDN
1718

1819
## Module Hints
1920

@@ -23,15 +24,15 @@ https://docs.ansible.com/ansible/latest/modules/modules_by_category.html?highlig
2324
- apt (https://docs.ansible.com/ansible/latest/modules/apt_module.html?highlight=apt)
2425
- service (https://docs.ansible.com/ansible/latest/modules/service_module.html#service-module)
2526

26-
## Playbook Hint
27+
## Playbook File - Hints
2728

2829
```yaml
2930

3031
- name: "Make me an awesome webserver"
3132
hosts: web
3233
become: yes # We need sudo!
3334
tasks:
34-
- name: <beschreibung>
35+
- name: <Beschreibung>
3536
<Module>:
3637
<Modul Parameter>
3738
<Modul Parameter>
@@ -40,7 +41,7 @@ https://docs.ansible.com/ansible/latest/modules/modules_by_category.html?highlig
4041
- <Another Task>
4142
handlers:
4243
# Don't forget some awesome comments!
43-
- name: <handler name>
44+
- name: <Handler Name>
4445
<Module>
4546
<Module Parameter>
4647
<Module Parameter>

0 commit comments

Comments
 (0)