Você pode acessar praticamente todos os fatos / variáveis do inventário fazendo algo assim:
{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}
ou, se você quiser fazer isso através de um índice em um grupo:
{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}
O grande truque é que você precisa coletar os fatos de todos os hosts / grupos nos quais está interessado. Portanto, convém modificar seu playbook que é executado no grupo de repórteres para incluir uma tarefa não-operacional (fictícia) aplicada para o grupo de colecionadores. Isso fará com que a Ansible colete fatos sobre os hosts dos coletores, para que possam ser acessados pelo grupo de repórteres. Portanto, convém adicionar algo assim à parte superior do manual de repórteres:
- hosts: collectors
name: Gather facts from collectors
tasks: [ ]
Os colchetes vazios basicamente significam que nenhuma tarefa será executada, mas isso ainda forçará o Ansible a reunir fatos sobre os coletores, para que você possa referenciá-los nas tarefas que executa contra seus repórteres.
Editar # 1
Ocorreu-me que também devo mencionar que, na versão 1.8 do Ansible, existe um recurso de cache de fatos que agora está disponível. O cache de fatos depende de um servidor redis para armazenar fatos entre execuções de playbook. Com essa opção ativada, um manual pode fazer referência a fatos que foram obtidos por outro manual que foi executado anteriormente. O exemplo da documentação do Ansible fornece:
Imagine, por exemplo, uma infraestrutura muito grande com milhares de hosts. O cache de fatos pode ser configurado para ser executado todas as noites, mas a configuração de um pequeno conjunto de servidores pode ser executada ad-hoc ou periodicamente ao longo do dia. Com o cache de fatos ativado, não seria necessário "acertar" todos os servidores para fazer referência a variáveis e informações sobre eles.