Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Grundlagen der Ansible-Rollen

Die ganze Lektion steht hier zum Lesen. Erstellen Sie ein kostenloses Konto, um sie in einem Live-Lab auszuführen.

Ubuntu-VM-Lab11 Min. Lesezeit7 Befehle

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 tasks und defaults.
  • 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.

Befehl
ansible-galaxy role init --init-path /tmp/demo-roles hello

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Befehl
ls /tmp/demo-roles/hello

Hier 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.

Befehl
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.yml

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Befehl
ansible-playbook -i ~/roles-lab/inventory.ini /tmp/demo.yml

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Befehl
ansible-playbook -i ~/roles-lab/inventory.ini /tmp/demo.yml -e colour=red

Hier 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.

Befehl
ansible-playbook -i ~/roles-lab/inventory.ini /tmp/demo.yml | grep RUNNING

Hier 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.

Befehl
ansible-vault encrypt_string --vault-password-file ~/roles-lab/vault-password.txt demo --name demo_var

Hier 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.

Über dieses Lab und seinen Quellcode: Lab für Ansible-Rollen: eine Rolle, Handler und Vault in einer Ubuntu-VM

Sie unterrichten eine Klasse? Weisen Sie diese Lektionen Ihren Lernenden zu, mit Bewertung und einem Lab für jede lernende Person.