So verwenden Sie einmodul ansible Vorlagenmodul

So verwenden Sie einmodul ansible Vorlagenmodul
Der Ansible Vorlage Das Modul wird hauptsächlich zum Kopieren von Dateien aus dem Ansible -Client verwendet (wo Ansible installiert ist) auf die Ansible -Hosts (verwaltet von Ansible). Der Vorteil der Verwendung der Vorlage Modul eher als das Kopieren Modul ist, dass das Ansible Vorlage Modul kann die Jinja2 -Templatationssprache verwenden. Jinja2 ist eine leistungsstarke Python -Templating -Sprache, durch die Sie Konfigurationsdateien, Webseiten usw. generieren können. Sie können auch Ansible -Fakten Variablen, Schleifen und Bedingungen in Ihren Jinja2 -Vorlagen verwenden.

Dieser Artikel zeigt Ihnen, wie Sie das Ansible verwenden können Vorlage Modul und einige Grundlagen der Jinja2 -Templatierungssprache. 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 unter LinuxHint, die der Installation von Ansible und Konfigurieren von Hosts für Ansible Automation gewidmet sind. Sie können diese bei Bedarf auch überprüfen.

Einrichten eines Ansible -Projektverzeichnisses

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

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

$ mkdir -pv Vorlage -Demo/Playbooks/Vorlagen

Sobald das Projektverzeichnis erstellt wurde, navigieren Sie wie folgt zum Projektverzeichnis:

$ CD-Vorlage-Demo/

Ein ... kreieren Gastgeber Inventardatei wie folgt:

$ nano Gastgeber

Fügen Sie dann Ihren Host -IP- oder DNS -Namen hinzu (VM1.Nodekite.com Und VM2.Nodekite.com) In der Inventardatei.

Sobald Sie mit diesem Schritt fertig sind, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Y Und .

Erstellen Sie eine ansible Konfigurationsdatei im Projektverzeichnis wie folgt:

$ nano ansible.CFG

Geben Sie dann die folgenden Zeilen in die Ansible.CFG Datei.

Sobald Sie diesen Schritt beendet haben, speichern Sie die Datei durch Drücken + X, gefolgt von Y Und .

Zu diesem Zeitpunkt sollte das Projektverzeichnis wie folgt aussehen:

$ tree

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

$ ANSIBLE ALL -U ANSIBLE -M PING

Grundlagen des Ansible -Vorlagenmoduls

Der Vorlage Modul von Ansible akzeptiert die gleichen Optionen wie die Kopieren Modul von Ansible.

Gemeinsame Ansible Vorlage Moduloptionen:

src - Der Pfad der Jinja2 -Vorlagendatei auf Ihrem Computer, die von der Jinja2 -Vorlagensprache analysiert und an die Remote -Hosts kopiert wird.
Ziel - Der Zielweg auf den Remote -Hosts, an die die Datei kopiert wird.
Eigentümer - 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 im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/copy_file_template1.Yaml

Geben Sie dann die folgenden Zeilen in die copy_file_template1.Yaml Spielbuch.

- Hosts: Alles
Benutzer: Ansible
Aufgaben:
- Name: Index kopieren.HTML -Datei zum Server
Vorlage:
SRC: Index.Jinja2
dest:/home/ansible/index.html
Besitzer: Ansible
Gruppe: Ansible
Modus: 0644

Dieses Spielbuch kopiert die Index.Jinja2 Datei aus der Playbooks/Vorlagen/ Verzeichnis (relativ zu Ihrem Projektverzeichnis) an die Remote -Hosts mit dem Ansible Vorlage Modul.

Sobald Sie mit diesem Schritt fertig sind, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Y Und .

Erstellen die Index.Jinja2 Vorlagendatei in der Playbooks/Vorlagen Verzeichnis wie folgt:

$ nano Playbooks/Vorlagen/Index.Jinja2

Geben Sie die folgenden Zeilen in die Index.Jinja2 Vorlagendatei:




Jinja2 Vorlage Demo


Willkommen bei LinuxHint!



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

Sobald Sie mit diesem Schritt fertig sind, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Y Und .

Führen Sie das Spielbuch aus copy_file_template1.Yaml folgendermaßen:

$ Ansible-Playbook Playbooks/Copy_File_Template1.Yaml

Das Spielbuch sollte erfolgreich ausgeführt werden.

Wie Sie sehen können, die Index.Jinja2 Die Vorlage wurde unter Verwendung der Jinja2 -Templatierungssprache gerendert. Der gerenderte Inhalt sollte in die kopiert werden Index.html Datei der Remote -Hosts.

Druckvariablen in der Jinja2 -Vorlage

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

In Ihrer Jinja2 -Vorlage können Sie den Wert einer Variablen mit der Variablen drucken Variablennamen Syntax. Wenn die Variable ein Objekt ist, können Sie individuelle Objekteigenschaften mit dem drucken ObjectVariable.Name des Anwesens Syntax.

In dem folgenden Beispiel drucken wir die Datum Eigentum des ansible_date_time Objekt in unserem Index.Jinja2 Vorlage.

$ ANSIBLE All -U Ansible -m Setup | EGREP -CORGOR DATE | Uhrzeit '

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

$ nano Playbooks/Vorlagen/Index.Jinja2

Fügen Sie der folgenden Zeile zum hinzu Index.Jinja2 Vorlagendatei:

Seite generiert auf Ansible_date_time.Datum

Das endgültige Index.Jinja2 Die Datei sollte wie im Screenshot unten angezeigt werden.

Sobald Sie mit diesem Schritt fertig sind, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Y Und .

Führen Sie das Spielbuch aus copy_file_template1.Yaml folgendermaßen:

$ Ansible-Playbook Playbooks/Copy_File_Template1.Yaml

Wie Sie sehen können, die Index.Jinja2 Die Vorlage wurde von der Jinja2 -Vorlagensprache bearbeitet und die ersetzt Ansible_date_time.Datum Variable mit dem Datum in Yjyy-mm-dd Format. Der Ausgang wurde dann an die kopiert Index.html Datei auf dem Remote -Host.

Bedingte IF -Aussage in der Jinja2 -Vorlage

Jinja2 Templating -Sprache unterstützt die bedingte Wenn Aussagen. Sie können bestimmte Variablen überprüfen, bevor Sie etwas mit dem drucken Wenn Stellungnahme.

Der Jinja2 Wenn Syntax ist wie folgt:

% if condition %
Tun Sie etwas, wenn die Bedingung wahr ist
% endif %

Lassen Sie uns ein Beispiel des Jinja2 sehen Wenn Stellungnahme.

In diesem Abschnitt werde ich den Jinja2 demonstrieren Wenn Anweisung mit der ansible_distribution Fakten variabel.

$ ANSIBLE All -U Ansible -m Setup | Egrep --farbe 'Dist'

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

$ nano Playbooks/Vorlagen/Index.Jinja2

Fügen Sie als nächstes die folgenden Zeilen in die hinzu Index.Jinja2 Vorlagendatei:

% if Ansible_distribution == "Debian" %

Sie führen Debian Linux aus


% endif %

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

Sie führen Debian Linux aus

. Ansonsten drucken Sie es nicht aus.

Endlich, das Index.Jinja2 Die Vorlagendatei sollte wie im folgenden Screenshot angezeigt werden.

Sobald Sie die Datei bearbeitet haben, speichern Sie die Datei durch Drücken + X, gefolgt von Y Und .

Führen Sie jetzt das Spielbuch aus copy_file_template1.Yaml folgendermaßen:

$ Ansible-Playbook Playbooks/Copy_File_Template1.Yaml

Wie Sie sehen können, auf meinem Debian -Fern Moderator, die Index.html Datei hat die Zeile

Sie führen Debian Linux aus

. Auf meinem CentOS Remote -Host ist die Linie jedoch nicht vorhanden. Also der Jinja2 Wenn Der Zustand funktioniert.

Bedingung: IF-ELSE-Aussage in der Jinja2-Vorlage

Jinja2 Templating -Sprache unterstützt die bedingte ansonsten Aussagen. Sie können eine Sache ausdrucken, wenn der Zustand übereinstimmt, und etwas anderes ausdrucken, wenn sie die nicht verwendet ansonsten Stellungnahme.

Der Jinja2 ansonsten Syntax ist wie folgt:

% if condition %
Tun Sie etwas, wenn die Bedingung wahr ist
% anders %
Tun Sie etwas, wenn die Bedingung falsch ist
% endif %

Lassen Sie uns ein Beispiel des Jinja2 sehen ansonsten Stellungnahme.

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

$ nano Playbooks/Vorlagen/Index.Jinja2

Fügen Sie als nächstes die folgenden Zeilen in die hinzu Index.Jinja2 Vorlagendatei:

% if Ansible_distribution == "Debian" %

Sie führen Debian Linux aus


% anders %

Sie führen Debian Linux nicht aus


% endif %

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

Sie führen Debian Linux aus

. Ansonsten drucken

Sie führen Debian Linux nicht aus

.

Endlich, das Index.Jinja2 Die Vorlagendatei sollte wie im folgenden Screenshot angezeigt werden.

Sobald Sie die Datei bearbeitet haben, speichern Sie die Datei durch Drücken + X, gefolgt von Y Und .

Führen Sie das Spielbuch aus copy_file_template1.Yaml folgendermaßen:

$ Ansible-Playbook Playbooks/Copy_File_Template1.Yaml

Wie Sie sehen können, auf meinem Debian -Fern Moderator, die Index.html Datei hat die Zeile

Sie führen Debian Linux aus

. Aber auf meinem Centos abgelegenen Gastgeber die Index.html Datei hat die Zeile

Sie führen Debian Linux nicht aus

. Also der Jinja2 ansonsten Der Zustand funktioniert.

Bedingung: IF-ELIF-Aussage in der Jinja2-Vorlage

Jinja2 Templating -Sprache unterstützt die bedingte If-Elif Aussagen.

Der Jinja2 If-Elif Syntax ist wie folgt:

% if condition1 %
Tun Sie etwas, wenn der Zustand1 wahr ist
% Elif Condition2 %
Tun Sie etwas, wenn die Bedingung2 wahr ist
% elif Condition3 %
Tun Sie etwas, wenn der Zustand3 wahr ist

% elif CONTONIONN %
Tun Sie etwas, wenn die Bedingung wahr ist
% anders %
Tun Sie etwas, wenn keine der Bedingungen wahr ist
% endif %

Hier das % anders % Der Abschnitt ist optional, aber es ist da, wenn Sie es brauchen.

Lassen Sie uns ein Beispiel des Jinja2 sehen If-Elif Stellungnahme.

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

$ nano Playbooks/Vorlagen/Index.Jinja2

Fügen Sie als nächstes die folgenden Zeilen in die hinzu Index.Jinja2 Vorlagendatei:

% if Ansible_distribution == "Debian" %

Sie führen Debian Linux aus


% Elif ansible_distribution == "CentOS" %

Sie laufen CentOS Linux


% anders %

Ihr Betriebssystem wird nicht unterstützt


% endif %

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

Sie führen Debian Linux aus

.

Ich habe auch überprüft, ob ansible_distribution Ist Centos. Wenn ja, drucken Sie die Zeichenfolge aus

Sie laufen CentOS Linux

.

Ansonsten drucken

Ihr Betriebssystem wird nicht unterstützt

.

Endlich, das Index.Jinja2 Die Vorlagendatei sollte wie im folgenden Screenshot angezeigt werden.

Sobald Sie die Datei bearbeitet haben, speichern Sie die Datei durch Drücken + X, gefolgt von Y Und .

Führen Sie das Spielbuch aus copy_file_template1.Yaml folgendermaßen:

$ Ansible-Playbook Playbooks/Copy_File_Template1.Yaml

Wie Sie sehen können, auf meinem Debian -Fern Moderator, die Index.html Datei hat die Zeile

Sie führen Debian Linux aus

.

Auf meinem Centos abgelegenen Gastgeber die Index.html Datei hat die Zeile

Sie laufen CentOS Linux

.

Wenn ich einen anderen Remote -Host hätte, der ein anderes Betriebssystem als Debian oder CentOS ausführt, hätte es die Grenze

Ihr Betriebssystem wird nicht unterstützt

im Index.html Datei.

Also der Jinja2 If-Elif Der Zustand funktioniert.

Schleifen in der Jinja2 -Vorlage

Sie können auch Arrays und Objekte mit Schleifen in Jinja2 drucken.
Der Jinja2 für Die Loop -Syntax ist wie folgt:

% für Varibenname in ArrayName %
Tun Sie etwas mit Variableame
% endfor %

Hier in jeder Iteration des Arrays ArrayName, Eines der Array -Elemente (beginnend vom Beginn des Arrays) wird dem zugewiesen Variablennamen Variable. Sie können etwas mit dieser Variablen in der Schleife tun.

Lassen Sie uns sehen, wie Sie Array -Elemente in Ihrer Jinja2 -Vorlage im folgenden Beispiel 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

Fügen Sie als nächstes die folgenden Zeilen in die hinzu copy_file_template1.Yaml Playbook -Datei:

vars:
Menüs:
- Heim
- Produkte
- Über uns
- Kontaktiere uns

Hier habe ich a hinzugefügt Menüs Array in der copy_file_template1.Yaml Spielbuch. Als nächstes werde ich die Array -Elemente mit einer Schleife in meinem drucken Index.Jinja2 Jinja2 -Vorlagendatei.

Endlich, das copy_file_template1.Yaml Die Playbook -Datei sollte wie im Screenshot unten angezeigt werden.

Sobald Sie die Datei bearbeitet haben, speichern Sie die Datei durch Drücken + X, gefolgt von Y 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 hinzu Index.Jinja2 Vorlagendatei:

Hier erzeugte ich eine einfache HTML -Navigationsleiste mit einem Jinja2 für Schleife. Die Schleife iteriert durch die Menüs Array (das ich in der copy_file_template1 definiert habe1.Yaml Playbook) Elemente und generiert a Speisekarte Artikel in jeder Iteration.

Endlich, das Index.Jinja2 Die Vorlagendatei sollte wie im folgenden Screenshot angezeigt werden.

Sobald Sie die Datei bearbeitet haben, speichern Sie die Datei durch Drücken + X, gefolgt von Y Und .

Führen Sie das Spielbuch aus copy_file_template1.Yaml folgendermaßen:

$ Ansible-Playbook Playbooks/Copy_File_Template1.Yaml

Wie Sie sehen können, der Jinja2 für Schleife erzeugte eine HTML -Navigationsleiste (in der Index.html Datei).

Sie können auch auf eine Reihe von Objekten in Ihrer Jinja2 -Vorlage zugreifen.

Lassen Sie uns ein anderes Beispiel sehen.

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

$ nano playbooks/copy_file_template1.Yaml

Fügen Sie als nächstes die folgenden Zeilen in die hinzu copy_file_template1.Yaml Playbook -Datei:

vars:
Menüs:
- Name: Zuhause
Link: /Zuhause
- Name: Produkte
Link: /Produkte
- Name: Über uns
Link: /über-us
- Name: Kontaktieren Sie uns
Link: /contact-us

Hier habe ich a hinzugefügt Menüs Objektarray in der 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 Die Playbook -Datei sollte wie im Screenshot unten angezeigt werden.

Sobald Sie die Datei bearbeitet haben, speichern Sie die Datei durch Drücken + X, gefolgt von Y Und .

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

$ nano Playbooks/Vorlagen/Index.Jinja2

Fügen Sie als nächstes die folgenden Zeilen in die hinzu Index.Jinja2 Vorlagendatei:

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

Endlich, das Index.Jinja2 Die Vorlagendatei sollte wie im folgenden Screenshot angezeigt werden.

Sobald Sie die Datei bearbeitet haben, speichern Sie die Datei durch Drücken + X, gefolgt von Y Und .

Führen Sie jetzt das Spielbuch aus copy_file_template1.Yaml folgendermaßen:

$ Ansible-Playbook Playbooks/Copy_File_Template1.Yaml

Wie Sie sehen können, der Jinja2 für Schleife erzeugte eine HTML -Navigationsleiste (in der Index.html Datei) aus einer Reihe von Objekten.

Was kommt als nächstes?

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