Wenn Sie auf Ihrer Serverfarm für Ordnung sorgen wollen, ist Ansible das Werkzeug der Wahl. Dieses Praxisbuch zeigt Ihnen, wie Sie das automatisierte Deployment Ihrer Dienste orchestrieren und so für standardisierte und dokumentierte Abläufe sorgen. Diese zentrale Konfiguration erleichtert Ihnen Betrieb und Skalierung, da Sie durch die konsequente Automatisierung Fehlerquellen reduzieren.
Aus dem Inhalt:
Basiseinrichtung und Inventory Management
Ad-hoc-Kommandos und Patterns
YAML: Die Konfigurations- und Serialisierungssprache
Playbooks, Tasks und Plays
Modularisierung mit Rollen und Includes
Die Modul-Bibliothek
Webinterfaces: Ansible AWX/Tower und mehr
Ansible und Docker
Callback Plugins
Beispielkonfigurationen und Best Practices
Die Fachpresse zur Vorauflage:
LINUX MAGAZIN: »Ein unverzichtbares Kompendium für alle, die sich in die Automatisierung mit Ansible einarbeiten wollen oder müssen. «
Inhaltsverzeichnis
Vorwort . . . 17
Über dieses Buch . . . 19
1. Einführung und Installation . . . 23
1. 1 . . . Was ist Ansible? . . . 23
1. 2 . . . Was ist Ansible nicht? . . . 25
1. 3 . . . Geschichte und Versionen . . . 26
1. 4 . . . Setup/Laborumgebung . . . 27
1. 5 . . . Ansible-Installation auf dem Control Host . . . 31
1. 6 . . . Authentifizierung und Autorisierung auf den Target Hosts . . . 35
1. 7 . . . Einrichten der SSH-Public-Key-Authentifizierung . . . 36
1. 8 . . . Ein Ad-hoc-Test ohne jegliche Konfiguration . . . 37
1. 9 . . . Noch ein Hinweis zur Migration von älteren Versionen . . . 39
2. Basiseinrichtung und erstes Inventory-Management . . . 41
2. 1 . . . Verzeichnisstruktur einrichten . . . 41
2. 2 . . . Grundkonfiguration (»ansible. cfg«) . . . 42
2. 3 . . . Erstellen und Verwalten eines statischen Inventorys . . . 43
2. 4 . . . Inventory-Aliasse und Namensbereiche . . . 46
2. 5 . . . Jenseits von Ping . . . 47
2. 6 . . . Ein etwas komplexeres Beispiel . . . 50
2. 7 . . . Alternative bzw. mehrere Inventorys . . . 51
3. Ad-hoc-Kommandos und Patterns . . . 55
3. 1 . . . Ad-hoc-Kommandos . . . 55
3. 2 . . . Use Cases jenseits von »command« und »shell« . . . 57
3. 3 . . . Idempotenz . . . 57
3. 4 . . . Interne Funktionsweise . . . 59
3. 5 . . . Die Ansible-Konsole . . . 62
3. 6 . . . Patterns zum Adressieren von Hosts . . . 63
4. Die Konfigurations- und Serialisierungssprache YAML . . . 65
4. 1 . . . Syntax und Struktur . . . 65
4. 2 . . . YAML-Files editieren . . . 66
4. 3 . . . Listen und Maps . . . 68
4. 4 . . . Verschachtelte Strukturen . . . 69
4. 5 . . . Textpassagen und Block-Ausdrücke . . . 70
4. 6 . . . Das Nichts in YAML . . . 71
4. 7 . . . Anchors und References . . . 72
5. Playbooks und Tasks: die Grundlagen . . . 73
5. 1 . . . Hallo Ansible -- das allererste Playbook . . . 73
5. 2 . . . Formulierung von Tasks . . . 77
5. 3 . . . Beenden von Plays . . . 79
5. 4 . . . Der problematische Doppelpunkt . . . 79
5. 5 . . . Fehlerbehandlung, Retry-Files . . . 80
5. 6 . . . Tags . . . 82
5. 7 . . . Das Kommando »ansible-playbook« . . . 83
5. 8 . . . Eine exemplarische Apache-Installation . . . 85
5. 9 . . . Handler: Tasks nur bei Changes durchführen . . . 89
6. Playbooks und Tasks: fortgeschrittene Methoden . . . 95
6. 1 . . . Variablen . . . 95
6. 2 . . . Registrierte Variablen . . . 104
6. 3 . . . Facts und implizite Variablen . . . 108
6. 4 . . . Bedingte Ausführung mit »when« . . . 114
6. 5 . . . Systemunterschiede ausgleichen -- wie denn jetzt? . . . 115
6. 6 . . . Jinja und Templates . . . 123
6. 7 . . . Variablentests . . . 130
6. 8 . . . Schleifen . . . 132
6. 9 . . . Fehlerbehandlung mit »failed_when« und »ignore_errors« . . . 143
6. 10 . . . Blocks (und noch mal Fehlerbehandlung) . . . 144
6. 11 . . . Asynchrone Ausführung . . . 146
6. 12 . . . Lokale Tasks . . . 148
6. 13 . . . Lookup-Plugins . . . 150
6. 14 . . . Umgebungsvariablen setzen . . . 152
7. Module und Collections verwenden . . . 155
7. 1 . . . Collections . . . 155
7. 2 . . . Module . . . 159
7. 3 . . . Module zur Kommandoausführung . . . 160
7. 4 . . . Module zur Paketverwaltung . . . 161
7. 5 . . . Module zur Verwaltung von Dateien und Dateiinhalten . . . 163
7. 6 . . . Module für weitere typische Verwaltungsaufgaben . . . 168
7. 7 . . . Module zur Interaktion mit Netzwerk-Services . . . 170
7. 8 . . . Spezialmodule (Kontrollflusssteuerung etc.) . . . 171
8. Modularisierung mit Rollen und Includes . . . 175
8. 1 . . . Erstellung und Verwendung von Rollen . . . 175
8. 2 . . . Das Online-Repository Ansible Galaxy . . . 182
8. 3 . . . Verwendung von Imports/Includes . . . 182
8. 4 . . . Noch mal Apache . . . 186
8. 5 . . . Dokumentation . . . 190
8. 6 . . . Wiederverwendung von Rollen . . . 194
9. Webinterfaces . . . 199
9. 1 . . . Vorbereitungen zum Betrieb . . . 199
9. 2 . . . Ansible Configuration Management Database (ansible-cmdb) . . . 202
9. 3 . . . Traefik und Gitea . . . 204
9. 4 . . . Ansible AWX . . . 210
9. 5 . . . Polemarch . . . 214
9. 6 . . . Jenkins . . . 216
9. 7 . . . ARA . . . 219
9. 8 . . . Weitere, hier nicht näher betrachtete Möglichkeiten . . . 220
9. 9 . . . Laborumgebung: nicht mehr benötigte Anwendungen beenden . . . 221
10. Weitere Tools und Techniken . . . 223
10. 1 . . . Ansible Vault . . . 223
10. 2 . . . Debugging und Troubleshooting . . . 233
10. 3 . . . Untersuchen von Konfigurationseinstellungen . . . 247
10. 4 . . . Playbooks beschleunigen mit Pipelining . . . 247
10. 5 . . . Die sprechende Kuh . . . 248
10. 6 . . . Ansible im Pull-Mode . . . 249
11. Ansible und Docker . . . 255
11. 1 . . . Installation von Docker . . . 255
11. 2 . . . Docker-Module . . . 257
11. 3 . . . Eine Beispielanwendung . . . 264
11. 4 . . . Ansible und Docker Compose . . . 268
11. 5 . . . Das »docker«-Connection-Plugin . . . 272
11. 6 . . . Erstellen von Images . . . 273
12. Inventory-Management: fortgeschrittene Methoden . . . 281
12. 1 . . . Das Kommando »ansible-inventory« . . . 281
12. 2 . . . Verschachtelte Gruppen . . . 282
12. 3 . . . »On the fly«-Inventorys erstellen mit »add_host« . . . 283
12. 4 . . . Dynamische Gruppen mit »group_by« . . . 284
12. 5 . . . Dynamische bzw. externe Inventorys . . . 287
13. Ansible und die Cloud . . . 293
13. 1 . . . Hetzner Cloud . . . 294
13. 2 . . . AWS EC2 . . . 299
14. Ansible als Orchestrierungswerkzeug . . . 307
14. 1 . . . Administrierst du noch oder orchestrierst du schon? . . . 307
14. 2 . . . Viele Target Hosts zum Testen . . . 308
14. 3 . . . Die Abarbeitungsreihenfolge beeinflussen . . . 310
14. 4 . . . Delegierung . . . 318
15. Ansible und Windows . . . 323
15. 1 . . . Ein Control Host auf Windows-Basis . . . 323
15. 2 . . . WinRM . . . 327
15. 3 . . . Vorbereitungen auf dem Control Host . . . 328
15. 4 . . . Voraussetzungen auf der Windows-Seite und WinRM-Setup . . . 329
15. 5 . . . Setup mit Active Directory/Kerberos . . . 330
15. 6 . . . WinRM-Troubleshooting . . . 332
15. 7 . . . Windows-Module . . . 333
16. Callback-Plugins . . . 337
16. 1 . . . Ausgabe-Plugins . . . 337
16. 2 . . . Sonstige Callback-Plugins . . . 343
17. Eigene Collections und Module erstellen . . . 345
17. 1 . . . Namespaces, Namen und Einrichtung eines Collection-Projektes . . . 345
17. 2 . . . Playbooks in Collections . . . 347
17. 3 . . . Rollen in Collections . . . 348
17. 4 . . . Module in Collections . . . 349
17. 5 . . . Plugins in Collections . . . 362
17. 6 . . . Collections deponieren und installieren . . . 364
18. Entwickeln und Testen mit Molecule . . . 367
18. 1 . . . Vorbereitungen und Einrichtung . . . 367
18. 2 . . . Erste Schritte . . . 369
18. 3 . . . Entwickeln . . . 371
18. 4 . . . Testen mit dem Ansible-Verifier . . . 373
18. 5 . . . Testen mit dem Testinfra-Verifier . . . 375
18. 6 . . . Der komplette Testzyklus . . . 376
18. 7 . . . Ausblick und Fazit . . . 376
19. Kochrezepte, Howtos und Best Practices . . . 379
19. 1 . . . Eine empfehlenswerte »ansible. cfg« . . . 379
19. 2 . . . Ein neues Projekt beginnen . . . 380
19. 3 . . . Einen Task in Abhängigkeit von einem vorhergehenden Task ausführen . . . 380
19. 4 . . . Einen Task ausführen, wenn der Host in einer bestimmten Gruppe ist . . . 382
19. 5 . . . In einer Liste von Maps suchen . . . 382
19. 6 . . . Erweiterung von Maps oder Listen während der Laufzeit . . . 383
19. 7 . . . Die Elemente einer Liste modifizieren und verbinden . . . 385
19. 8 . . . Passwörter und Passwort-Hashes generieren . . . 386
19. 9 . . . Einfache Installer bauen . . . 387
19. 10 . . . IP-Adresse eines Target Hosts bestimmen . . . 389
19. 11 . . . firewalld managen . . . 392
19. 12 . . . Linux-Software-Updates einspielen . . . 394
19. 13 . . . Ansible über einen Gateway- bzw. Jumphost . . . 397
19. 14 . . . Host-spezifische Ressourcen verwalten . . . 397
20. Was könnte noch besser sein bzw. was fehlt noch? . . . 401
20. 1 . . . Lange laufende Tasks verfolgen . . . 401
20. 2 . . . Abarbeitung einer Rolle beenden . . . 402
20. 3 . . . Schleifen über Blöcke . . . 404
20. 4 . . . Locking bei konkurrierenden Playbook-Aufrufen . . . 405
20. 5 . . . Fazit . . . 406
Anhang . . . 407
A . . . Projektspezifische Umgebungsvariablen mit »direnv« . . . 409
B . . . SSH (Secure Shell) . . . 413
C . . . Reguläre Ausdrücke . . . 429
Index . . . 437