Umfassender Leitfaden zur Konfiguration des Ansible-Fakten-Cachings
Konfigurieren Sie das Ansible-Fakten-Caching mit jsonfile oder Redis, legen Sie Timeouts fest, löschen Sie veraltete Cache-Daten und vermeiden Sie wiederholten Overhead durch Faktenabfragen.
Umfassender Leitfaden zur Konfiguration des Ansible-Fakten-Cachings
Das Ansible-Fakten-Caching hilft, wenn Ihre Playbooks zu viel Zeit damit verbringen, bei jedem Durchlauf dieselben Host-Fakten zu sammeln. Wenn Sie Hunderte von Hosts verwalten, können wiederholte setup-Modulaufrufe spürbaren SSH-Overhead verursachen, bevor die eigentliche Arbeit beginnt.
Das Fakten-Caching speichert gesammelte Fakten nach einem erfolgreichen Durchlauf und verwendet sie erneut, solange der Cache gültig ist. Das Ergebnis ist ein schnellerer Playbook-Start für Workflows, die mit leicht veralteten Fakten umgehen können.
Verständnis von Ansible-Fakten und Leistungsauswirkungen
Ansible sammelt Fakten mit dem setup-Modul, entweder explizit oder durch das Standardverhalten gather_facts: true. Zu den Fakten gehören Details wie Betriebssystemfamilie, Kernel, IP-Adressen, Mounts, CPU, Speicher und Informationen zum Python-Interpreter.
Der Leistungsgewinn ergibt sich aus der Vermeidung wiederholter Remote-Sammlungen, wenn zwischengespeicherte Daten aktuell sind. Dies ist nützlich für Berichte, Vorlagen und bedingte Logik, die von Fakten abhängt, die sich nicht minütlich ändern.
Konfigurationsmethoden für das Fakten-Caching
Ansible konfiguriert das Fakten-Caching in ansible.cfg. Zwei praktische Optionen sind lokale JSON-Dateien und Redis. Die genauen Plugin-Namen sind wichtig.
1. JSON-Datei-Caching (Lokaler Speicher)
Der JSON-Datei-Cache speichert Fakten auf dem Steuerungsrechner. Er ist einfach und benötigt keinen externen Dienst.
Konfiguration des JSON-Cachings in ansible.cfg
Verwenden Sie das jsonfile-Cache-Plugin:
[defaults]
fact_caching = jsonfile
fact_caching_connection = /pfad/zu/ansible_facts_cache
fact_caching_timeout = 600
fact_caching_connection ist das Verzeichnis, in das Ansible Cache-Dateien schreibt. Erstellen Sie es zuerst und stellen Sie sicher, dass der Benutzer, der Ansible ausführt, Schreibrechte hat:
mkdir -p /pfad/zu/ansible_facts_cache
fact_caching_timeout wird in Sekunden gemessen. Nach Ablauf des Timeouts sammelt Ansible erneut aktuelle Fakten, wenn ein Play sie benötigt.
2. Redis-Caching (Gemeinsamer, leistungsstarker Speicher)
Redis eignet sich besser, wenn mehrere Steuerungsknoten, Benutzer oder CI-Jobs denselben Fakten-Cache gemeinsam nutzen sollen.
Voraussetzungen für Redis-Caching
Sie benötigen einen erreichbaren Redis-Server und den Python-Redis-Client in der von Ansible verwendeten Python-Umgebung:
python -m pip install redis
Konfiguration des Redis-Cachings in ansible.cfg
Verwenden Sie eine Redis-Verbindungszeichenfolge:
[defaults]
fact_caching = redis
fact_caching_connection = 127.0.0.1:6379/0
fact_caching_timeout = 3600
Das /0 wählt die Redis-Datenbank 0 aus. Verwenden Sie eine dedizierte Datenbank oder Redis-Instanz, wenn auch andere Anwendungen Redis nutzen, und schützen Sie den Redis-Endpunkt wie jede andere Infrastrukturkomponente.
Integration des Cachings in Playbooks
Der Cache wird befüllt, wenn ein Play Fakten sammelt:
- name: Fakten sammeln und verwenden
hosts: webserver
gather_facts: true
tasks:
- name: Betriebssystemfamilie anzeigen
debug:
msg: "Die Betriebssystemfamilie ist {{ ansible_os_family }}"
Mit aktiviertem Fakten-Caching kann Ansible zwischengespeicherte Fakten wiederverwenden, solange sie gültig sind. Wenn Fakten fehlen oder abgelaufen sind und gather_facts: true gesetzt ist, sammelt Ansible sie erneut.
Wenn Sie gather_facts: false setzen, führt Ansible für dieses Play keine Faktenabfrage durch. Zwischengespeicherte Fakten können möglicherweise weiterhin über Host-Variablen verfügbar sein, wenn sie bereits im Cache waren, aber verlassen Sie sich nicht blind darauf für kritische Logik. Ein fehlender Cache kann zu undefinierten Variablen führen.
Ein sicheres Muster ist es, Fakten in einem geplanten oder frühen Play zu sammeln und dann zwischengespeicherte Fakten in späteren Berichts- oder Orchestrierungs-Playbooks zu verwenden, bei denen Veraltung akzeptabel ist.
Verwaltung des Fakten-Caches
Löschen Sie den Cache, wenn sich Host-Fakten geändert haben und Sie nicht auf den Ablauf des Timeouts warten möchten.
Löschen des JSON-Caches
Löschen Sie die Dateien im konfigurierten Cache-Verzeichnis:
rm -rf /pfad/zu/ansible_facts_cache/*
Löschen des Redis-Caches
Wenn die Redis-Datenbank ausschließlich für Ansible-Fakten verwendet wird, können Sie diese Datenbank leeren:
redis-cli -n 0 FLUSHDB
FLUSHDB löscht alle Schlüssel in der ausgewählten Redis-Datenbank. Führen Sie diesen Befehl nicht auf einer gemeinsam genutzten Datenbank aus, es sei denn, Sie wissen, dass alle dortigen Schlüssel sicher gelöscht werden können.
Best Practices
- Verwenden Sie
jsonfilefür einen einzelnen Steuerungsrechner und einfache lokale Workflows. - Verwenden Sie Redis, wenn mehrere Runner denselben Cache benötigen.
- Halten Sie Timeouts kurz für sich schnell ändernde Infrastrukturen und länger für stabile Umgebungen.
- Speichern Sie sensible benutzerdefinierte Fakten nicht an einem Ort, den andere Benutzer lesen können.
- Überprüfen Sie, welche Konfigurationsdatei Ansible verwendet, mit
ansible --version. - Testen Sie mit einer Inventargruppe, bevor Sie das Caching für eine große Umgebung aktivieren.
Praktische Erkenntnisse
Aktivieren Sie das Ansible-Fakten-Caching, wenn wiederholte Faktenabfragen messbare Kosten verursachen und Ihre Playbooks mit zwischengespeicherten Daten umgehen können. Beginnen Sie mit jsonfile, wechseln Sie nur dann zu Redis, wenn die gemeinsame Nutzung des Caches ein echtes Workflow-Problem löst, und setzen Sie ein Timeout, das der Häufigkeit der Änderungen Ihrer Host-Fakten entspricht.