Możesz uzyskać dostęp do prawie wszystkich faktów / zmiennych dotyczących zapasów, wykonując coś takiego:
{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}
lub, jeśli chcesz to zrobić poprzez indeks do grupy:
{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}
Wielka sztuczka polega na tym, że musisz zebrać fakty dotyczące wszystkich hostów / grup, którymi jesteś zainteresowany. Dlatego chciałbyś zmodyfikować swój podręcznik, który działa przeciwko grupie reporterów, tak aby zawierał zastosowane zadanie braku działania do grupy kolekcjonerów. Spowoduje to, że Ansible zbierze fakty na temat hostów kolekcjonerów, aby uzyskać do nich dostęp z grupy reporterów. Możesz więc dodać coś takiego na początku poradnika dla reporterów:
- hosts: collectors
name: Gather facts from collectors
tasks: [ ]
Puste nawiasy oznaczają, że żadne zadania nie zostaną wykonane, ale to zmusi Ansible do zbierania faktów o kolekcjonerach, abyś mógł odwoływać się do nich w zadaniach, które wykonujesz przeciwko swoim reporterom.
Edytuj nr 1
Przyszło mi do głowy, że powinienem również wspomnieć, że od wersji 1.8 Ansible dostępna jest funkcja buforowania faktów . Buforowanie faktów polega na serwerze redis do przechowywania faktów między uruchomieniami playbooka. Po włączeniu jeden podręcznik może odnosić się do faktów uzyskanych przez inny wcześniej uruchomiony podręcznik. Przykład podany w dokumentacji Ansible:
Wyobraź sobie na przykład bardzo dużą infrastrukturę z tysiącami hostów. Faktyczne buforowanie można skonfigurować tak, aby działało w nocy, ale konfiguracja niewielkiego zestawu serwerów może działać ad-hoc lub okresowo przez cały dzień. Po włączeniu buforowania faktów nie byłoby konieczne „trafianie” wszystkich serwerów w celu odniesienia do zmiennych i informacji o nich.