Jinja

Dateien und Konfigurationen mit dynamisch Inhalten versehen.

Die Python-Template-Engine

Jinja in SLS-Dateien verwenden

Alls SLS-Dateien werden immer durch die 📖 Jinja-Template-Engine "gejagt". Jinja wird aktiv, sobald es die Zeichenketten {{ }} oder {% %} findet.

Innerhalb von {% %} definieren Sie Logik oder weisen Variablen Werte zu, z.B. {% set name='Salt' %}

{{ var }} veranlasst ein Suchen und Ersetzen. Die Variable innerhalb der Klammern wird durch ihren Wert ersetzt.

Variablen

🧩 Aufgabe

Schauen Sie sich das Beispiel zu Installation von Netdata noch einmal an. Dort wird die Versionsnummer mehrfach wiederholt. Optimieren Sie diesen State, sodass die Netdata Version nur einmal über eine Jinja-Variable definiert wird.

Fallunterscheidungen (if/else)

🧩 Aufgabe

  1. Erstellen Sie einen State in init/ssh.sls, welcher den SSH-Server und Client für die unterschiedlichen Distributionen installiert.

  2. Legen Sie anschließend einen State init/init.sls an, der alle im Ordner init gespeicherten States inkludiert. Ziel ist es, dass man mit salt '*' state.apply init alle Minions »initialisieren« kann, d. h. alle Basis-Konfigurationen werden angewendet.

Lösung

Die Einrückung der Jina-Anweisungen spielen keine Rolle. Die SLS-Datei wird erst von Jinja verarbeitet, wobei alle Jinja-Anweisungen inklusive der Steuerzeichen entfernt werden. Danach wird die Datei an den Yaml-Interpreter des Minions übergeben, der nichts davon weiß, dass die Datei vorher von Jinja "manipuliert" wurde.

Schleifen

Mapping-Tabellen

In Kombination mit dem Modul kann man mit Jinja kann man Mappings ohne lange if-else-elseif-Konstruktionen erstellen. Wenn nichts anderes angegeben wird, wird das Grain os_family zum Filtern verwendet.

Mapping-Tabelle in Aktion

Salt-Module in Jinja aufrufen

Bedingungen testen und abbrechen

Beispiel Java installieren

Jina Line -Statements

Wer viel Jina in SLS-Dateien verwendet, kann auf die öffnenden und schließenden Klammern {% %} verzichten, und die sogenannten Line-Statements aktivieren. Damit kann eine komplette Zeile als Jinja-Zeile gekennzeichnet werden.

Variablen in Variablenzuweisung einfügen

Variablen können andere Variablen enthalten.

Last updated