GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verwenden Sie die Jinja2-Vorlage im Ansible Playbook

Jinja2 ist eine leistungsstarke und einfach zu verwendende Python-basierte Templating-Engine, die sich in einer IT-Umgebung mit mehreren Servern als nützlich erweist, in der die Konfigurationen jedes Mal variieren. Das Erstellen statischer Konfigurationsdateien für jeden dieser Knoten ist mühsam und möglicherweise keine praktikable Option, da dies mehr Zeit und Energie verbraucht. Und hier kommt das Templating ins Spiel.

Jinja2-Vorlagen sind einfache Vorlagendateien, die Variablen speichern, die sich von Zeit zu Zeit ändern können. Wenn Playbooks ausgeführt werden, werden diese Variablen durch tatsächliche Werte ersetzt, die in Ansible Playbooks definiert sind. Auf diese Weise bietet Templating eine effiziente und flexible Lösung zum einfachen Erstellen oder Ändern von Konfigurationsdateien.

In diesem Leitfaden konzentrieren wir uns darauf, wie Sie die Jinja2-Vorlage im Ansible Playbook konfigurieren und verwenden können.

Vorlagenarchitektur

Eine Jinja2-Vorlagendatei ist eine Textdatei, die Variablen enthält, die zur Laufzeit oder Codeausführung ausgewertet und durch tatsächliche Werte ersetzt werden. In einer Jinja2-Vorlagendatei finden Sie die folgenden Tags:

  • {{ }} :Diese doppelten geschweiften Klammern sind die weit verbreiteten Tags in einer Vorlagendatei und sie werden zum Einbetten von Variablen und schließlich zum Drucken ihres Werts während der Codeausführung verwendet. Eine einfache Syntax mit doppelten geschweiften Klammern sieht beispielsweise wie folgt aus:Der {{ Webserver }} läuft auf  {{ nginx-version }}
  • {%  %} :Diese werden hauptsächlich für Kontrollanweisungen wie Schleifen und if-else-Anweisungen verwendet.
  • {#  #} :Dies sind Kommentare, die eine Aufgabe beschreiben.

In den meisten Fällen werden Jinja2-Vorlagendateien zum Erstellen von Dateien oder zum Ersetzen von Konfigurationsdateien auf Servern verwendet. Außerdem können Sie bedingte Anweisungen wie Schleifen ausführen und if-else Anweisungen und transformieren Sie die Daten mithilfe von Filtern und vielem mehr.

Vorlagendateien tragen die Datei .j2 -Erweiterung, was bedeutet, dass Jinja2-Vorlagen verwendet werden.

Vorlagendateien erstellen

Hier ist ein Beispiel einer Jinja2-Vorlagendatei example_template.j2, die wir verwenden werden, um eine neue Datei mit den angezeigten Variablen zu erstellen

Hey guys!
Apache webserver {{ version_number }} is running on {{ server }}
Enjoy!

Hier sind die Variablen {{ version_number }} &{{-Server }

Diese Variablen sind in einem Playbook definiert und werden durch tatsächliche Werte in der Playbook-YAML-Datei example1.yml unten ersetzt.

Wenn das Playbook ausgeführt wird, werden die Variablen in der Vorlagendatei durch die tatsächlichen Werte ersetzt und eine neue Datei wird entweder erstellt oder ersetzt eine bereits vorhandene file.txt im Zielpfad.

Zeigen Sie in der Playbook-Ausführung das Ziel an und beachten Sie, dass die Variablen durch die in der Ansible-Playbook-Datei definierten Werte ersetzt wurden.

Um ein besseres Gefühl dafür zu bekommen, wie Sie Konfigurationsdateien pushen können, werden wir eine Jinja2-Vorlage erstellen, die eine index.html erstellt Datei im Webstamm oder Dokumentverzeichnis /var/www/html auf einem CentOS 7-Server. Apache läuft bereits und zeigt die Standard-Willkommensseite wie gezeigt an,

Die Vorlagendatei index.html.j2 wird wie abgebildet angezeigt. Beachten Sie das Vorhandensein von ansible_hostname Variable, die eine eingebaute Variable ist. Beim Ausführen eines Playbooks wird dieser durch den Hostnamen des Webservers ersetzt.

<html>
    <center><h1> The Apache webserver is running on {{ ansible_hostname }} </h1>
    </center>
</html>

Die Playbook-Datei wird unten angezeigt.

Wenn das Playbook ausgeführt wird, wird eine neue index.html-Datei erstellt, und wie Sie sehen können, wurde die Variable ansible_hostname durch den tatsächlichen Hostnamen des Servers ersetzt, in diesem Fall Centos-7.

Jinja2-Vorlage mit Bedingungen

Jinja2-Vorlagen können auch mit bedingten Anweisungen wie for-Schleifen verwendet werden, um eine Liste von Elementen zu durchlaufen. Betrachten Sie das Playbook example2.yml wie in der Abbildung unten gezeigt:Wir werden eine Vorlage erstellen, die die Liste der Automodelle mit dem Namen „Autos“ durchläuft und das Ergebnis in der Zieldatei file2.txt ausgibt.

Die for-Schleife in der Jinja2-Vorlagendatei – example2_template.j2 – ist wie abgebildet

Wenn das Playbook ausgeführt wird, durchläuft die Schleife die Autoliste und druckt die Automodelle in der Zieldatei aus. Sie können den cat-Befehl verwenden, um die Ausgabe zu untersuchen und zu überprüfen, wo die Modelle in der Datei vorhanden sind.

Jinja2-Vorlage mit Filtern

Filter werden verwendet, um das Erscheinungsbild von Ausgabe- oder Formatierungsdaten zu ändern. Dies funktioniert, indem der Variablenname wie gezeigt weitergeleitet wird:

{{ Variable | Argument }}

Sehen wir uns einige Anwendungsfälle an:

a) Strings entweder in Großbuchstaben oder Kleinbuchstaben umwandeln

Um beispielsweise die Werte in der vorherigen Liste mithilfe der Vorlage in Großbuchstaben zu drucken, leiten Sie die Variable item wie gezeigt in das Argument „UPPER“:{{ item | oben }}

Wenn das Playbook ausgeführt wird, werden die Werte in Großbuchstaben umgewandelt

Wenn die Werte von Anfang an in Kleinbuchstaben geschrieben sind, verwenden Sie das „lower“-Argument.

{{ Artikel | niedriger }}

b) Verwenden Sie Listenfilter, um Maximal- und Minimalwerte anzuzeigen

Wenn Sie wie gezeigt mit Arrays oder Listen innerhalb der Vorlage arbeiten, können Sie Ihre bevorzugten Werte basierend auf bestimmten Kriterien ausdrucken.

Um beispielsweise den Mindestwert in einer Liste auszudrucken, übergeben Sie die gesamte Liste an „min“. ’ wie gezeigt filtern.

{{ [ 100, 37, 45, 65, 60, 78 ] | Minute }}     =>   37

Um den Höchstwert zu erhalten, verwenden Sie den Filter „max“.

{{ [ 100, 37, 45, 65, 60, 78 ] | max }}     =>   100

Sie können eindeutige Werte aus einer Liste doppelter Werte in einem Array erhalten, indem Sie den eindeutigen Filter wie gezeigt verwenden:

{{ [ 3, 4, 3, 3, 4, 2, 2 ] | einzigartig }}     =>   3,4,2

c) Einen Stringwert durch einen anderen ersetzen

Außerdem können Sie eine Zeichenkette durch eine neue ersetzen, indem Sie das Ersetzungsargument wie gezeigt verwenden

{{ „Hallo Leute“ | Ersetzen („Jungs“, „Welt“) }} => Hallo Welt

Im obigen Beispiel wird die Zeichenkette guys durch world ersetzt und die Anweisung lautet jetzt:

Hallo Welt

Dies sind nur einige Filter. Es gibt unzählige integrierte Filter, mit denen Sie die Ausgabe der Ansible Playbook-Ausführung manipulieren können.

Das Jinja2-Templating ist eine ideale Lösung für den Umgang mit dynamischen Variablen in Konfigurationsdateien. Dies ist eine viel effizientere Option als das manuelle Ändern von Werten, was oft viel Zeit in Anspruch nimmt und ziemlich mühsam sein kann. Ihr Feedback zu diesem Artikel ist uns sehr willkommen.

Auch lesen :Wie man Strings und Zeilen durch Ansible ersetzt

Auch lesen :  So erstellen Sie Ansible-Rollen und verwenden sie im Playbook


Linux
  1. So erstellen Sie eine Datei in Ansible

  2. So erstellen Sie ein Ansible-Playbook

  3. So übergeben Sie zusätzliche Variablen an ein Ansible-Playbook

  4. Wie verwende ich den Dateityp in Vim?

  5. Wie verwende ich chmod, um die Dateiberechtigung zu ändern?

So definieren und verwenden Sie Handler in Ansible Playbooks

So erstellen und führen Sie eine Ansible Playbook-Datei aus

So verwenden Sie die Jinja2-Vorlage in Ansible

Wie man Ansible verwendet, um Vim zu konfigurieren

So verwenden Sie den Befehl lsof unter Linux

Wie verwende ich gzip unter Linux?