Digamos que eu tenha um host que coleta alguns dados e
está em um grupo [collectors]
. Eu também tenho hosts em grupo [reporters]
.
Então, quero definir uma variável nos repórteres do groups['collectors'][0]
endereço IP. Mas o manual para configurar repórteres não é executado no [collectors]
grupo, portanto, os fatos para esse host não são coletados. Existe uma maneira de não codificar o endereço IP?
Você pode acessar praticamente qualquer fato/variável de inventário fazendo algo assim:
ou, se você quiser fazer isso por meio de um índice em um grupo:
O grande truque é que você precisa coletar os fatos de todos os hosts/grupos nos quais está interessado. Portanto, você gostaria de modificar seu manual executado no grupo de repórteres para incluir uma tarefa não operacional (fictícia) que é aplicada ao grupo de coletores. Isso fará com que o Ansible colete fatos sobre os hosts coletores para que possam ser acessados a partir do grupo reporters. Então, você pode querer adicionar algo como isto ao topo do seu manual de repórteres:
Os colchetes vazios basicamente significam que nenhuma tarefa será executada, mas isso ainda forçará o Ansible a coletar fatos sobre os coletores para que você possa referenciá-los nas tarefas executadas contra seus repórteres.
Editar #1
Ocorreu-me que também devo mencionar que, a partir da versão 1.8 do Ansible, há um recurso de cache de fatos que agora está disponível. O cache de fatos depende de um servidor redis para armazenar fatos entre as execuções do playbook. Com ele ativado, um playbook pode fazer referência a fatos que foram obtidos por outro playbook que foi executado anteriormente. O exemplo que a documentação do Ansible fornece: