Sie können auf so ziemlich alle Inventarfakten / -variablen zugreifen, indem Sie wie folgt vorgehen:
{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}
oder, wenn Sie es über einen Index in eine Gruppe tun möchten:
{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}
Der große Trick ist, dass Sie die Fakten für alle Hosts / Gruppen sammeln müssen, an denen Sie interessiert sind. Sie möchten also Ihr Playbook, das für die Reportergruppe ausgeführt wird, so ändern, dass es eine No-Op-Aufgabe (Dummy-Aufgabe) enthält, die angewendet wird an die Sammlergruppe. Dies veranlasst Ansible, Fakten über die Sammler-Hosts zu sammeln, so dass sie von der Reportergruppe aus abgerufen werden können. Vielleicht möchten Sie so etwas oben in Ihr Reporter-Playbook einfügen:
- hosts: collectors
name: Gather facts from collectors
tasks: [ ]
Die leeren Klammern bedeuten im Grunde, dass keine Aufgaben ausgeführt werden. Dies zwingt Ansible jedoch dazu, Fakten zu den Sammlern zu sammeln, damit Sie sie in den Aufgaben referenzieren können, die Sie für Ihre Reporter ausführen.
Bearbeiten Sie # 1
Mir ist der Gedanke gekommen, dass ich auch erwähnen sollte, dass es ab Version 1.8 von Ansible eine Funktion zum Zwischenspeichern von Fakten gibt, die jetzt verfügbar ist. Beim Zwischenspeichern von Fakten wird ein Redis-Server zum Speichern von Fakten zwischen Playbook-Läufen benötigt. Wenn diese Option aktiviert ist, kann ein Playbook auf Fakten verweisen, die von einem anderen Playbook abgerufen wurden, das zuvor ausgeführt wurde. Das Beispiel, das die Ansible-Dokumentation enthält:
Stellen Sie sich zum Beispiel eine sehr große Infrastruktur mit Tausenden von Hosts vor. Das Zwischenspeichern von Fakten kann so konfiguriert werden, dass es nachts ausgeführt wird, die Konfiguration einer kleinen Gruppe von Servern kann jedoch den ganzen Tag über ad-hoc oder regelmäßig ausgeführt werden. Bei aktiviertem Fact-Caching müssten nicht alle Server "getroffen" werden, um auf Variablen und Informationen zu diesen zu verweisen.