# Ansible Playbooks: Struktur & Logik für komplexe Automatisierungen

TL;DR / Management Summary Während Ad-hoc Befehle (Artikel 793) für schnelle Checks gut sind, bilden Playbooks die eigentliche Macht von Ansible. In einer YAML-Datei definieren wir den vollständigen Soll-Zustand eines Systems. Ein Senior Admin nutzt Playbooks zur Orchestrierung: Wir definieren Tasks (Aufgaben), nutzen Variables zur Anpassung und setzen Handlers ein, um Dienste nur dann neuzustarten, wenn sich eine Konfiguration wirklich geändert hat.


# 1. Aufbau eines Playbooks

Die Sprache der Ordnung.

Ein Playbook besteht aus einem oder mehreren “Plays”:

---
- name: Configure Webservers
  hosts: webservers
  become: yes
  vars:
    http_port: 80
  
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present

    - name: Copy index.html
      template:
        src: index.html.j2
        dest: /var/www/html/index.html
      notify: Restart Apache
  
  handlers:
    - name: Restart Apache
      service:
        name: apache2
        state: restarted

# 2. Kern-Konzepte: Tasks & Module

Präzise Anweisungen.

Jeder Task ruft ein Modul auf.

- name: Create Users
  user:
    name: "{{ item }}"
  loop:
    - alice
    - bob
    - charlie

# 3. Deep Dive: Handlers & Benachrichtigungen

Intelligente Neustarts.

Ein Handler ist ein spezieller Task, der nur ausgeführt wird, wenn ein anderer Task den Status changed meldet.


# 4. Day-2 Operations: Variablen & Templates (Jinja2)

Ein Playbook für alle Umgebungen.

Nutzen Sie Jinja2 Templates, um Konfigurationsdateien dynamisch zu generieren.


# 5. Troubleshooting & “War Stories”

Wenn YAML nicht will.

# Top 3 Fehlerbilder

  1. Symptom: “Syntax Error: Mapping values are not allowed here”.

    • Ursache: Einrückungsfehler (Indentation). In YAML zählt jeder Leerschritt.
    • Lösung: Nutzen Sie einen Editor mit YAML-Validierung (VS Code) oder ansible-lint.
  2. Symptom: Variablen werden als {{ my_var }} ausgegeben statt ersetzt.

    • Ursache: Die Anführungszeichen fehlen.
    • Fix: Nutzen Sie dest: "{{ my_path }}" (Immer Quoten, wenn ein String mit einer Variablen beginnt).
  3. Symptom: Playbook hängt endlos bei einem Task.

    • Fix: Nutzen Sie -vvv (Verbose Mode), um die rohen SSH-Befehle zu sehen.

# “War Story”: Der “Blind-Copy” Fehler

Ein Admin nutzte das copy Modul, um eine /etc/fstab auf 20 Server gleichzeitig zu verteilen. Das Ereignis: Er hatte vergessen, dass die Server unterschiedliche UUIDs für ihre Festplatten hatten. Das Ergebnis: Nach dem nächsten Reboot startete kein einziger Server mehr, da sie versuchten, die (falschen) Partitionen des Quell-Servers zu mounten. Lehre: Nutzen Sie für Systemdateien niemals copy, sondern immer template oder das Modul lineinfile, um nur spezifische Zeilen sicher zu ändern.


# 6. Monitoring & Reporting

Qualitäts-Checks.

# Check Mode (Dry Run)

Führen Sie Playbooks erst testweise aus:

ansible-playbook site.yml --check --diff

# 7. Fazit & Empfehlung

Playbooks sind die Standard-Arbeitsanweisungen Ihres Teams.


# Anhang: Die wichtigsten Module für Admins

Modul Zweck
command Führt Befehl aus (ohne Shell Features)
shell Führt Befehl in der Bash aus
copy Kopiert Dateien vom Control Node
fetch Holt Dateien vom Server
stat Prüft, ob Datei existiert

# Referenzen