Einführung
Das Ausführen eines Playbooks ist nur ein Teil der Arbeit mit Ansible. Sie müssen auch die Task-Ausgaben untersuchen, die Zusammenfassung (Recap) verstehen und den endgültigen Status auf den verwalteten Knoten überprüfen.
In diesem Lab führen Sie ein Playbook mit ansible-navigator aus, erstellen verwaltete Dateien, führen das Playbook erneut aus und prüfen, ob der gewünschte Status korrekt erreicht wurde.
Projektkonfiguration vorbereiten
In diesem Schritt erstellen Sie ein Projekt, das der Navigator ohne zusätzliche Befehlszeilenoptionen ausführen kann. Die Konfiguration ähnelt dem vorherigen Lab, aber diesmal verwaltet das Playbook mehrere Dateien.
Erstellen Sie das Projektverzeichnis und wechseln Sie hinein.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory/group_vars,playbooks,files}
cd rhce-ansible
Erstellen Sie die Inventory- und Konfigurationsdateien.
cat > inventory/hosts <<'EOF'
[managed]
node1 ansible_connection=local
EOF
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
retry_files_enabled = False
interpreter_python = auto_silent
EOF
Das Inventory erstellt eine managed-Gruppe mit einem lokalen Host-Alias. Die Datei ansible.cfg legt dieses Inventory als Standard fest, sodass der Navigator das Playbook direkt aus dem Projektverzeichnis ohne zusätzliche Inventory-Flags ausführen kann.
cat > ansible-navigator.yml <<'EOF'
---
ansible-navigator:
mode: stdout
execution-environment:
enabled: false
playbook-artifact:
enable: false
EOF
Die Navigator-Einstellungen halten dieses Lab terminalorientiert. mode: stdout gibt die Task-Ausgabe direkt aus, die lokale Ausführung vermeidet die Container-Einrichtung, und die Deaktivierung von Artefakten sorgt dafür, dass im Projektverzeichnis nur die von Ihnen erstellten Dateien sichtbar sind.
Quellinhalt für das Playbook erstellen
In diesem Schritt erstellen Sie den Quellinhalt, den das Playbook bereitstellen soll. Wenn Sie Quelldateien innerhalb des Projekts aufbewahren, bleibt klar ersichtlich, was von Ansible verwaltet wird.
Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Projektverzeichnis zurück, damit sich relative Pfade auf das Ansible-Projekt beziehen.
cd /home/labex/project/rhce-ansible
Erstellen Sie eine Quelldatei.
cat > files/motd.txt <<'EOF'
RHCE Ansible navigator practice host
EOF
Dies ist der Quellinhalt: Es ist die Datei, die Ansible bereitstellen soll, nicht die endgültige verwaltete Kopie. Die Trennung von Quelldateien und generierter Ausgabe macht es einfacher zu erkennen, was das Playbook steuert.
Erstellen Sie eine Variable für den Zielverzeichnispfad in einer Inventory-Gruppenvariablendatei. Wenn Sie diese Datei unter inventory/group_vars ablegen, wird sie konsistent geladen, wenn Playbooks in einem Unterverzeichnis gespeichert sind.
mkdir -p inventory/group_vars
cat > inventory/group_vars/all.yml <<'EOF'
managed_dir: /home/labex/project/rhce-ansible/managed-state
EOF
managed_dir ist eine projektspezifische Variable. Durch die Definition in inventory/group_vars/all.yml kann das Playbook auf einen Namen verweisen, anstatt denselben absoluten Pfad in jeder Aufgabe zu wiederholen.
Playbook für den verwalteten Status schreiben
In diesem Schritt schreiben Sie ein Playbook, das ein Verzeichnis erstellt und eine Datei hineinkopiert. Das file-Modul verwaltet Verzeichnisse und Berechtigungen; das copy-Modul stellt den Dateiinhalt bereit. Da dieses Playbook im Verzeichnis playbooks liegt, zeigt der Quellpfad ../files/motd.txt zurück auf das files-Verzeichnis auf Projektebene.
Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Projektverzeichnis zurück, damit sich relative Pfade auf das Ansible-Projekt beziehen.
cd /home/labex/project/rhce-ansible
Erstellen Sie playbooks/manage-state.yml.
cat > playbooks/manage-state.yml <<'EOF'
---
- name: Manage local state with navigator
hosts: managed
gather_facts: false
tasks:
- name: Create managed state directory
ansible.builtin.file:
path: "{{ managed_dir }}"
state: directory
mode: '0755'
- name: Deploy managed message
ansible.builtin.copy:
src: ../files/motd.txt
dest: "{{ managed_dir }}/motd.txt"
mode: '0644'
EOF
Lesen Sie das Playbook der Reihe nach durch. Die erste Aufgabe stellt sicher, dass das Zielverzeichnis existiert, und die zweite Aufgabe kopiert die Quelldatei in dieses Verzeichnis. Die Ausdrücke {{ managed_dir }} werden durch den Wert ersetzt, der aus inventory/group_vars/all.yml geladen wurde.
Führen Sie eine Syntaxprüfung durch, bevor Sie das System ändern.
ansible-playbook playbooks/manage-state.yml --syntax-check
Diese Prüfung ist auch dann nützlich, wenn Sie das Playbook mit dem Navigator ausführen. Der Navigator übergibt das Playbook an Ansible; ein Playbook, das die normale Syntaxprüfung nicht besteht, wird also auch über den Navigator fehlschlagen.
Playbook mit Navigator ausführen
In diesem Schritt führen Sie das Playbook aus. Die Zusammenfassungszeile (Recap) ist wichtig: ok zählt die Aufgaben, die den gewünschten Status erreicht haben, changed zählt die Aufgaben, die etwas geändert haben, und failed=0 bedeutet, dass der Durchlauf erfolgreich abgeschlossen wurde.
Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Projektverzeichnis zurück, damit sich relative Pfade auf das Ansible-Projekt beziehen.
cd /home/labex/project/rhce-ansible
Führen Sie das Playbook aus.
ansible-navigator run playbooks/manage-state.yml
Überprüfen Sie die verwaltete Ausgabedatei direkt.
Die Zusammenfassung zeigt Ihnen, ob der Durchlauf abgeschlossen wurde, aber die verwaltete Datei beweist, dass der angeforderte Status existiert. Sie sollten denselben Text sehen, den Sie in files/motd.txt platziert haben.
cat managed-state/motd.txt
Erneut ausführen und Idempotenz überprüfen
In diesem Schritt führen Sie dasselbe Playbook erneut aus. Ein gut geschriebenes Playbook sollte sicher wiederholbar sein. Wenn die Datei bereits den gewünschten Inhalt und die richtigen Berechtigungen hat, sollte Ansible sie nicht erneut ändern müssen.
Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Projektverzeichnis zurück, damit sich relative Pfade auf das Ansible-Projekt beziehen.
cd /home/labex/project/rhce-ansible
Führen Sie das Playbook ein zweites Mal aus und speichern Sie die Ausgabe.
ansible-navigator run playbooks/manage-state.yml | tee navigator-second-run.txt
Suchen Sie nach der Zusammenfassung. Die genaue Formatierung kann variieren, aber die Zusammenfassung sollte weiterhin keine Fehler anzeigen.
Beim zweiten Durchlauf geht es um die Wiederholbarkeit. Ein sauberer Durchlauf mit failed=0 beweist, dass das Playbook erneut angewendet werden kann, ohne den verwalteten Status zu beschädigen; wenn zusätzlich changed=0 erscheint, zeigt dies auch, dass die Aufgaben bereits erfüllt waren.
grep -E 'failed=0' navigator-second-run.txt
Zusammenfassung
Sie haben ein Playbook mit ansible-navigator ausgeführt, die von ihm erstellte verwaltete Datei untersucht und das Playbook wiederholt, um sicherzustellen, dass es sauber erneut ausgeführt werden kann. Dies ist die grundlegende Ausführen-Untersuchen-Überprüfen-Schleife, die bei der gesamten Ansible-Automatisierung verwendet wird.



