So erstellen Sie Vorlagen in Ansible, um Konfigurationen auf verwalteten Knoten zu erstellen - Teil 7

So erstellen Sie Vorlagen in Ansible, um Konfigurationen auf verwalteten Knoten zu erstellen - Teil 7

In diesem Teil 7 Von Ansible -Serien lernen Sie, wie Sie Vorlagen in Ansible erstellen und verwenden, um angepasste Konfigurationen auf verwalteten Knoten zu erstellen. Templating in Ansible ist eine einfache und freundliche Möglichkeit, benutzerdefinierte Konfigurationen an verwaltete Knoten zu übertragen.

Was ist Vorlagen in Ansible?

Um ein besseres Gefühl dafür zu bekommen, was eine Vorlage ist, betrachten wir einen IT -Manager, der eine E -Mail ausstellt. Die E -Mail wird an jeden der Mitglieder gesendet und lädt sie auch ein, zusammen mit ihren Ehepartnern zu markieren.

Die E -Mail wurde so angepasst, dass der Körper der E -Mail gleich bleibt, aber die Adressaten und die Namen ihrer jeweiligen Ehepartner variieren. Die E -Mail wird die Vorlage, Während die Empfänger und die jeweiligen Ehepartner sind Variablen.

Das war ein generisches Beispiel. Ansible verwendet Jinja2 Das ist eine moderne Templating -Engine für Python -Frameworks, mit denen dynamische Inhalte oder Ausdrücke generiert werden. Die Vorlagen sind äußerst nützlich, wenn Sie benutzerdefinierte Konfigurationsdateien für mehrere Server erstellen, für jedes von ihnen jedoch eindeutig sind.

Jinja2 verwendet die doppelten lockigen Zahnspangen eine variable bei der Definition beizulegen. Für Kommentare verwenden Sie # # und für bedingte Aussagen verwendet %… %.

Nehmen wir an, Sie haben ein Datenmodell von Vlans In Ihrem Netzwerk mit Host -Systemen, die Sie zu ihrem jeweiligen Vorgang drängen möchten Vlans wie gezeigt.

vlans: - id: 10 name: lb - id: 20 name: wb_01 - id: 30 name: wb_02 - id: 40 name: db 

Um diese Konfiguration zu rendern, entsprechend Jinja2 Vorlage aufgerufen Vlans.J2 würde wie gezeigt erscheinen. Wie Sie sehen können, die Variablen Vlan.Ausweis Und Vlan.Name wurden in lockigen Klammern eingeschlossen.

vlan vlan.id name vlan.Name  

Wenn Sie alles in einem Spielbuch zusammenstellen, das verschiedene Host -Maschinen platziert, wird dies wie gezeigt erscheint:

 - Hosts Aufgaben: - Name: Rendern von VLAN -Konfigurationsvorlage: SRC: VLANs.J2 Dest: "Vlan_Configs/Inventory_hostname.Conf " 

Beispiel 1: Konfigurieren von Webservern in verschiedenen Distributionen

In diesem Beispiel werden wir erstellen Index.html Dateien, die Informationen über die anzeigen Hostname & das Betriebssystem von 2 Laufen Webserver Centos & Ubuntu.

Aufstellen

Ubuntu 18 - IP -Adresse: 173.82.202.239 Centos 7 - IP -Adresse: 173.82.115.165 

Apache -Webserver wurde bereits auf beiden Servern installiert.

Für CentOS 7

Apache -Webseite auf CentOS 7

Für Ubuntu 18.04

Apache -Webseite auf Ubuntu 18.04

Lassen Sie uns also ein Spielbuch erstellen test_server.YML wie gezeigt:

--- - Hosts: Alle werden: Ja Aufgaben: - Name: Installieren Sie den Index.HTML -Vorlage: SRC: Index.html.J2 dest:/var/www/html/Index.HTML -Modus: 0777 

Unser Jinja Dateivorlage ist Index.html.J2 das wird auf die gedrängt Index.html Datei auf jedem Webserver. Denken Sie immer daran, die Erweiterung zu setzen .J2 Am Ende, um zu bedeuten, dass es sich um eine Jinja2 -Datei handelt.

Lassen Sie uns nun die Vorlagendatei erstellen Index.html.J2.

  

Der Hostname dieses Webserver ist Ansible_Hostname

Es läuft auf Ansible_os_family System

Diese Vorlage ist eine grundlegende HTML -Datei, in der die ansible_hostname Und ansible_os_family sind integrierte Variablen, die durch die jeweiligen Hostnamen und Betriebssysteme der einzelnen Webserver auf dem Browser ersetzt werden.

Lassen Sie uns nun das Spielbuch durchführen.

# Ansible-Playbook test_server.YML 
Ansible -Vorlagendatei erstellen

Lassen Sie uns nun die Webseiten für beide neu laden Centos 7 Und Ubuntu Webserver.

Für CentOS 7

Überprüfen Sie die Apache -Webseite auf CentOS 7

Für Ubuntu 18.04

Überprüfen Sie die Apache -Webseite auf Ubuntu 18.04

Wie Sie sehen können, wurden auf jedem Server verschiedene Informationen über den Hostnamen und die OS -Familie angezeigt. Und so cool Jinja2 Vorlagen ist!

Filter:

Manchmal beschließen Sie möglicherweise, den Wert einer Variablen durch eine Zeichenfolge zu ersetzen, die auf eine bestimmte Weise erscheint.

Beispiel 1: Lassen Sie Saiten in Großbuchstaben/Kleinbuchstaben erscheinen

Zum Beispiel können wir im vorherigen Beispiel entscheiden, dass die Ansible -Variablen in Großbuchstaben erscheinen lassen. Hängen Sie dazu den Wert oberen an die Variable an. Auf diese Weise wird der Wert in der Variablen in Großbuchstaben umgewandelt.

Ansible_hostname | Oberes => Centos 7 Ansible_os_family | obere => redhat 
Saite Großbuchstaben machen

In ähnlicher Weise können Sie die String -Ausgabe in Kleinbuchstaben konvertieren, indem Sie das niedrigere Argument anhängen.

Ansible_hostname | Lower => Centos 7 Ansible_os_family | niedriger => redhat 
Saitenkasse machen

Beispiel 2: Ersetzen Sie eine Zeichenfolge durch eine andere

Zusätzlich können Sie eine Zeichenfolge durch eine andere ersetzen.

Zum Beispiel:

Der Filmtitel ist Movie_Name => Der Filmtitel ist Ring.

Verwenden Sie, um die Ausgabe durch eine andere Zeichenfolge zu ersetzen, das Argument Ersetzen Sie wie gezeigt:

Der Filmtitel ist Movie_Name | ersetzen ("Ring", ", Überfall") => Der Filmtitel ist Raubüberfall.

Beispiel 3: Listet und legt Filter auf

Verwenden Sie das, um den kleinsten Wert in einem Array abzurufen Mindest Filter.

[2, 3, 4, 5, 6, 7] | min => 2 

Um die größte Zahl abzurufen, verwenden Sie die in ähnlicher Weise die Max Filter.

[2, 3, 4, 5, 6, 7] | max => 7 

Verwenden Sie die einzigartigen Werten, um die einzigartig Filter.

[2, 3, 3, 2, 6, 7] | eindeutig => 2, 3 

Benutze die willkürlich Filter, um eine Zufallszahl zwischen 0 und dem Wert zu erhalten.

50 | zufällig => eine zufällige Zahl 

Schleifen:

Genau wie in Programmiersprachen haben wir Schleifen in Ansible Jinja2.

Um beispielsweise eine Datei zu generieren, die eine Liste von Zahlen enthält, verwenden Sie die Für Schleife Wie im folgenden Beispiel gezeigt:

Beispiel 1:

 % für die Zahl in [0, 1, 2, 3, 4, 5, 6, 7] % Nummer  % Ende für % 

Sie können auch die for -Schleife mit kombinieren ansonsten Aussagen zum Filtern und erhalten bestimmte Werte.

Beispiel 2:

% für die Zahl in [0, 1, 2, 3, 4, 5, 6, 7]% % if number == 5% Nummer % endif% % endfor% 

Und das war's für diesen Vortrag. Machen Sie mit uns im nächsten Thema, wo wir uns mit Ansible -Variablen und Fakten befassen werden.