Inhalt

Ansible Templates: Jinja2 macht dir das leben leichter!

In diesem Blogbeitrag werde ich mit dir die Vorlagenerstellung mit Ansible erkunden, um Konfigurationsdateien zu parametrisieren und Variablen in Vorlagen zu nutzen.

Was sind Ansible-Vorlagen?

Vorlagen sind nützlich, wenn wir eine Datei wiederverwenden möchten, jedoch mit unterschiedlichen Parametern für verschiedene Anwendungsfälle oder Umgebungen.

Ansible verwendet Jinja2 als Standard-Templating-Engine, um dynamische Inhalte zu erstellen.

Einführung in Ansible Templating

Mit Ansible Templating können Benutzer dynamisch textbasierte Dateien mit Vorlagen, Variablen und Ansible-Fakten für die Konfiguration und andere Zwecke erstellen.

Das Hauptziel der Verwendung von Vorlagen besteht darin, die Verwaltung von Konfigurationsdateien für verschiedene Ziele und Anforderungen zu erleichtern und zu automatisieren.

Stellen dir vor, du musst mehrere ähnliche Umgebungen mit unterschiedlichen Anforderungen oder Spezifikationen verwalten. Anstatt Konfigurationsdateien für jedes Zielsystem manuell zu erstellen, zu pflegen und zu bearbeiten, kannst du Ansible-Vorlagen nutzen.

Die Vorlagen können dann mit anderen Ansible-Konzepten wie Fakten und Variablen kombiniert werden, um Dateien zu erstellen, die auf die spezifischen Anforderungen jedes Systems zugeschnitten sind, ohne dass Code dupliziert werden muss.

Die Aktualisierung von Konfigurationsdateien wird mit diesem Ansatz überschaubarer, da wir die Änderungen nur an einer Stelle vornehmen und alle Eingaben mit Variablen behandeln müssen, die während der Ausführung des Playbooks durch tatsächliche Werte ersetzt werden.

Vorlagenerstellung mit Jinja2

Jinja2 ist eine voll funktionsfähige Template-Engine für Python.

Die Jinja2-Templating-Engine ist sehr leistungsfähig und wird häufig mit anderen Frameworks und Anwendungen wie Flask und Django verwendet.

Jinja2-Vorlagen kombinieren einfache Textdateien und eine spezielle Syntax, um dynamische Inhalte zu definieren und zu ersetzen, Variablen, Ausdrücke, Schleifen und sogar bedingte Anweisungen einzubinden, um komplexe Ausgaben zu erzeugen. Der Dokumentation zufolge werden Ausdrücke in doppelte geschweifte Klammern {{ }}, Anweisungen in geschweifte Klammern mit Prozentzeichen {% %} und Kommentare in {# #} eingeschlossen.

Hier sind einiges Beispiele:

  • Jinja2-Beispiel mit einer Variablen namens favourite_os
1
Mein Lieblingsbetriebssystem ist {{ favourite_os }}
  • Beispiel für eine Jinja2 if-Anweisung
1
2
3
4
5
{% if age > 18 %}
Du bist volljährig und kannst im Abstimmungszentrum abstimmen: {{ voting_center }}
{% else %}
Du bist leider minderjährig und kannst noch nicht wählen.
{% endif %}
  • Beispiel einer Jinja2-Schleife
1
2
3
4
Hier ist eine Liste von Autos:
{% for car in cars %}
{{ car }}
{% endfor %}

Es ist wichtig zu betonen, dass die Erstellung von Vorlagen stattfindet, bevor die Aufgabe zum Zielrechner geschickt wird. Dadurch entfällt die Notwendigkeit, zusätzliche Pakete auf dem Zielrechner zu installieren.

Zudem bietet Jinja2 nützliche Standardfilter und -tests , die es ermöglichen, verschiedene Operationen durchzuführen. Dazu wird es demnächst auch eine Anleitung hier auf diesem Blog geben.

Viel Erfolg auf deiner Automatisierungsreise!


Gefällt dir der Post?

PS:

Schau auch gerne in meinem GitHub Repo vorbei.