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

Eine Ansible-Rolle und ihre Variablen

Nach dieser Lektion: Ich kann eine Rolle aufbauen und sagen, welche Variable gewinnt.

Lektion, 60 Min.12 BefehleLab für Ansible-Rollen: eine Rolle, Handler und Vault in einer Ubuntu-VM

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

BegriffWas er bedeutetBeispiel
Rolleein Playbook, das in feste Ordner zerlegt istroles/ebenen
defaultsder Ordner mit den schwächsten Variablen, die jeder überschreiben darf
varsder Ordner mit den festen Variablen der Rolle
Vorrangdie Regel, welche Variable gewinnt, wenn zwei denselben Namen haben
Playein Abschnitt eines Playbooks: für welche Rechner welche Aufgaben laufen
Inventardie Liste der Rechner, die Ansible verwaltetinventory.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

OrdnerWas darin stehtBeispiel
tasksDie Schritte der RolleDatei anlegen, Paket installieren
defaultsSchwache Standardwerteport: 8080
varsFeste Werte der Rolleordner: /etc/dienst
templatesVorlagen, in die Variablen kommenliste.j2
handlersAufgaben, die nur auf Zuruf laufenDienst neu laden
metaWer die Rolle gemacht hatauthor, description

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Einen eigenen Ordner anlegen

Befehl
mkdir -p ~/rolle-demo

Hier 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

Befehl
cd ~/rolle-demo

Hier 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

Befehl
ansible-galaxy role init --init-path ~/rolle-demo/roles ebenen

Hier 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

Befehl
find roles/ebenen -name main.yml | sort

Hier 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

StufeWo sie stehtStärke
defaultsroles/ebenen/defaults/main.yml1, am schwächsten
playvars: im Playbook2
rolleroles/ebenen/vars/main.yml3
extra-e auf der Kommandozeile4, am stärksten

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Drei Standardwerte schreiben

Befehl
printf '%s\n' 'a: defaults' 'b: defaults' 'c: defaults' > roles/ebenen/defaults/main.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.

Einen festen Wert der Rolle schreiben

Befehl
printf '%s\n' 'c: rolle' > roles/ebenen/vars/main.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.

Eine Aufgabe schreiben, die alle drei zeigt

Befehl
printf '%s\n' '- name: Werte zeigen' '  ansible.builtin.debug:' '    msg: "a={{ a }} b={{ b }} c={{ c }}"' > roles/ebenen/tasks/main.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.

Ein Playbook mit zwei Variablen im Play

Befehl
printf '%s\n' '- hosts: web1' '  gather_facts: false' '  vars:' '    b: play' '    c: play' '  roles:' '    - ebenen' > ebenen.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.

Ein Inventar mit einem Rechner schreiben

Befehl
printf '%s\n' '[web]' 'web1 ansible_connection=local' > inventory.ini

Hier 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

Befehl
ansible-playbook -i inventory.ini ebenen.yml | grep msg

Hier 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

Befehl
ansible-playbook -i inventory.ini ebenen.yml -e a=extra -e b=extra -e c=extra | grep msg

Hier 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

Befehl
ansible-playbook -i inventory.ini ebenen.yml -e a=extra | grep msg

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

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

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.