In diesem Schritt lernen Sie, wie Sie Variablen in einem Ansible-Playbook verwenden. Variablen sind entscheidend, um Ihre Automatisierung flexibel, wiederverwendbar sowie leichter lesbar und wartbar zu machen. Anstatt Werte wie Paketnamen oder Dateipfade direkt in Ihre Aufgaben (Tasks) fest zu kodieren, können Sie diese als Variablen definieren und im gesamten Playbook referenzieren. Wir erstellen ein einfaches Playbook, das Variablen verwendet, um den Apache-Webserver (httpd) zu installieren und eine grundlegende Webseite bereitzustellen.
-
In das Projektverzeichnis navigieren
Stellen Sie zunächst sicher, dass Sie sich im richtigen Arbeitsverzeichnis befinden. Ihre gesamte Arbeit für dieses Lab erfolgt im Verzeichnis ~/project, das bereits für Sie erstellt wurde.
cd ~/project
Installieren Sie das Paket ansible-core.
sudo dnf install -y ansible-core
-
Das Ansible-Playbook erstellen
Lassen Sie uns nun unsere Playbook-Datei erstellen. Wir nennen sie playbook.yml. Sie können einen Befehlszeilen-Texteditor wie nano verwenden, um die Datei zu erstellen und zu bearbeiten.
nano playbook.yml
Dieser Befehl öffnet eine leere Datei im nano-Editor. Fügen Sie nun den ersten Teil des Playbooks hinzu. Dieser Abschnitt definiert den Namen des Plays, den Ziel-Host (localhost, da wir es auf derselben Maschine ausführen) und einen vars-Abschnitt, in dem wir unsere Variablen definieren.
---
- name: Deploy Apache using variables
hosts: localhost
become: true
vars:
web_pkg: httpd
web_content: "Hello from Ansible Variables"
Hier ist eine Aufschlüsselung der Playbook-Struktur:
hosts: localhost: Gibt an, dass das Playbook auf der lokalen Maschine ausgeführt werden soll.
become: true: Weist Ansible an, eine Privilegieneskalation (entspricht sudo) für die Aufgaben zu verwenden, was für die Installation von Software erforderlich ist.
vars: Dies ist ein Dictionary, in dem wir unsere Schlüssel-Wert-Paare für Variablen definieren. Wir haben web_pkg für den Paketnamen und web_content für den Inhalt unserer Test-Webseite definiert.
-
Aufgaben zum Playbook hinzufügen
Fügen Sie als Nächstes unterhalb des vars-Abschnitts die tasks hinzu, die diese Variablen verwenden werden. Die erste Aufgabe installiert das Apache-Paket, und die zweite erstellt eine index.html-Datei. Fügen Sie den folgenden tasks-Block zu Ihrer playbook.yml-Datei hinzu, während Sie sich noch im nano-Editor befinden.
tasks:
- name: Install the latest version of Apache
ansible.builtin.dnf:
name: "{{ web_pkg }}"
state: latest
- name: Create a basic index.html file
ansible.builtin.copy:
content: "{{ web_content }}"
dest: /var/www/html/index.html
Beachten Sie, wie wir {{ variable_name }} verwenden, um auf die zuvor definierten Variablen zu verweisen. Dies ist Jinja2-Templating, das Ansible für Variablen verwendet. Dies macht die Aufgabendefinitionen generisch; wenn Sie stattdessen Nginx installieren wollten, müssten Sie nur die Variable web_pkg ändern, nicht die Aufgabe selbst.
-
Das Playbook überprüfen und speichern
Ihre vollständige playbook.yml-Datei sollte nun wie folgt aussehen. Überprüfen Sie den Inhalt und die Einrückung, da YAML sehr empfindlich auf Abstände reagiert.
---
- name: Deploy Apache using variables
hosts: localhost
become: true
vars:
web_pkg: httpd
web_content: "Hello from Ansible Variables"
tasks:
- name: Install the latest version of Apache
ansible.builtin.dnf:
name: "{{ web_pkg }}"
state: latest
- name: Create a basic index.html file
ansible.builtin.copy:
content: "{{ web_content }}"
dest: /var/www/html/index.html
Um die Datei in nano zu speichern, drücken Sie Ctrl+X, dann Y, um die Änderungen zu bestätigen, und schließlich Enter, um die Datei unter dem Namen playbook.yml zu schreiben.
-
Die Playbook-Syntax überprüfen
Bevor Sie ein Playbook ausführen, ist es immer eine gute Praxis, dessen Syntax auf Fehler zu prüfen.
ansible-playbook --syntax-check playbook.yml
Wenn die Syntax korrekt ist, sehen Sie den Dateipfad des Playbooks als Ausgabe, was bestätigt, dass es gültig ist:
playbook: playbook.yml
Falls Sie Fehler sehen, öffnen Sie die Datei erneut mit nano playbook.yml und beheben Sie diese. Achten Sie besonders auf die korrekte Einrückung (normalerweise zwei Leerzeichen).
-
Das Playbook ausführen
Führen Sie nun das Playbook aus. Ansible verbindet sich mit localhost, liest die Variablen und führt die Aufgaben aus.
ansible-playbook playbook.yml
Sie sollten eine Ausgabe sehen, die die erfolgreiche Ausführung jeder Aufgabe anzeigt. Der Status changed bedeutet, dass Ansible eine Änderung am System vorgenommen hat, wie z. B. die Installation eines Pakets oder das Erstellen einer Datei.
PLAY [Deploy Apache using variables] *******************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Install the latest version of Apache] ************************************
changed: [localhost]
TASK [Create a basic index.html file] ******************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Wenn Sie das Playbook ein zweites Mal ausführen, sollten die Aufgaben ok anstelle von changed melden, da das Paket bereits installiert ist und die Datei bereits den korrekten Inhalt hat. Dies demonstriert die Idempotenz von Ansible.
-
Die Konfiguration manuell überprüfen
Obwohl das Playbook abgeschlossen ist, können Sie manuell überprüfen, ob die Aufgaben wie erwartet funktioniert haben. Überprüfen Sie zunächst, ob das Paket httpd installiert wurde:
rpm -q httpd
Die Ausgabe sollte den Paketnamen und die Version anzeigen:
httpd-2.4.57-7.el9.x86_64
Überprüfen Sie als Nächstes den Inhalt der Datei index.html:
cat /var/www/html/index.html
Die Ausgabe sollte mit dem Wert Ihrer web_content-Variable übereinstimmen:
Hello from Ansible Variables
Sie haben erfolgreich Variablen in einem Ansible-Playbook verwendet, um ein System zu konfigurieren.