Einführung
Im vorherigen Lab haben Sie einen einzelnen Befehl (ansible ... -m ping) ausgeführt. Das ist für schnelle Prüfungen nützlich. Die eigentliche Stärke von Ansible liegt jedoch in Playbooks.
Ein Playbook ist eine Textdatei mit Anweisungen zur Automatisierung. Im Gegensatz zu einem normalen Shell-Skript beschreibt ein Playbook normalerweise den gewünschten Endzustand und nicht jeden einzelnen technischen Befehlsschritt.
Dieses Modell des gewünschten Zustands gehört zu den wichtigsten Konzepten von Ansible. Statt exakt vorzugeben, welche Befehle ausgeführt werden sollen, beschreiben Sie normalerweise die Bedingung, die nach Abschluss der Automatisierung erfüllt sein soll.
Playbooks werden in YAML geschrieben, einem für Menschen gut lesbaren Datenformat. Dadurch lassen sich Automatisierungen leichter überprüfen, gemeinsam nutzen und warten.
In diesem Lab schreiben Sie ein Playbook, das einen Server in einen Webserver verwandelt:
- Sie installieren Nginx, einen weit verbreiteten Webserver.
- Sie stellen sicher, dass der Nginx-Dienst läuft.
Anschließend führen Sie dieses Playbook aus, um Ihren lokalen Rechner zu konfigurieren.
Die Playbook-Datei erstellen
Zuerst erstellen Sie die Playbook-Datei. Das Haupt-Playbook heißt üblicherweise site.yml.
Stellen Sie zunächst sicher, dass Sie sich im Projektverzeichnis befinden:
cd ~/project
Erstellen und öffnen Sie nun mit dem Texteditor nano eine neue Datei namens site.yml:
nano site.yml
Geben Sie ganz oben in der Datei drei Bindestriche ein. Damit markieren Sie den Beginn eines YAML-Dokuments.
---
Wichtige YAML-Regeln:
- Einrückungen sind entscheidend! Verwenden Sie Leerzeichen, normalerweise 2, und keine Tabulatoren. Bei falschen Einrückungen meldet Ansible einen Fehler.
- Speichern Sie die Datei regelmäßig. Drücken Sie in
nanoCtrl+Ound anschließendEnter, um zu speichern. Lassen Sie die Datei für die nächsten Schritte geöffnet.
Das Play definieren
Ein Playbook besteht aus einem oder mehreren „Plays“. Ein Play ordnet eine Gruppe von Hosts den Aufgaben zu, die auf diesen Hosts ausgeführt werden sollen.
Durch diese Zuordnung von Hostgruppe und Aufgaben kann ein Playbook von einem einzelnen Rechner auf viele Rechner skaliert werden. Die Logik bleibt an einer Stelle, während das Inventory festlegt, wo sie angewendet wird.
Fügen Sie in Ihrer Datei site.yml unterhalb von --- die folgenden Zeilen ein:
---
- hosts: webservers
become: yes
Den Code verstehen:
- hosts: webservers: Damit weisen Sie Ansible an: „Führe diese Anweisungen auf jedem Server aus, der in meinem Inventory in der Gruppe[webservers]aufgeführt ist.“become: yes: Das entspricht der Verwendung vonsudovor einem Befehl. Ansible erhält dadurch Root-Rechte, die für die Installation von Software benötigt werden.
Achten Sie darauf, dass - hosts ganz am Anfang der Zeile beginnt. Vor dem Bindestrich dürfen keine Leerzeichen stehen.
Speichern Sie die Datei (Ctrl+O, Enter).
Eine Installationsaufgabe hinzufügen
Jetzt legen Sie fest, was Ansible tun soll. Dazu fügen Sie eine Liste von Aufgaben hinzu. Jede Aufgabe verwendet ein Modul.
Da wir Ubuntu verwenden, nutzen wir das Modul apt, um Nginx zu installieren.
Ändern Sie site.yml so, dass die Datei wie folgt aussieht:
---
- hosts: webservers
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
Den Code verstehen:
tasks:: Beginnt die Liste der Aufgaben.- name: ...: Eine Beschreibung für Menschen. Diese Beschreibung wird beim Ausführen des Playbooks auf dem Bildschirm angezeigt.apt:: Ruft das Modulaptauf.name: nginx: Gibt das gewünschte Paket an.state: present: Das ist der entscheidende deklarative Teil. Sie sagen nicht „Installiere es jetzt“, sondern „Stelle sicher, dass es vorhanden ist“.- Fehlt das Paket, installiert Ansible es.
- Ist es bereits vorhanden, unternimmt Ansible nichts. Diese Eigenschaft heißt Idempotenz.
Idempotenz ist ein zentraler Bestandteil der Konfigurationsverwaltung. Sie bedeutet, dass Sie dieselbe Automatisierung sicher wiederholt ausführen können und dabei konsistente Ergebnisse erhalten, statt doppelte Seiteneffekte zu erzeugen.
Überprüfen Sie die Einrückungen:
tasksmuss auf derselben Ebene wiebecomestehen.- namemuss eingerückt sein (2 Leerzeichen).aptmuss auf derselben Ebene wienamestehen.nameundstatemüssen unterhalb vonaptweiter eingerückt sein.
Speichern Sie die Datei.
Eine Dienstaufgabe hinzufügen
Nur die Software zu installieren reicht nicht aus. Sie müssen außerdem sicherstellen, dass das Programm läuft. Dafür verwenden wir das Modul service.
Dieses Beispiel zeigt außerdem, wie Playbooks den Systemzustand in mehreren Ebenen beschreiben. Eine Aufgabe stellt sicher, dass das Paket vorhanden ist, eine weitere, dass der Dienst aktiv ist. Zusammen beschreiben sie den Zielzustand, den der Host erreichen soll.
Fügen Sie Ihrer Aufgabenliste in site.yml eine zweite Aufgabe hinzu:
---
- hosts: webservers
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
- name: Start nginx
service:
name: nginx
state: started
Den Code verstehen:
service:: Dieses Modul verwaltet Systemdienste, ähnlich wiesystemctl.state: started: Stellt sicher, dass der Dienst läuft. Wenn er gestoppt ist, startet Ansible ihn.
Wichtig: Der Bindestrich - der zweiten Aufgabe muss genau auf derselben Einrückungsebene stehen wie der Bindestrich der ersten Aufgabe.
Speichern Sie die Datei und beenden Sie nano (Ctrl+X, dann Y, dann Enter).
Das Playbook ausführen
Jetzt kommt der praktische Teil: Sie führen Ihre Automatisierung aus!
Dazu verwenden Sie den Befehl ansible-playbook. Geben Sie an, welches Playbook (site.yml) ausgeführt und welches Inventory (hosts.ini) verwendet werden soll.
Führen Sie diesen Befehl aus:
ansible-playbook site.yml -i hosts.ini
Beobachten Sie die Ausgabe. Sie sehen Folgendes:
- Gathering Facts: Ansible prüft zunächst die Systeminformationen.
- Install nginx: Der Status wird als
changed(gelb) angezeigt, wenn das Paket installiert werden musste. - Start nginx: Der Status wird als
changed(gelb) angezeigt, wenn der Dienst gestartet werden musste.
Wenn Sie exakt denselben Befehl ein zweites Mal ausführen, ist die Ausgabe grün und enthält ok. Das bedeutet: „Alles befindet sich bereits im gewünschten Zustand, daher wurde nichts geändert.“
Prüfen Sie abschließend manuell, ob Nginx läuft:
systemctl status nginx
Sie sollten Active: active (running) sehen.
Zusammenfassung
In diesem Lab haben Sie Ihr erstes Ansible-Playbook geschrieben. Sie haben Folgendes gelernt:
- YAML-Syntax: Wie Sie ein Playbook mit korrekten Einrückungen strukturieren.
- Plays: Wie Sie mit
hostsfestlegen, wo Aufgaben ausgeführt werden, und mitbecomedie Verwendung vonsudoaktivieren. - Aufgaben: Wie Sie Module wie
aptzur Installation undservicezum Starten eines Dienstes verwenden. - Idempotenz: Warum das mehrfache Ausführen eines Playbooks sicher ist und stabile Ergebnisse liefert.
Sie sind damit von der manuellen Ausführung einzelner Befehle zur Definition von „Infrastructure as Code“ übergegangen.


