Fünf Server, fünf verschiedene Einrichtungen
Ein mittelständisches Unternehmen betreibt fünf Webserver. Verschiedene Personen haben sie in zwei Jahren von Hand eingerichtet. Einer antwortet langsam, und niemand weiß warum.
Die Lösung: Die Einrichtung steht in einer Datei, und ein Werkzeug gleicht jeden Rechner damit ab. Fällt ein Server aus, bauen Sie in Minuten einen gleichen neu auf.
Am Ende dieser Lektion
Notiz
Ich kann ein Playbook schreiben, das einen Rechner einrichtet und beim zweiten Lauf nichts mehr ändert.
Schlüsselbegriffe
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Playbook | eine Datei, die beschreibt, wie Rechner eingerichtet sein sollen | |
| Task | ein einzelner Schritt in einem Playbook | |
| Modul | ein eingebautes Werkzeug, das ein Task benutzt | ansible.builtin.file |
| Inventar | die Liste der Rechner, die verwaltet werden | |
| Idempotent | gefahrlos wiederholbar, weil der zweite Lauf nichts ändert | |
| Vorlage | eine Datei mit Lücken, die Variablen füllen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Playbook sagt, wie der Rechner sein soll
Ein Playbook sagt nicht "lege einen Ordner an". Es sagt "dieser Ordner muss existieren".
Das Werkzeug sieht sich den Rechner an, erkennt, was schon stimmt, und behebt nur, was nicht stimmt. Sie beschreiben den Zielzustand. Die Schritte findet das Werkzeug.
Diese VM enthält einen Projektordner. Wechseln Sie hinein und lesen Sie die Dateien. Die Runs teilen sich ein Terminal, der Wechsel bleibt also bestehen.
In den Projektordner wechseln
cd ~/ansible-labHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Playbook lesen
cat site.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Inventar lesen
cat 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.
Zweimal ausführen, nichts ändert sich mehr
Ein Task ist idempotent, wenn er beliebig oft laufen darf und stets dasselbe Ergebnis bleibt. Der erste Lauf leistet die Arbeit. Der zweite findet nichts mehr zu tun.
Probieren Sie es aus. Der nächste Run schreibt ein kleines eigenes Playbook, practice.yml. Es legt einen Ordner und eine Notiz in /tmp an. Es liegt neben site.yml und lässt es in Ruhe.
Ein eigenes Übungs-Playbook schreiben
printf '%s\n' '- hosts: localhost' ' gather_facts: false' ' vars:' ' team: Finanzen' ' tasks:' ' - name: Notizordner anlegen' ' ansible.builtin.file:' ' path: /tmp/notizen-demo' ' state: directory' ' - name: Notiz schreiben' ' ansible.builtin.copy:' ' dest: /tmp/notizen-demo/notiz.txt' ' content: "Hallo {{ team }}"' > practice.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Zum ersten Mal ausführen
ansible-playbook practice.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Noch einmal ausführen
ansible-playbook practice.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 häufiger Irrtum
Warnung
Viele halten ein Playbook für ein Shell-Skript in YAML. Ein Skript führt jeden Schritt jedes Mal aus. Ein Modul prüft zuerst und handelt nur, wenn es muss. Nehmen Sie das Modul shell nur, wenn es kein anderes gibt, denn es meldet bei jedem Lauf eine Änderung.
Eine Vorlage füllt Lücken aus Variablen
Eine Vorlage ist eine Datei mit Lücken wie {{ site_name }}. Beim Erzeugen füllt eine Variable jede Lücke.
Ändern Sie die Variable, ändert sich die Datei, ganz ohne Handarbeit. Eine Variable setzen Sie auf der Kommandozeile mit -e.
Lesen Sie zuerst die Vorlage des Labs. Ändern Sie dann das Team im Übungs-Playbook.
Die Vorlage des Labs lesen
cat templates/welcome.txt.j2Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Mit einem anderen Team ausführen
ansible-playbook practice.yml -e team=SupportHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Probelauf: Was würde sich zurückändern?
ansible-playbook practice.yml --check --diffHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Notiz lesen
cat /tmp/notizen-demo/notiz.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Weiterführend: ein Shell-Task, der immer ändert
Schreiben Sie mit printf ein Playbook shell.yml mit einem einzigen Task. Er nutzt ansible.builtin.shell und führt date > /tmp/notizen-demo/zeitstempel.txt aus. Führen Sie es zweimal aus und lesen Sie jedes Mal die Zusammenfassung.
Ergänzen Sie dann unter dem Task args: mit creates: /tmp/notizen-demo/zeitstempel.txt. Führen Sie es wieder zweimal aus. Erklären Sie, was creates am Ergebnis ändert.