Вы можете получить доступ к любым фактам / переменным инвентаризации, выполнив что-то вроде этого:
{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}
или, если вы хотите сделать это через индекс в группу:
{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}
Большая хитрость заключается в том, что вам нужно собирать факты для всех интересующих вас хостов / групп. Таким образом, вы захотите изменить свою игровую книгу, которая работает против группы репортеров, для включения в нее задачи no-op (dummy), которая применяется. группе коллекционеров. Это заставит Ansible собирать факты о хостах сборщиков, чтобы к ним можно было получить доступ из группы репортеров. Так что вы можете добавить что-то вроде этого в начало своего репортерского репортажа:
- hosts: collectors
name: Gather facts from collectors
tasks: [ ]
Пустые скобки в основном означают, что никакие задачи не будут выполнены, но это все равно заставит Ansible собирать факты о сборщиках, чтобы вы могли затем ссылаться на них в задачах, которые вы выполняете против своих репортеров.
Редактировать # 1
Мне пришло в голову, что я должен также упомянуть, что начиная с версии 1.8 Ansible, есть функция кэширования фактов, которая теперь доступна. Кэширование фактов использует сервер Redis для хранения фактов между запусками playbook. Если он включен, одна книга воспроизведения может ссылаться на факты, полученные другой книгой, которая была запущена ранее. Пример документации Ansible дает:
Представьте, например, очень большую инфраструктуру с тысячами хостов. Кэширование фактов может быть настроено на ночное выполнение, но конфигурация небольшого набора серверов может выполняться в режиме ad-hoc или периодически в течение дня. Если включено кэширование фактов, нет необходимости «обращаться» ко всем серверам, чтобы ссылаться на переменные и информацию о них.