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.YamlGeben Sie dann die folgenden Zeilen in die copy_file_template1.Yaml Spielbuch.
- Hosts: AllesDieses 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:
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.YamlDas 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.YamlWie 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
Hier habe ich überprüft, ob ansible_distribution Ist Debian. Wenn ja, drucken Sie die Zeichenfolge aus Sie führen Debian Linux 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.YamlWie Sie sehen können, auf meinem Debian -Fern Moderator, die Index.html Datei hat die Zeile Sie führen Debian Linux aus
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 %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
Sie führen Debian Linux nicht aus
Hier habe ich überprüft, ob ansible_distribution Ist Debian. Wenn ja, drucken Sie die Zeichenfolge aus Sie führen Debian Linux aus 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.YamlWie Sie sehen können, auf meinem Debian -Fern Moderator, die Index.html Datei hat die Zeile Sie führen Debian Linux aus Sie führen Debian Linux nicht aus
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 %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
Sie laufen CentOS Linux
Ihr Betriebssystem wird nicht unterstützt
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.YamlWie 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
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.YamlFügen Sie als nächstes die folgenden Zeilen in die hinzu copy_file_template1.Yaml Playbook -Datei:
vars: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.YamlWie 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.YamlFügen Sie als nächstes die folgenden Zeilen in die hinzu copy_file_template1.Yaml Playbook -Datei:
vars: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.Jinja2Fü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.YamlWie 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.