admnwrk

Ansible Cheatsheet

Veröffentlicht: Lesedauer: 6 Min.

Das Cheatsheet zum Download

CLI-Befehle · Inventory · Playbook-Grundstruktur · Wichtige Module · Variablen & Facts · Bedingungen & Schleifen · Handlers & Notifications · Roles · Templates (Jinja2) · Ansible Vault · Tags · Ad-hoc-Befehle · Wichtige CLI-Flags · Best Practices

CLI-Befehle

Nächstes Kapitel: Inventory →

ansible --version
Zeigt installierte Ansible-Version und Config-Pfad.

ansible all -m ping
Ad-hoc-Befehl: Erreichbarkeit aller Hosts testen.

ansible-playbook site.yml
Führt ein Playbook aus.

ansible-playbook site.yml --check
Dry-Run, keine Änderungen anwenden.

ansible-playbook site.yml --diff
Zeigt Unterschiede bei Datei-/Config-Änderungen.

ansible-playbook site.yml -i inventory.yml
Explizites Inventory angeben.

ansible-playbook site.yml --syntax-check
Nur Syntax prüfen, nicht ausführen.

ansible-playbook site.yml --list-hosts
Zeigt betroffene Hosts, ohne auszuführen.

ansible-playbook site.yml --list-tasks
Listet alle Tasks des Playbooks.

ansible-playbook site.yml --start-at-task="Setup"
Ausführung ab bestimmtem Task starten.

ansible-galaxy init my_role
Erstellt neue Rollen-Verzeichnisstruktur.

ansible-galaxy install -r requirements.yml
Installiert Rollen aus Requirements-Datei.

ansible-galaxy collection install <name>
Installiert eine Collection.

ansible-galaxy role search <name>
Sucht Rollen in Ansible Galaxy.

ansible-doc -l
Listet alle verfügbaren Module.

ansible-doc apt
Zeigt Dokumentation/Parameter zu einem Modul.

ansible-inventory --list
Inventory als JSON ausgeben.

ansible-inventory --graph
Inventory als Baumstruktur anzeigen.

ansible-config list
Alle Konfigurationsoptionen anzeigen.

ansible-config dump
Aktive Konfiguration (inkl. Defaults) anzeigen.

ansible-config view
Zeigt Inhalt der aktiven ansible.cfg.

↑ Nach oben

Inventory

Nächstes Kapitel: Playbook-Grundstruktur →

[webservers]
Definiert eine Host-Gruppe im INI-Format.

web1 ansible_host=192.168.1.10
Host mit expliziter IP-Zuweisung.

[webservers:vars]
Gruppenweite Variablen im INI-Format.

[webservers:children]
Gruppe aus anderen Gruppen zusammensetzen.

ansible_user / ansible_port / ansible_ssh_private_key_file
Verbindungs-Variablen pro Host.

ansible_connection=local
Lokale Ausführung statt SSH.

group_vars/all.yml
Variablen für alle Hosts zentral definieren.

host_vars/web1.yml
Host-spezifische Variablen in eigener Datei.

aws_ec2 / azure_rm (Inventory-Plugins)
Dynamische Inventories holen Hosts zur Laufzeit von Cloud-APIs.

ansible-inventory -i inventory.yml --list
Dynamisches/statisches Inventory validieren.

↑ Nach oben

Playbook-Grundstruktur

Nächstes Kapitel: Wichtige Module →

hosts: webservers
Zielgruppe des Plays.

become: true
Privilege Escalation (sudo) aktivieren.

gather_facts: true
Facts der Zielhosts sammeln (Standard: an).

vars:
Play-lokale Variablen definieren.

tasks:
Liste auszuführender Module/Aktionen.

handlers:
Tasks, die nur bei notify laufen.

roles:
Wiederverwendbare Rollen einbinden.

pre_tasks: / post_tasks:
Tasks vor bzw. nach Rollen ausführen.

vars_files:
Externe Variablendateien einbinden.

- import_playbook: other.yml
Weiteres Playbook statisch einbinden.

- include_tasks: file.yml
Tasks dynamisch zur Laufzeit einbinden.

↑ Nach oben

Wichtige Module

Nächstes Kapitel: Variablen & Facts →

apt: name=nginx state=present
Paket unter Debian/Ubuntu installieren.

yum: name=httpd state=latest
Paket unter RHEL/CentOS installieren.

package: name=git state=present
Distributionsunabhängige Paketverwaltung.

copy: src=... dest=...
Datei unverändert auf Zielhost kopieren.

template: src=file.j2 dest=...
Jinja2-Template rendern und ablegen.

file: path=... state=directory
Verzeichnisse/Symlinks/Berechtigungen verwalten.

service: name=nginx state=started enabled=true
Dienst starten/stoppen und Autostart setzen.

user: name=deploy state=present groups=sudo
Benutzerkonto anlegen/verwalten.

command: /usr/bin/uptime
Befehl ohne Shell-Interpretation ausführen.

shell: echo $HOME
Befehl mit Shell-Features (Pipes, Variablen) ausführen.

git: repo=... dest=... version=main
Git-Repository klonen/aktualisieren.

cron: name="backup" minute="0" hour="2" job="/usr/bin/backup.sh"
Cronjob verwalten.

lineinfile: path=... line=... regexp=...
Einzelne Zeile in Datei sicherstellen/ändern.

blockinfile: path=... block=...
Textblock in Datei einfügen/verwalten.

synchronize:
Effizientes rsync-basiertes Kopieren.

unarchive: src=... dest=...
Archiv entpacken (optional remote holen).

debug: msg="{{ var }}"
Werte/Variablen zu Debug-Zwecken ausgeben.

assert:
Bedingungen prüfen, Playbook bei Fehlschlag abbrechen.

wait_for: port=22
Warten, bis Port/Bedingung erfüllt ist.

uri: / get_url:
HTTP-Requests bzw. Dateien per URL herunterladen.

↑ Nach oben

Variablen & Facts

Nächstes Kapitel: Bedingungen & Schleifen →

gather_facts: true
Sammelt Systemfakten (OS, IP, Hardware) zu Playbook-Start.

ansible_facts['os_family']
Zugriff auf gesammelte Facts.

register: result
Task-Ausgabe in Variable speichern.

set_fact: my_var="value"
Variable zur Laufzeit dynamisch setzen.

vars_prompt:
Interaktive Eingabe von Variablen zur Laufzeit.

--extra-vars "env=prod"
Variablen per CLI übergeben (höchste Priorität).

ansible.builtin.setup
Facts explizit mit dem setup-Modul abfragen.

Variablenpriorität
Grob: Rollen-Defaults < Inventory-Vars < group_vars/host_vars < Facts < Play-Vars < Rollen-Vars < registrierte Vars < Extra Vars (-e, immer höchste Priorität).

↑ Nach oben

Bedingungen & Schleifen

Nächstes Kapitel: Handlers & Notifications →

when: ansible_os_family == "Debian"
Task nur bei erfüllter Bedingung ausführen.

loop: [a, b, c]
Moderne Schleife über eine Liste (empfohlen).

with_items: [a, b, c]
Ältere, klassische Schleifensyntax (Legacy).

loop_control: loop_var=...
Steuerung von Schleifenvariablen bei verschachtelten Loops.

until: / retries: / delay:
Wiederholung bis Bedingung erfüllt ist (Polling).

failed_when: / changed_when:
Eigene Logik für Fail-/Changed-Status definieren.

ignore_errors: true
Playbook bei Fehler in diesem Task nicht abbrechen.

↑ Nach oben

Handlers & Notifications

Nächstes Kapitel: Roles →

notify: restart nginx
Löst Handler nach einer Task-Änderung aus.

handlers:
Definition eines Handlers im Play (Modul wie ein normaler Task).

Handler laufen nur bei changed
Werden nur ausgeführt, wenn ein Task tatsächlich etwas geändert hat.

Handler laufen am Play-Ende
Standardmäßig gebündelt nach allen Tasks, nicht sofort.

meta: flush_handlers
Erzwingt sofortige Ausführung anstehender Handler.

↑ Nach oben

Roles

Nächstes Kapitel: Templates (Jinja2) →

ansible-galaxy init rollenname
Erstellt Standard-Verzeichnisstruktur einer Rolle.

roles/rollenname/tasks/main.yml
Haupt-Tasks der Rolle.

roles/rollenname/handlers/main.yml
Handler der Rolle.

roles/rollenname/defaults/main.yml
Standardwerte (niedrigste Variablenpriorität).

roles/rollenname/vars/main.yml
Feste Rollenvariablen (hohe Priorität).

roles/rollenname/templates/
Jinja2-Templates der Rolle.

roles/rollenname/files/
Statische Dateien der Rolle.

roles/rollenname/meta/main.yml
Metadaten und Rollen-Abhängigkeiten.

roles: - role: rollenname vars: {...}
Rolle im Playbook einbinden, mit Parametern.

↑ Nach oben

Templates (Jinja2)

Nächstes Kapitel: Ansible Vault →

{{ variable }}
Variable im Template ausgeben.

{% if condition %} ... {% endif %}
Bedingte Logik im Template.

{% for item in list %} ... {% endfor %}
Schleife im Template.

{{ var \| default('x') }}
Filter: Fallback-Wert setzen.

{{ var \| upper }} / {{ var \| lower }}
Filter: Groß-/Kleinschreibung.

{{ list \| join(',') }}
Filter: Liste zu String verbinden.

{{ var \| to_json }} / {{ var \| to_yaml }}
Filter: Datenformat-Konvertierung.

{{ var \| bool }} / {{ var \| int }}
Filter: Typumwandlung.

template: (Modul)
Rendert eine .j2-Datei und legt sie auf dem Zielsystem ab.

↑ Nach oben

Ansible Vault

Nächstes Kapitel: Tags →

ansible-vault create vars/secrets.yml
Neue verschlüsselte Datei anlegen.

ansible-vault edit vars/secrets.yml
Bestehende verschlüsselte Datei bearbeiten.

ansible-vault view vars/secrets.yml
Inhalt anzeigen, ohne dauerhaft zu entschlüsseln.

ansible-vault encrypt file.yml
Klartextdatei verschlüsseln.

ansible-vault decrypt file.yml
Datei dauerhaft entschlüsseln.

ansible-vault rekey file.yml
Vault-Passwort ändern.

ansible-vault encrypt_string 'wert' --name 'var'
Einzelwert verschlüsseln, inline nutzbar.

--ask-vault-pass
Passwort interaktiv abfragen.

--vault-password-file ~/.vault_pass
Passwort aus Datei/Skript lesen.

--vault-id label@prompt
Mehrere benannte Vault-Passwörter verwenden.

↑ Nach oben

Tags

Nächstes Kapitel: Ad-hoc-Befehle →

tags: ["deploy"]
Task oder Rolle mit Tag versehen.

ansible-playbook site.yml --tags "deploy"
Nur getaggte Tasks ausführen.

ansible-playbook site.yml --skip-tags "debug"
Bestimmte Tags überspringen.

--tags always
Spezial-Tag: läuft immer, unabhängig vom Filter.

ansible-playbook site.yml --list-tags
Alle verfügbaren Tags im Playbook anzeigen.

↑ Nach oben

Ad-hoc-Befehle

Nächstes Kapitel: Wichtige CLI-Flags →

ansible all -m ping
Erreichbarkeit aller Hosts testen.

ansible webservers -m command -a "uptime"
Befehl auf einer Gruppe ausführen.

ansible all -m setup
Facts aller Hosts abrufen.

ansible all -a "df -h" --become
Befehl mit Root-Rechten ausführen.

ansible webservers -m apt -a "name=nginx state=present" --become
Paketinstallation als Ad-hoc-Befehl.

ansible all -m copy -a "src=./f dest=/tmp/f"
Datei ad hoc kopieren.

ansible all -m user -a "name=test state=present"
Benutzer ad hoc anlegen.

↑ Nach oben

Wichtige CLI-Flags

Nächstes Kapitel: Best Practices →

-i inventory
Inventory-Datei/-Quelle angeben.

-l webservers
Ausführung auf Host-Gruppe/-Subset begrenzen.

--check
Dry-Run-Modus, keine echten Änderungen.

--diff
Zeigt Datei-/Konfigurationsdifferenzen.

-v, -vv, -vvv, -vvvv
Zunehmende Ausführlichkeit der Ausgabe (Debugging).

--become (-b)
Privilege Escalation aktivieren.

-K (--ask-become-pass)
Sudo-Passwort interaktiv abfragen.

-u username
SSH-Benutzer festlegen.

-e "key=value"
Extra-Variablen übergeben (höchste Priorität).

-f 10
Anzahl paralleler Forks (Hosts gleichzeitig).

--step
Interaktive Bestätigung pro Task.

↑ Nach oben

Best Practices

Zum ersten Kapitel →

Idempotenz sicherstellen
Module bevorzugen (statt command/shell), damit Playbooks wiederholt ausführbar bleiben.

command/shell nur wenn nötig
Kein natives Modul vorhanden? Dann creates/removes für Idempotenz nutzen.

Secrets immer per Vault
Niemals Klartext-Passwörter in Playbooks oder Repo.

Rollen statt monolithischer Playbooks
Bessere Wiederverwendbarkeit und Testbarkeit.

--check --diff vor Produktivlauf
Änderungen vorab validieren.

Namenskonvention für Tasks
Jeder Task erhält aussagekräftigen name: für Lesbarkeit und Logs.

Versionskontrolle (Git)
Für Playbooks/Rollen: Nachvollziehbarkeit und Rollback.

ansible-lint verwenden
Style- und Best-Practice-Checks vor Produktivbetrieb.

Handler statt direkter Restarts
Vermeidet unnötige/mehrfache Service-Neustarts.

Variablen in group_vars/host_vars
Statt hartcodiert: zentrale, umgebungsspezifische Konfiguration.

↑ Nach oben

Letzte Anpassung: ↑ zum Anfang