
Ansible sammelt vor jedem Durchlauf eines Playbooks erst einmal die Fakten (facts) zu den Systemen, die es konfigurieren soll. Hierbei werden grundlegende Einstellungen ermittelt. In diesem Artikel wollen wir uns zwei Aspekte näher ansehen: Erstens: Wie kommen wir an die verfügbaren Informationen? Zweitens: Was tun, wenn diese Informationen nicht reichen? Wie können wir die grundlegende Funktion erweitern?
Ansible ermittelt zu Beginn jedes Durchlaufs automatisch mithilfe des Setup-Moduls systemspezifische Einstellungen. Eine Übersicht aller Fakten erhalten wir mit dem folgenden Befehl:
Die Fakten speichert Ansible auf dem Server ab, sofern die entsprechenden Konfigurationsoptionen gesetzt sind.
Das angegebene Verzeichnis muss der Administrator bei Bedarf manuell anlegen.
Führt das Betriebsteam ein Playbook aus, legt Ansible für jeden Host eine eigene JSON-Datei an, die genauso heißt wie der Host-Eintrag im Inventar.
Die abgerufenen Werte können wir dann wie normale Variablen in unseren Playbooks bzw. Rollen verwenden und somit anhand unterschiedlicher Kriterien (z. B. ansible_distribution) auch unterschiedliche Aktionen ausführen.
Obwohl die abgeholten Informationen recht umfangreich sind, reichen sie mitunter nicht aus. Wir haben nun folgende Möglichkeiten, unsere Fakten zu erweitern.
Soll ein System weitere Informationen liefern, so legen wir auf dem Zielhost (nicht dem Server) eine entsprechende Datei unterhalb /etc/ansible/facts.d an. Den Namen der Datei verwenden wir für den Aufbau des Faktenbaums, er endet mit .fact.
Als Format stehen wahlweise INI oder JSON zur Verfügung. Anschließend überprüfen wir die Funktion:
Die statischen Fakten befinden sich immer unterhalb ansible_local; die Schlüssel werden hierbei automatisch zu Kleinbuchstaben konvertiert.
Diese Vorgehensweise macht immer dann Sinn, wenn Applikations- oder Systemverantwortliche statische Informationen auf dem System hinterlegen wollen. Wollen wir jedoch systemspezifische Werte auslesen, z. B. Firmwarestände, so benötigen wir einen anderen Weg.
Parallel zur vorher genannten Variante gibt es auch die Option, Werte zur Laufzeit zu ermitteln. Hierbei ist jedoch der in Ansible konfigurierte Timeout zu beachten.
Auch hier verwenden wir wieder das o. g. Verzeichnis. In diesem Fall jedoch muss die Datei ausführbar sein und JSON zurückliefern.
Ob alles wie gewünscht funktioniert, prüfen wir wieder über die Konsole:
Die Erweiterung der Fakten kann auch über eine entsprechende Rolle via Ansible ausgerollt werden.
Prinzipiell lassen sich diese Informationen auch über einen Task holen. Jedoch sind Skripte, die sich bereits auf den Maschinen befinden, deutlich schneller und stehen sämtlichen Rollen zur Verfügung. Außerdem kann ein Admin die Fakten für eine automatisierte Aufbereitung verwenden. Wie, das erfahren Sie im nächsten Teil der Serie.
Sie möchten Ansible live erleben? Kontaktieren Sie uns für eine Demo.