Play ·
Tasks ·
Modules ·
Handlers ·
Variables ·
Conditionals & Loops
Ansible Playbooks sind das Herzstück der Ansible-Automatisierung. Sie werden in YAML geschrieben und definieren die gewünschten Zustände von Systemen. Diese Konzepte sind essenziell für die Erstellung von effektiven Automatisierungs-Workflows.
Play ist die oberste Einheit eines Playbooks. Ein Playbook kann mehrere Plays enthalten, die auf verschiedenen Host-Gruppen ausgeführt werden. Jedes Play definiert, welche Hosts angesprochen werden und welche Tasks ausgeführt werden.
| Attribut | Beschreibung |
|---|---|
| name | Beschreibender Name des Plays |
| hosts | Hosts oder Host-Gruppen (inventory) |
| become | Privilegien-Eskalation (sudo) |
| tasks | Liste der auszuführenden Tasks |
| vars | Variablen für dieses Play |
| handlers | Handler für dieses Play |
| pre_tasks / post_tasks | Aufgaben vor/nach Haupt-Tasks |
hosts und tasks.
Tasks sind die einzelnen Arbeitsschritte in einem Play. Jeder Task verwendet ein Modul, um eine bestimmte Aktion auf dem Zielsystem auszuführen. Tasks werden sequenziell abgearbeitet.
| Attribut | Beschreibung |
|---|---|
| name | Beschreibender Name des Tasks |
| <modul> | Das zu verwendende Modul (z.B. apt, copy, service) |
| register | Speichert das Ergebnis in einer Variable |
| tags | Tags für selektive Ausführung |
| when | Bedingung für die Ausführung |
| ignore_errors | Fehler ignorieren |
| notify | Handler auslösen |
register und debug für Debugging-Zwecke. Tags (tags) helfen, nur bestimmte Tasks auszuführen: ansible-playbook playbook.yml --tags config.
Module sind die ausführbaren Einheiten in Ansible. Sie abstrahieren Systemoperationen – von Paketverwaltung über Dateioperationen bis zu Cloud-APIs. Module sind idempotent: Sie führen nur dann eine Änderung durch, wenn der gewünschte Zustand noch nicht erreicht ist.
| Modul | Beschreibung | Beispiel |
|---|---|---|
| apt / yum / dnf | Paketverwaltung | name: nginx state: present |
| copy | Dateien kopieren | src: ./file dest: /tmp/file |
| file | Dateien/Verzeichnisse verwalten | path: /tmp/dir state: directory |
| service | Dienste verwalten | name: nginx state: started enabled: yes |
| template | Jinja2-Templates rendern | src: template.j2 dest: /etc/config |
| user | Benutzer verwalten | name: deploy state: present |
| command / shell | Befehle ausführen | cmd: "echo hello" |
| debug | Nachrichten ausgeben | msg: "{{ variable }}" |
| git | Git-Repository klonen | repo: https://... dest: /app |
Handlers sind spezielle Tasks, die nur ausgeführt werden, wenn sie von einem anderen Task über notify ausgelöst werden. Sie werden einmalig am Ende eines Plays ausgeführt – ideal für das Neuladen von Diensten nach Konfigurationsänderungen.
listen für flexible Handler-Auslösung.
Variablen in Ansible ermöglichen dynamische Playbooks. Sie können auf verschiedenen Ebenen definiert werden – in Plays, Inventory, Host-Variablen oder externen Dateien. Facts sind automatisch erfasste Systeminformationen.
| Level | Beschreibung |
|---|---|
| Play vars | Direkt im Play definiert |
| vars_files | Externe YAML/JSON-Dateien |
| host_vars | Host-spezifische Variablen (hosts/ |
| group_vars | Gruppen-spezifische Variablen (groups/ |
| Inventory vars | Direkt im Inventory definiert |
| Facts | Automatisch erfasste Systeminformationen |
ansible facts für dynamische, host-spezifische Entscheidungen. Mit setup können Sie alle Facts anzeigen: ansible -m setup host.
Conditionals (when) steuern, ob ein Task ausgeführt wird. Loops (loop, with_items) ermöglichen die Wiederholung eines Tasks mit verschiedenen Werten.
| Syntax | Beschreibung |
|---|---|
| loop: ["wert1", "wert2"] | Einfache Liste |
| loop: "{{ list_variable }}" | Liste aus Variable |
| with_items | Legacy-Alternative zu loop |
| with_dict | Dictionary iterieren |
| with_fileglob | Dateimuster |
loop ist die moderne Syntax gegenüber with_items. Für komplexe Schleifen verwenden Sie with_dict oder with_fileglob. Kombinieren Sie loop mit when für selektive Wiederholungen.
Play
Tasks
Module
Handler
Variables
when/loop
ansible-playbook playbook.yml --check --diff ·
ansible-playbook playbook.yml --tags config