Wie führt man Teile eines Playbooks aus?
Mit Tags und der Option --limit führt Ansible nur einen Teil einer Rolle aus: bestimmte Aufgaben oder bestimmte Rechner. Mit Ansible Vault bleibt ein Geheimnis wie ein Passwort verschlüsselt, auch wenn die Dateien in Git liegen.
Beides braucht jedes echte Projekt. Eine große Rolle läuft nicht jedes Mal ganz, und ein Passwort im Klartext in einem Repository ist ein Leck.
Am Ende dieser Lektion
Notiz
Ich kann einen Teil einer Rolle ausführen und ein Geheimnis aus dem Klartext heraushalten.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Tag | ein Etikett an einer Aufgabe, nach dem man auswählen kann | tags: [konfig] |
| Limit | die Beschränkung eines Laufs auf bestimmte Rechner | --limit web1 |
| Ansible Vault | das Werkzeug, das Dateien oder Werte verschlüsselt | |
| Vault-Passwort | das Passwort, das eine Vault-Datei öffnet | |
| Klartext | Text, den jede Person lesen kann, die die Datei öffnet | |
| Verschlüsselt | unlesbar ohne das passende Passwort |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Einen eigenen Ordner anlegen
mkdir -p ~/rolle-demoHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
In den Ordner wechseln
cd ~/rolle-demoHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Inventar mit zwei Gruppen schreiben
printf '%s\n' '[web]' 'web1 ansible_connection=local' '[reserve]' 'reserve1 ansible_connection=local' > inventory.iniHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Tag ist ein Etikett an einer Aufgabe
An jede Aufgabe können Sie Tags hängen. Mit --tags führt Ansible nur Aufgaben mit diesem Tag aus. Mit --skip-tags lässt es die Aufgaben mit diesem Tag weg.
Zwei Namen sind besonders. Eine Aufgabe mit always läuft immer, außer Sie überspringen genau diesen Tag. Eine Aufgabe mit never läuft nur, wenn Sie ihren anderen Tag ausdrücklich wählen.
Ein Playbook mit vier Aufgaben schreiben
printf '%s\n' '- hosts: web' ' gather_facts: false' ' tasks:' ' - name: Ordner anlegen' ' ansible.builtin.file:' ' path: /tmp/tagdemo' ' state: directory' ' tags: [ordner]' ' - name: Konfiguration schreiben' ' ansible.builtin.copy:' ' content: "port=8080\n"' ' dest: /tmp/tagdemo/dienst.conf' ' tags: [konfig]' ' - name: Hinweis zeigen' ' ansible.builtin.debug:' ' msg: Ich laufe immer' ' tags: [always]' ' - name: Aufraeumen' ' ansible.builtin.file:' ' path: /tmp/tagdemo' ' state: absent' ' tags: [never, aufraeumen]' > tags.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Auflisten, was ohne Angabe liefe
ansible-playbook -i inventory.ini tags.yml --list-tasksHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Auflisten, was mit --tags konfig liefe
ansible-playbook -i inventory.ini tags.yml --tags konfig --list-tasksHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Beispiel: welche Aufgaben bei welchem Aufruf laufen
| Aufruf | Ordner anlegen | Konfiguration schreiben | Hinweis zeigen | Aufraeumen |
|---|---|---|---|---|
| ohne Angabe | läuft | läuft | läuft | läuft nicht (never) |
| --tags konfig | läuft nicht | läuft | läuft (always) | läuft nicht |
| --skip-tags konfig | läuft | läuft nicht | läuft | läuft nicht (never) |
| --tags aufraeumen | läuft nicht | läuft nicht | läuft (always) | läuft |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Nur die Konfiguration ausführen
ansible-playbook -i inventory.ini tags.yml --tags konfig | grep -o "failed=[0-9]"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ordner und Konfiguration ausführen
ansible-playbook -i inventory.ini tags.yml --tags ordner,konfig | grep -o -E "changed=[0-9]|failed=[0-9]"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele wählen nur das Tag der Aufgabe, die sie ändern wollen. Fehlt dann, was eine übersprungene Aufgabe angelegt hätte, scheitert der Lauf. Im Beispiel braucht die Konfiguration den Ordner. Wählen Sie die Tags, von denen die Aufgabe abhängt, gleich mit.
Mit --limit beschränken Sie einen Lauf auf Rechner
Ein Play nennt die Rechner, für die es gilt, hier die Gruppe web. Mit --limit name schränken Sie einen Lauf weiter ein. Es bleiben nur Rechner, die das Play nennt und das Limit.
Ein Limit auf einen Rechner außerhalb des Plays lässt nichts übrig. --list-hosts zeigt, welche Rechner es träfe.
Mit --limit web1
ansible-playbook -i inventory.ini tags.yml --limit web1 --list-hosts | grep -o "hosts ([0-9]*)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Mit --limit reserve1
ansible-playbook -i inventory.ini tags.yml --limit reserve1 --list-hosts | grep -o "hosts ([0-9]*)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ansible Vault verschlüsselt Dateien mit einem Passwort
Ein Passwort im Klartext in einer Datei, die in Git liegt, kann jede Person lesen, die das Repository sieht. Ansible Vault verschlüsselt die Datei mit einem Vault-Passwort. In Git liegt dann nur Zeichensalat.
Die Datei beginnt mit der Zeile $ANSIBLE_VAULT;1.1;AES256. Das Vault-Passwort selbst gehört nie ins Repository. Hier liegt es zur Übung in einer Datei.
Ein Übungs-Passwort in eine Datei legen
echo uebungspasswort > pw.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Datei mit einem erfundenen Wert schreiben
printf '%s\n' 'db_passwort: Sommer-2026-xyz' > geheim.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Datei verschlüsseln, ohne die Meldung
ansible-vault encrypt --vault-password-file pw.txt geheim.yml > /dev/nullHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die erste Zeile der Datei lesen
head -n 1 geheim.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Mit dem Passwort ansehen
ansible-vault view --vault-password-file pw.txt geheim.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Playbook schreiben, das die Datei lädt
printf '%s\n' '- hosts: web1' ' gather_facts: false' ' vars_files:' ' - geheim.yml' ' tasks:' ' - name: Laenge zeigen' ' ansible.builtin.debug:' ' msg: "Das Passwort hat {{ db_passwort | length }} Zeichen"' > vault.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ohne Passwort ausführen
ansible-playbook -i inventory.ini vault.yml 2>&1 | grep -m 1 -o "no vault secrets found"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Mit Passwort ausführen
ansible-playbook -i inventory.ini vault.yml --vault-password-file pw.txt | grep msgHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.