Ansible

So verwenden Sie das Ansible-Vorlagenmodul

So verwenden Sie das Ansible-Vorlagenmodul
Der Ansible Vorlage Modul wird hauptsächlich verwendet, um Dateien vom Ansible-Client (wo Ansible installiert ist) auf die Ansible-Hosts (von Ansible verwaltet) zu kopieren. Der Vorteil der Verwendung Vorlage Modul, anstatt die Kopieren Modul, ist das Ansible Vorlage Modul kann die Vorlagensprache Jinja2 verwenden. Jinja2 ist eine leistungsstarke Python-Vorlagensprache, mit der Sie Konfigurationsdateien, Webseiten usw. generieren können. Sie können auch Ansible-Faktenvariablen, -Schleifen und -Bedingungen in Ihren Jinja2-Vorlagen verwenden2.

In diesem Artikel erfahren Sie, wie Sie Ansible verwenden Vorlage Modul und einige Grundlagen der Jinja2-Vorlagensprache. Also lasst uns anfangen!

Voraussetzungen


Wenn Sie die Beispiele in diesem Artikel ausprobieren möchten:

1) Sie müssen Ansible auf Ihrem Computer installiert haben.

2) Sie müssen mindestens einen Ubuntu/Debian-Host oder einen CentOS/RHEL 8-Host haben, der für die Ansible-Automatisierung konfiguriert ist.

Es gibt viele Artikel auf LinuxHint, die sich mit der Installation von Ansible und der Konfiguration von Hosts für die Ansible-Automatisierung beschäftigen. Sie können diese bei Bedarf auch überprüfen.

Ein Ansible-Projektverzeichnis einrichten

Bevor wir weitermachen, ist es eine gute Idee, eine Projektverzeichnisstruktur zu erstellen, nur um die Dinge ein wenig organisiert zu halten.

So erstellen Sie ein Projektverzeichnis Vorlagen-Demo/ und alle erforderlichen Unterverzeichnisse (in Ihrem aktuellen Arbeitsverzeichnis) führen Sie den folgenden Befehl aus:

$ mkdir -pv template-demo/playbooks/templates

Navigieren Sie nach dem Erstellen des Projektverzeichnisses wie folgt zum Projektverzeichnis:

$ CD-Vorlage-Demo/

Ein ... kreieren Gastgeber Inventardatei wie folgt:

$ Nano-Hosts

Fügen Sie dann Ihre Host-IP oder Ihren DNS-Namen hinzu (vm1.Knotendrachen.com und vm2.Knotendrachen.com) in der Inventardatei.

Wenn Sie mit diesem Schritt fertig sind, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Erstellen Sie eine Ansible-Konfigurationsdatei im Projektverzeichnis wie folgt:

$ nano ansible.cfg

Geben Sie dann die folgenden Zeilen in das ansible.cfg Datei.

Wenn Sie diesen Schritt abgeschlossen haben, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

An dieser Stelle sollte das Projektverzeichnis wie folgt aussehen:

$ Baum

Wie Sie sehen, sind auch die Ansible-Hosts zugänglich accessible. Wir können also zum nächsten Abschnitt dieses Artikels übergehen.

$ ansible all -u ansible -m ping

Grundlagen des Ansible-Vorlagenmoduls

Das Vorlage Modul von Ansible akzeptiert die gleichen Optionen wie das Kopieren Modul von Ansible.

Gemeinsamer Ansible Vorlage Moduloptionen:

src - Der Pfad der Jinja2-Vorlagendatei auf Ihrem Computer, die von der Jinja2-Vorlagensprache geparst und auf die Remote-Hosts kopiert wird.
dest - Der Zielpfad auf den Remote-Hosts, auf die die Datei kopiert wird.
Inhaber - Der Eigentümer der Datei auf den Remote-Hosts.
Gruppe - Die Gruppe der Datei auf den Remote-Hosts.
Modus - Der Dateiberechtigungsmodus auf den Remote-Hosts.

Schauen wir uns ein Beispiel an.

Erstellen Sie zunächst ein neues Ansible-Playbook copy_file_template1.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$ Nano-Playbooks/copy_file_template1.yaml

Geben Sie dann die folgenden Zeilen in das copy_file_template1.yaml Spielbuch.

- Gastgeber: alle
Benutzer: ansible
Aufgaben:
- Name: Index kopieren.html-Datei auf den Server
Vorlage:
src: index.jinja2
Ziel: /home/ansible/index.html
Besitzer: ansible
Gruppe: ansible
Modus: 0644

Dieses Playbook kopiert die Index.jinja2 Datei aus dem Spielbücher/Vorlagen/ Verzeichnis (relativ zu Ihrem Projektverzeichnis) zu den Remote-Hosts mithilfe des Ansible Vorlage Modul.

Wenn Sie mit diesem Schritt fertig sind, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Erstellen Sie die Index.jinja2 Vorlagendatei im Playbooks/Vorlagen Verzeichnis wie folgt:

$ Nano-Playbooks/Vorlagen/Index.jinja2

Geben Sie die folgenden Zeilen in die ein Index.jinja2 Vorlagendatei:




Jinja2-Vorlagen-Demo


Willkommen bei Linuxhint!



Dies ist nur eine einfache HTML-Datei. Ich habe hier keine ausgefallene Jinja2-Syntax verwendet.

Wenn Sie mit diesem Schritt fertig sind, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Führen Sie das Playbook aus copy_file_template1.yaml wie folgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Das Playbook sollte erfolgreich ausgeführt werden.

Wie Sie sehen können, ist die Index.jinja2 Vorlage wurde mit der Vorlagensprache Jinja2 gerendert. Der gerenderte Inhalt sollte in den . kopiert werden Index.html Datei der Remote-Hosts.

Variablen in Jinja2-Vorlage drucken

Sie können Ansible-Fakten, Variablen und benutzerdefinierte Variablen in Ihren Jinja2-Vorlagen verwenden.

Auf Ihrer Jinja2-Vorlage können Sie den Wert einer Variablen mit dem Variablennamen Syntax. Handelt es sich bei der Variable um ein Objekt, können Sie einzelne Objekteigenschaften über die Objektvariable.Name des Anwesens Syntax.

Im folgenden Beispiel drucken wir die Datum Eigentum der ansible_date_time Objekt in unserem Index.jinja2 Vorlage.

$ ansible all -u ansible -m Einrichtung | egrep --color 'Datum|Uhrzeit'

Öffnen Sie zuerst die Index.jinja2 Vorlagendatei mit dem Nano-Texteditor wie folgt:

$ Nano-Playbooks/Vorlagen/Index.jinja2

Fügen Sie die folgende Zeile zum . hinzu Index.jinja2 Vorlagendatei:

Seite generiert am ansible_date_time.Datum

Der endgültige Index.jinja2 Datei sollte so aussehen, wie im Screenshot unten gezeigt.

Wenn Sie mit diesem Schritt fertig sind, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Führen Sie das Playbook aus copy_file_template1.yaml wie folgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Wie Sie sehen können, ist die Index.jinja2 Vorlage wurde von der Jinja2-Vorlagensprache verarbeitet und ersetzt die ansible_date_time.Datum variabel mit dem Datum in JJJJ-MM-TT Format. Die Ausgabe wurde dann in die kopiert Index.html Datei auf dem Remote-Host.

Bedingte if-Anweisung in Jinja2-Vorlage

Die Jinja2-Vorlagensprache unterstützt bedingte wenn Aussagen. Sie können bestimmte Variablen überprüfen, bevor Sie etwas drucken, indem Sie die wenn Aussage.

Der Jinja2 wenn Syntax ist wie folgt:

% wenn Bedingung %
Tun Sie etwas, wenn die Bedingung zutrifft
% endif %

Sehen wir uns ein Beispiel des Jinja2 . an wenn Aussage.

In diesem Abschnitt zeige ich die Jinja2 wenn Aussage mit dem ansible_distribution Fakten variabel.

$ ansible all -u ansible -m Einrichtung | egrep --color 'dist'

Öffnen Sie zuerst die Index.jinja2 Jinja2-Vorlage mit dem Nano-Texteditor wie folgt:

$ Nano-Playbooks/Vorlagen/Index.jinja2

Als nächstes fügen Sie die folgenden Zeilen in die Index.jinja2 Vorlagendatei:

% if ansible_distribution == "Debian" %

Sie verwenden Debian Linux


% endif %

Hier habe ich überprüft, ob ansible_distribution ist Debian. Wenn ja, drucken Sie die Zeichenfolge

Sie verwenden Debian Linux

. Ansonsten nicht ausdrucken.

Endlich, das Index.jinja2 Die Vorlagendatei sollte so aussehen, wie im Screenshot unten gezeigt.

Nachdem Sie die Datei bearbeitet haben, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Führen Sie nun das Playbook aus copy_file_template1.yaml wie folgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Wie Sie sehen können, ist auf meinem Debian-Remote-Host die Index.html Datei hat die Zeile

Sie verwenden Debian Linux

. Auf meinem CentOS-Remote-Host ist die Leitung jedoch nicht vorhanden. Also, der Jinja2 wenn Zustand funktioniert.

Bedingt: if-else-Anweisung in Jinja2-Vorlage

Die Jinja2-Vorlagensprache unterstützt bedingte ansonsten Aussagen. Sie können eine Sache drucken, wenn die Bedingung zutrifft, und etwas anderes drucken, wenn dies nicht verwendet wird ansonsten Aussage.

Der Jinja2 ansonsten Syntax ist wie folgt:

% wenn Bedingung %
Tun Sie etwas, wenn die Bedingung zutrifft
% sonst %
Tun Sie etwas, wenn die Bedingung falsch ist
% endif %

Sehen wir uns ein Beispiel des Jinja2 . an ansonsten Aussage.

Öffnen Sie zuerst die Index.jinja2 Jinja2-Vorlage mit dem Nano-Texteditor wie folgt:

$ Nano-Playbooks/Vorlagen/Index.jinja2

Als nächstes fügen Sie die folgenden Zeilen in die Index.jinja2 Vorlagendatei:

% if ansible_distribution == "Debian" %

Sie verwenden Debian Linux


% sonst %

Sie verwenden kein Debian Linux


% endif %

Hier habe ich überprüft, ob ansible_distribution ist Debian. Wenn ja, drucken Sie die Zeichenfolge

Sie verwenden Debian Linux

. Ansonsten drucken

Sie verwenden kein Debian Linux

.

Endlich, das Index.jinja2 Die Vorlagendatei sollte so aussehen, wie im Screenshot unten gezeigt.

Nachdem Sie die Datei bearbeitet haben, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Führen Sie das Playbook aus copy_file_template1.yaml wie folgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Wie Sie sehen können, ist auf meinem Debian-Remote-Host die Index.html Datei hat die Zeile

Sie verwenden Debian Linux

. Aber auf meinem CentOS-Remote-Host ist die Index.html Datei hat die Zeile

Sie verwenden kein Debian Linux

. Also, der Jinja2 ansonsten Zustand funktioniert.

Bedingt: if-elif-Anweisung in Jinja2-Vorlage

Die Jinja2-Vorlagensprache unterstützt bedingte wenn-elif Aussagen.

Der Jinja2 wenn-elif Syntax ist wie folgt:

% wenn Bedingung1 %
Tun Sie etwas, wenn die Bedingung1 wahr ist
% elif-Bedingung2 %
Tun Sie etwas, wenn die Bedingung2 wahr ist
% elif-Bedingung3 %
Tun Sie etwas, wenn die Bedingung3 wahr ist

% elif-BedingungN %
Tun Sie etwas, wenn die BedingungN wahr ist
% sonst %
Tun Sie etwas, wenn keine der Bedingungen zutrifft
% endif %

Hier die % sonst % Abschnitt ist optional, aber er ist da, wenn Sie ihn brauchen.

Sehen wir uns ein Beispiel des Jinja2 . an wenn-elif Aussage.

Öffnen Sie zuerst die Index.jinja2 Jinja2-Vorlage mit dem Nano-Texteditor wie folgt:

$ Nano-Playbooks/Vorlagen/Index.jinja2

Als nächstes fügen Sie die folgenden Zeilen in die Index.jinja2 Vorlagendatei:

% if ansible_distribution == "Debian" %

Sie verwenden Debian Linux


% elif ansible_distribution == "CentOS" %

Sie verwenden CentOS Linux


% sonst %

Ihr Betriebssystem wird nicht unterstützt


% endif %

Hier habe ich überprüft, ob ansible_distribution ist Debian. Wenn ja, drucken Sie die Zeichenfolge

Sie verwenden Debian Linux

.

Ich habe auch überprüft, ob ansible_distribution ist CentOS. Wenn ja, drucken Sie die Zeichenfolge

Sie verwenden CentOS Linux

.

Ansonsten drucken

Ihr Betriebssystem wird nicht unterstützt

.

Endlich, das Index.jinja2 Die Vorlagendatei sollte so aussehen, wie im Screenshot unten gezeigt.

Nachdem Sie die Datei bearbeitet haben, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Führen Sie das Playbook aus copy_file_template1.yaml wie folgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Wie Sie sehen können, ist auf meinem Debian-Remote-Host die Index.html Datei hat die Zeile

Sie verwenden Debian Linux

.

Auf meinem CentOS-Remote-Host ist die Index.html Datei hat die Zeile

Sie verwenden CentOS Linux

.

Wenn ich einen anderen Remote-Host hätte, auf dem ein anderes Betriebssystem als Debian oder CentOS läuft, hätte er die Zeile

Ihr Betriebssystem wird nicht unterstützt

in dem Index.html Datei.

Also, der Jinja2 wenn-elif Zustand funktioniert.

Schleifen im Jinja2-Template

Sie können in Jinja2 auch Arrays und Objekte mit Schleifen drucken.
Der Jinja2 zum Die Schleifensyntax lautet wie folgt:

% für VariablenName in ArrayName %
Mach etwas mit variableName
% endfor %

Hier in jeder Iteration des Arrays ArrayName, eines der Array-Elemente (beginnend am Anfang des Arrays) wird dem Variablennamen Variable. Sie können mit dieser Variablen innerhalb der Schleife etwas machen.

Lassen Sie uns im folgenden Beispiel sehen, wie Sie Array-Elemente in Ihrem Jinja2-Template drucken können.

Öffnen Sie zuerst die copy_file_template1.yaml Ansible Playbook mit dem Nano-Texteditor wie folgt:

$ Nano-Playbooks/copy_file_template1.yaml

Als nächstes fügen Sie die folgenden Zeilen in die copy_file_template1.yaml Playbook-Datei:

Varianten:
Menüs:
- Zuhause
- Produkte
- Über uns
- Kontaktiere uns

Hier habe ich a . hinzugefügt Menüs Array in der copy_file_template1.yaml Spielbuch. Als nächstes drucke ich die Array-Elemente mit einer Schleife in my Index.jinja2 Jinja2-Vorlagendatei.

Endlich, das copy_file_template1.yaml Playbook-Datei sollte so aussehen, wie im Screenshot unten gezeigt.

Nachdem Sie die Datei bearbeitet haben, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Öffnen Sie nun die Index.jinja2 Jinja2-Vorlage mit dem Nano-Texteditor wie folgt:

$ Nano-Playbooks/Vorlagen/Index.jinja2

Fügen Sie die folgenden Zeilen in die Index.jinja2 Vorlagendatei:

Hier erzeuge ich eine einfache HTML-Navigationsleiste mit einem Jinja2 zum Schleife. Die Schleife durchläuft die Menüs Array (das ich in der copy_file_template1 definiert habe.yaml Playbook)-Elemente und generiert a Speisekarte Artikel in jeder Iteration.

Endlich, das Index.jinja2 Die Vorlagendatei sollte so aussehen, wie im Screenshot unten gezeigt.

Nachdem Sie die Datei bearbeitet haben, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Führen Sie das Playbook aus copy_file_template1.yaml wie folgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Wie Sie sehen können, ist der Jinja2 zum loop generierte eine HTML-Navigationsleiste (im Index.html Datei).

Sie können auch auf ein Array von Objekten in Ihrer Jinja2-Vorlage zugreifen.

Sehen wir uns ein anderes Beispiel an.

Öffnen Sie zuerst die copy_file_template1.yaml Ansible Playbook mit dem Nano-Texteditor wie folgt:

$ Nano-Playbooks/copy_file_template1.yaml

Als nächstes fügen Sie die folgenden Zeilen in die copy_file_template1.yaml Playbook-Datei:

Varianten:
Menüs:
- Name: Zuhause
Link: /home
- Name: Produkte
Link: /Produkte
- Name: Über uns
Link: /über-uns
- Name: Kontaktieren Sie uns
Link: /kontaktiere uns

Hier habe ich a . hinzugefügt Menüs Objekt-Array im copy_file_template1.yaml Spielbuch. Jedes dieser Objekte hat zwei Eigenschaften, a Name Eigentum und a Verknüpfung Eigentum.

Endlich, das copy_file_template1.yaml Playbook-Datei sollte so aussehen, wie im Screenshot unten gezeigt.

Nachdem Sie die Datei bearbeitet haben, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Öffne das Index.jinja2 Jinja2-Vorlage mit dem Nano-Texteditor wie folgt:

$ Nano-Playbooks/Vorlagen/Index.jinja2

Als nächstes fügen Sie die folgenden Zeilen in die Index.jinja2 Vorlagendatei:

Alles, was Sie hier sehen, ist das gleiche wie im vorherigen Beispiel. Der einzige Unterschied ist, dass ich die Objekteigenschaften drucke Name (mit Speisekarte.Name) und Verknüpfung (mit Speisekarte.Verknüpfung) in meinem Index.jinja2 Jinja2-Vorlage.

Endlich, das Index.jinja2 Die Vorlagendatei sollte so aussehen, wie im Screenshot unten gezeigt.

Nachdem Sie die Datei bearbeitet haben, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Führen Sie nun das Playbook aus copy_file_template1.yaml wie folgt:

$ ansible-playbook playbooks/copy_file_template1.yaml

Wie Sie sehen können, ist der Jinja2 zum loop generierte eine HTML-Navigationsleiste (im Index.html Datei) aus einem Array von Objekten.

Was kommt als nächstes?

In diesem Artikel habe ich Ihnen gezeigt, wie Sie das Ansible verwenden Vorlage Modul und beschrieb einige der Grundlagen der Jinja2-Vorlagensprache. Besuchen Sie die offizielle Website von Jinja2, um mehr über die Jinja2-Vorlagensprache zu erfahren.

So zeigen Sie OSD-Overlay in Vollbild-Linux-Apps und -Spielen an
Das Spielen von Spielen im Vollbildmodus oder die Verwendung von Apps im ablenkungsfreien Vollbildmodus kann Sie von relevanten Systeminformationen ab...
Top 5 Karten zur Spielaufnahme
Wir alle haben Streaming-Gameplays auf YouTube gesehen und geliebt. PewDiePie, Jakesepticye und Markiplier sind nur einige der Top-Gamer, die Millione...
So entwickeln Sie ein Spiel unter Linux
Vor einem Jahrzehnt hätten nicht viele Linux-Benutzer vorhergesagt, dass ihr Lieblingsbetriebssystem eines Tages eine beliebte Spieleplattform für kom...