Erstellen von Vorlagen in Ansible zum Erstellen von Konfigurationen auf verwalteten Knoten – Teil 7

In diesem Teil 7 In Ansible Series erfahren Sie, wie Sie in Ansible Vorlagen erstellen und verwenden, um benutzerdefinierte Konfigurationen auf verwalteten Knoten zu erstellen. Das Erstellen von Vorlagen in Ansible ist eine einfache und benutzerfreundliche Methode, um benutzerdefinierte Konfigurationen mit minimaler Bearbeitung von Playbook-Dateien auf verwaltete Knoten zu übertragen, auf denen verschiedene Systeme ausgeführt werden.

Was ist Templating in Ansible?

Um ein besseres Gefühl dafür zu bekommen, was eine Vorlage ist, betrachten wir einen IT-Manager, der eine E-Mail erstellt, um seine Abteilung zu einer Cocktailparty einzuladen. Die E-Mail wird an jedes Mitglied gesendet und lädt sie außerdem ein, sich mit ihren Ehepartnern zusammenzutun.

Die E-Mail wurde so angepasst, dass der Text der E-Mail gleich bleibt, die Adressaten und die Namen ihrer jeweiligen Ehepartner jedoch variieren. Die E-Mail wird zum Vorlage, während die Empfänger und jeweiligen Ehepartner sind Variablen.

Das war ein allgemeines Beispiel. Ansible verwendet Jinja2 Dies ist eine moderne Vorlagen-Engine für Python-Frameworks, mit der dynamische Inhalte oder Ausdrücke generiert werden. Vorlagen sind äußerst nützlich, wenn Sie benutzerdefinierte Konfigurationsdateien für mehrere Server erstellen, die jedoch für jeden Server eindeutig sind.

Jinja2 verwendet die doppelten geschweiften Klammern {{ ... }} um eine definierte Variable einzuschließen. Verwenden Sie für Kommentare {{# #} und für bedingte Anweisungen verwenden {% … %}.


Nehmen wir an, Sie haben ein Datenmodell von VLANs in Ihrem Netzwerk mit Host-Systemen, die Sie auf ihre jeweiligen pushen 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, muss die entsprechende jinja2 Vorlage aufgerufen vlans.j2 würde wie gezeigt erscheinen. Wie Sie sehen können, die Variablen vlan.id und vlan.name wurden in geschweiften Klammern eingeschlossen.

vlan {{ vlan.id }}
  name {{ vlan.name }}

Wenn Sie alles in einem Playbook zusammenfassen, in dem verschiedene Host-Computer platziert sind, sieht dies folgendermaßen aus:

    - hosts
  tasks:
    - name: Rendering VLAN configuration
      template:
         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 Webservern läuft CentOS & Ubuntu.

Konfiguration

Ubuntu 18 - IP address: 173.82.202.239
CentOS 7 -  IP address: 173.82.115.165

Auf beiden Servern wurde bereits ein Apache-Webserver installiert.

Für CentOS 7

Apache-Webseite unter CentOS 7
Apache-Webseite unter CentOS 7

Für Ubuntu 18.04

Apache-Webseite unter Ubuntu 18.04
Apache-Webseite unter Ubuntu 18.04

Erstellen wir also ein Spielbuch test_server.yml wie gezeigt:

---

 - hosts: all
   become: yes

   tasks:

    - name: Install index.html
      template:
        src: index.html.j2
        dest: /var/www/html/index.html
        mode: 0777

Unsere Jinja Dateivorlage ist index.html.j2 das wird auf die geschoben index.html Datei auf jedem Webserver. Denken Sie immer daran, die Erweiterung zu setzen .j2 am Ende, um anzuzeigen, dass es sich um eine jinja2-Datei handelt.

Lassen Sie uns nun die Vorlagendatei erstellen index.html.j2.


The hostname of this webserver is {{ ansible_hostname }}

It is running on {{ ansible_os_family}}system

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

Lassen Sie uns nun das Playbook ausführen.

# ansible-playbook test_server.yml
Erstellen Sie eine Ansible-Vorlagendatei
Erstellen Sie eine Ansible-Vorlagendatei

Laden wir nun die Webseiten für beide neu CentOS 7 und Ubuntu Webserver.

Für CentOS 7

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

Für Ubuntu 18.04

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

Wie Sie sehen können, wurden auf jedem Server unterschiedliche Informationen zum Hostnamen und zur Betriebssystemfamilie angezeigt. Und so cool Jinja2 Vorlage ist!

FILTER:

Manchmal können Sie den Wert einer Variablen durch eine Zeichenfolge ersetzen, die auf eine bestimmte Weise angezeigt wird.

Beispiel 1: Zeichenfolgen in Groß- / Kleinbuchstaben anzeigen

Im vorherigen Beispiel können wir beispielsweise festlegen, dass die Ansible-Variablen in Großbuchstaben angezeigt werden. Fügen Sie dazu den oberen Wert an die Variable an. Auf diese Weise wird der Wert in der Variablen in Großbuchstaben konvertiert.

{{ ansible_hostname | upper }} => CENTOS 7
{{ ansible_os_family | upper }} => REDHAT
Machen Sie einen String in Großbuchstaben
Machen Sie einen String in Großbuchstaben

Ebenso können Sie die Zeichenfolgenausgabe in Kleinbuchstaben konvertieren, indem Sie das untere Argument anhängen.

{{ ansible_hostname | lower }}  => centos 7
{{ ansible_os_family | lower }} => redhat
Zeichenfolge klein schreiben
Zeichenfolge klein schreiben

Beispiel 2: Ersetzen Sie einen String durch einen anderen

Darüber hinaus können Sie eine Zeichenfolge durch eine andere ersetzen.

Beispielsweise:

Der Filmtitel ist {{ movie_name }} => Der Filmtitel ist Ring.

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

Der Filmtitel ist {{ movie_name | replace (“Ring“,”Heist”) }} => Der Filmtitel ist Raub.

Beispiel 3: Listet Filter auf und legt sie fest

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

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

Verwenden Sie zum Abrufen der größten Anzahl die Taste max Filter.

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

Verwenden Sie die Taste, um eindeutige Werte anzuzeigen einzigartig Filter.

{{ [ 2, 3, 3, 2, 6, 7 ] | unique }} => 2, 3

Verwenden Sie die zufällig filtern, um eine Zufallszahl zwischen 0 und dem Wert zu erhalten.

{{ 50 | random }} =>  Some random number

LOOPS:

Genau wie in Programmiersprachen haben wir Schleifen in Ansible Jinja2.

Um beispielsweise eine Datei mit einer Liste von Zahlen zu generieren, verwenden Sie die für Schleife wie im folgenden Beispiel gezeigt:

Beispiel 1:

{% for number in [0, 1, 2, 3, 4, 5, 6, 7]  %}
{{ number }}
{% end for %}

Sie können die for-Schleife auch mit kombinieren ansonsten Anweisungen zum Filtern und Abrufen bestimmter Werte.

Beispiel 2:

{% for number in [0, 1, 2, 3, 4, 5, 6, 7]  %}
{% if number == 5 %}
         {{ number }}
{% endif%}
{% endfor %}

Und das wars für diesen Vortrag. Begleiten Sie uns beim nächsten Thema, wo wir uns an die Arbeit mit ansiblen Variablen und Fakten wagen werden.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *