Was ist eine Ansible-Rolle?
Eine Ansible-Rolle ist ein Playbook, das in feste Ordner zerlegt ist. So lässt sich ein Teil der Einrichtung wiederverwenden, teilen und für sich testen.
Ein Playbook, das über Jahre wächst, ist irgendwann eine lange Datei, die niemand mehr anfassen will. Mit Rollen ändern Sie ein Stück und lassen den Rest in Ruhe.
Am Ende dieser Lektion
Notiz
Ich kann eine Rolle aufbauen und sagen, welche Variable gewinnt.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Rolle | ein Playbook, das in feste Ordner zerlegt ist | roles/ebenen |
| defaults | der Ordner mit den schwächsten Variablen, die jeder überschreiben darf | |
| vars | der Ordner mit den festen Variablen der Rolle | |
| Vorrang | die Regel, welche Variable gewinnt, wenn zwei denselben Namen haben | |
| Play | ein Abschnitt eines Playbooks: für welche Rechner welche Aufgaben laufen | |
| Inventar | die Liste der Rechner, die Ansible verwaltet | inventory.ini |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Rolle hat einen festen Aufbau
Das Werkzeug ansible-galaxy role init legt die Ordner einer leeren Rolle an, ganz ohne Netz. In tasks stehen die Schritte, in defaults und vars die Variablen.
Dazu kommen templates und files für Dateien, die kopiert werden, handlers für Aufgaben, die nur auf Zuruf laufen, und meta für die Angaben zur Rolle.
Beispiel: wofür welcher Ordner einer Rolle da ist
| Ordner | Was darin steht | Beispiel |
|---|---|---|
| tasks | Die Schritte der Rolle | Datei anlegen, Paket installieren |
| defaults | Schwache Standardwerte | port: 8080 |
| vars | Feste Werte der Rolle | ordner: /etc/dienst |
| templates | Vorlagen, in die Variablen kommen | liste.j2 |
| handlers | Aufgaben, die nur auf Zuruf laufen | Dienst neu laden |
| meta | Wer die Rolle gemacht hat | author, description |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Einen eigenen Ordner anlegen
mkdir -p ~/rolle-demoHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
In den Ordner wechseln
cd ~/rolle-demoHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Rolle mit dem Werkzeug anlegen
ansible-galaxy role init --init-path ~/rolle-demo/roles ebenenHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Dateien main.yml suchen
find roles/ebenen -name main.yml | sortHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Welche Variable gewinnt, wenn zwei denselben Namen haben?
Eine Variable kann an mehreren Stellen stehen. Ansible hat eine feste Reihenfolge, den Vorrang. Die Standardwerte der Rolle sind am schwächsten. Es folgen die Variablen des Plays, dann die vars der Rolle. Am stärksten ist -e auf der Kommandozeile.
Ansible kennt noch mehr Stellen, etwa das Inventar. Für den Anfang genügen diese vier.
Beispiel: die vier Stufen von schwach nach stark
| Stufe | Wo sie steht | Stärke |
|---|---|---|
| defaults | roles/ebenen/defaults/main.yml | 1, am schwächsten |
| play | vars: im Playbook | 2 |
| rolle | roles/ebenen/vars/main.yml | 3 |
| extra | -e auf der Kommandozeile | 4, am stärksten |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Drei Standardwerte schreiben
printf '%s\n' 'a: defaults' 'b: defaults' 'c: defaults' > roles/ebenen/defaults/main.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Einen festen Wert der Rolle schreiben
printf '%s\n' 'c: rolle' > roles/ebenen/vars/main.ymlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Aufgabe schreiben, die alle drei zeigt
printf '%s\n' '- name: Werte zeigen' ' ansible.builtin.debug:' ' msg: "a={{ a }} b={{ b }} c={{ c }}"' > roles/ebenen/tasks/main.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 Playbook mit zwei Variablen im Play
printf '%s\n' '- hosts: web1' ' gather_facts: false' ' vars:' ' b: play' ' c: play' ' roles:' ' - ebenen' > ebenen.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 Inventar mit einem Rechner schreiben
printf '%s\n' '[web]' 'web1 ansible_connection=local' > 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.
Das Playbook ausführen
ansible-playbook -i inventory.ini ebenen.yml | grep msgHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Alle drei mit -e überschreiben
ansible-playbook -i inventory.ini ebenen.yml -e a=extra -e b=extra -e c=extra | grep msgHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Nur a mit -e überschreiben
ansible-playbook -i inventory.ini ebenen.yml -e a=extra | grep msgHier 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 Fehler
Warnung
Viele denken, eine Variable im Play sei stärker als die der Rolle, weil das Play außen steht. Das stimmt nicht. Die vars der Rolle schlagen die Variablen des Play. Wer einen Wert ändern lassen will, legt ihn deshalb in defaults.
Weiterführend
Verschieben Sie c: rolle aus vars nach defaults und führen Sie das Playbook noch einmal aus. Jetzt gewinnt das Play. Sie sehen, wie der Ort eines Werts seine Stärke bestimmt.
Ihr Ordner ~/rolle-demo gehört Ihnen. Das Projekt roles-lab des Labs bleibt unberührt, dort bauen Sie Ihre eigene Rolle.