Drei Räume, ein Weg, sie einzurichten
Eine Schule richtet drei Computerräume ein. Das erste Playbook ist eine lange Datei, an der alle herumändern, und im Juni traut sich niemand mehr heran. Eine Rolle ist diese Datei, aufgeteilt in feste Ordner: Ein Teil der Einrichtung lässt sich wiederverwenden, teilen und für sich allein ändern.
Am Ende dieser Lektion
Notiz
Ich kann sagen, was eine Rolle enthält und warum ein Handler nur einmal läuft.
Schlüsselwörter
- Rolle: ein Playbook, aufgeteilt in feste Ordner wie
tasksunddefaults. - Variable: ein Name, der einen Wert hält, den eine Aufgabe verwenden kann.
- Rangfolge: die Reihenfolge, die entscheidet, welche Variable gewinnt, wenn zwei denselben Namen haben.
- Handler: eine Aufgabe, die nur läuft, wenn eine andere sie dazu auffordert.
- Vault: Ansibles Weg, eine Datei verschlüsselt aufzubewahren.
Zum Start: Was du schon weißt
Notiz
Antworte im Kopf. 1. Was ist ein Playbook? 2. Was heißt es, dass ein Playbook idempotent ist? 3. Was sagt der Name einer Aufgabe wie ansible.builtin.file? Alle drei hast du im Lab Grundlagen von Ansible gelernt.
Bevor du anfängst
Notiz
Klicke oben in der Leiste dieser Lektion auf Lab starten. Dieses Lab ist eine ganze Ubuntu-Maschine nur für dich, mit installiertem Ansible, und braucht deshalb etwas länger zum Starten als ein Container. Jede Schaltfläche Ausführen tippt ihren Befehl ins Terminal der Maschine, einen nach dem anderen in derselben Sitzung. Wenn eine meldet, dass die Maschine noch startet, warte ein paar Sekunden und klicke noch einmal. Um zuzusehen oder eigene Befehle zu tippen, klicke in der Leiste auf Terminal öffnen.
Eine Rolle ist ein Ordner mit fester Gliederung
ansible-galaxy role init legt die Ordner einer leeren Rolle an und funktioniert ohne Netz. Hier legt es eine Rolle namens hello in /tmp an, nicht in deinem Lab. Die Liste zeigt die Ordner. In tasks steht, was die Rolle tut, in defaults und vars stehen ihre Variablen. templates und files enthalten, was sie kopiert, handlers die Aufgaben, die auf Aufforderung warten, und meta sagt, wer sie gemacht hat. tests und README.md sind Beigaben.
ansible-galaxy role init --init-path /tmp/demo-roles helloHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
ls /tmp/demo-roles/helloHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Prüfe dich
Tipp
Wo legt eine Rolle einen Wert ab, den ein Playbook ändern können soll? Antwort: in defaults, dem schwächsten Platz für eine Variable. Ein Wert, den niemand ändern soll, gehört in vars.
Derselbe Name, zwei Werte: Einer gewinnt
Eine Variable kann an vielen Stellen gesetzt werden, und die Reihenfolge entscheidet. Die defaults einer Rolle verlieren gegen fast alles. Die vars eines Plays schlagen sie, die eigenen vars der Rolle schlagen das Play, und ein Wert, der mit -e in der Befehlszeile übergeben wird, schlägt alles. Dieses Playbook, das nach /tmp geschrieben wird, setzt colour im Play auf blue und hat zwei Aufgaben, die eine Datei anlegen und einen Handler benachrichtigen. Führe es aus und dann noch einmal mit -e colour=red: Die Zusammenfassung zeigt beide Male changed=2, weil die Dateien jedes Mal berührt werden, und die ausgegebene Farbe folgt der Reihenfolge.
printf -- '- hosts: web1\n gather_facts: false\n vars:\n colour: blue\n tasks:\n - ansible.builtin.debug:\n var: colour\n - ansible.builtin.file:\n path: /tmp/demo-a\n state: touch\n notify: Say hello\n - ansible.builtin.file:\n path: /tmp/demo-b\n state: touch\n notify: Say hello\n handlers:\n - name: Say hello\n ansible.builtin.debug:\n msg: hello\n' > /tmp/demo.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
ansible-playbook -i ~/roles-lab/inventory.ini /tmp/demo.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
ansible-playbook -i ~/roles-lab/inventory.ini /tmp/demo.yml -e colour=redHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Prüfe dich
Tipp
Warum wurde die Farbe red? Antwort: Ein Wert, der mit -e übergeben wird, hat die höchste Rangfolge und schlägt deshalb die vars des Plays.
Ein häufiger Fehler
Warnung
Viele glauben, ein Handler laufe jedes Mal, wenn eine Aufgabe ihn auffordert. Ein Handler wartet bis zum Ende des Plays und läuft dann einmal, egal wie viele Aufgaben ihn aufgefordert haben, und nur, wenn eine davon wirklich etwas geändert hat. Hat sich nichts geändert, läuft er gar nicht.
Ein Handler läuft einmal, auch wenn viele Aufgaben ihn rufen
Im Playbook sagen beide Aufgaben notify: Say hello. Die Ausgabe zeigt zwei Aufgaben mit changed und dann eine einzige Zeile RUNNING HANDLER. Dieser Befehl führt das Playbook noch einmal aus und behält nur die Zeilen mit RUNNING: Es ist eine. Ansible kann die wartenden Handler auch mitten in einem Play ausführen, mit einer Aufgabe namens flush_handlers, die eine Rolle benutzt, wenn eine spätere Aufgabe die Arbeit des Handlers braucht.
ansible-playbook -i ~/roles-lab/inventory.ini /tmp/demo.yml | grep RUNNINGHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Prüfe dich
Tipp
Drei Aufgaben ändern etwas und benachrichtigen alle denselben Handler. Wie oft läuft der Handler? Antwort: einmal, am Ende des Plays, außer er wurde mit flush_handlers früher ausgeführt.
Vault hält einen Wert verschlüsselt
ansible-vault encrypt_string verschlüsselt einen Wert mit einem Passwort. Das Passwort steht in einer Datei: Dieses Lab hat vault-password.txt, ein falsches Passwort zum Üben. Die Ausgabe beginnt mit demo_var: !vault | und dann mit der Kopfzeile $ANSIBLE_VAULT;1.1;AES256, der Rest ist unlesbar. Diesen Block kannst du in eine Variablendatei legen. Auch eine ganze Datei lässt sich verschlüsseln, mit ansible-vault create oder encrypt, und view zeigt sie wieder an.
ansible-vault encrypt_string --vault-password-file ~/roles-lab/vault-password.txt demo --name demo_varHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Abschlusscheck
Tipp
Antworte, ohne zurückzublättern. 1. Welcher Ordner einer Rolle enthält die Aufgaben? 2. Welche Variable gewinnt, die aus defaults oder die mit -e übergebene? 3. Wie oft läuft ein Handler, wenn zwei Aufgaben ihn benachrichtigen? 4. Was sagt die Kopfzeile $ANSIBLE_VAULT über eine Datei? Antworten: tasks; die mit -e übergebene; einmal; dass sie verschlüsselt ist. Jetzt das Lab machen: Lies README.md in deinem Home-Ordner mit cat README.md im Terminal.
Für Lehrkräfte
Tipp
Diese Lektion ist ein kleines Beispiel für eine Lektion, die in einem Lab durchgeführt wird: Die Schritte und die Schaltflächen Ausführen sind die Lektion, und das Lab ist die Kopie jeder lernenden Person. Sie läuft in einem VM-Lab: Jede lernende Person hat eine eigene Ubuntu-Maschine mit Ansible, und eine Schaltfläche Ausführen tippt in ihr Terminal und zeigt, was ausgegeben wurde. Kernpunkte: 1. Eine Rolle ist ein Playbook in festen Ordnern. 2. Wenn zwei Variablen denselben Namen haben, entscheidet die Rangfolge, und -e ist die stärkste. 3. Ein Handler läuft am Ende einmal, egal wie viele Aufgaben ihn benachrichtigen. 4. Vault verschlüsselt einen Wert oder eine Datei, und das Passwort wird getrennt aufbewahrt. Häufiger Fehler: zu glauben, ein Handler laufe bei jeder Benachrichtigung. Material: das Lab und ein Browser. Tipp: Fragen Sie die Klasse vor dem zweiten Lauf, welche Farbe erscheint und warum. Das Lab selbst hat einen Check, der die Rolle ausführt und die Dateien bewertet, die sie erzeugt. Kopieren Sie die Lektion in Ihr eigenes Modul und ändern Sie sie, oder bauen Sie mit dem Menü Lab im Lektions-Editor eine neue von Grund auf.