Imaginons un hôte qui collecte des données et qui se trouve dans un groupe [collectors]
. J'ai également des hôtes dans le groupe [reporters]
. Je veux donc définir une variable sur les journalistes de groups['collectors'][0]
adresse IP. Mais le manuel de configuration des reporters ne fonctionne pas sur [collectors]
groupe afin que les faits concernant cet hôte ne soient pas collectés. Existe-t-il un moyen de ne pas coder en dur l'adresse IP?
Vous pouvez accéder à pratiquement tous les faits/variables d'inventaire en faisant quelque chose comme ceci:
{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}
ou, si vous voulez le faire via un index dans un groupe:
{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}
Le gros truc est que vous devez collecter les faits pour tous les hôtes/groupes qui vous intéressent. Vous voudrez donc modifier votre livre de lecture qui s'exécute contre le groupe de journalistes pour inclure une tâche sans opération (factice) qui est appliquée au groupe des collectionneurs. Cela entraînera Ansible à collecter des faits sur les hôtes des collecteurs afin qu'ils soient accessibles à partir du groupe de journalistes. Donc, vous voudrez peut-être ajouter quelque chose comme ça en haut de votre playbook de journalistes:
- hosts: collectors
name: Gather facts from collectors
tasks: [ ]
Les crochets vides signifient essentiellement qu'aucune tâche ne sera exécutée, mais cela forcera toujours Ansible à rassembler des faits sur les collecteurs afin que vous puissiez ensuite les référencer dans les tâches que vous exécutez contre vos journalistes.
Il m'est venu à l'esprit que je devrais également mentionner qu'à partir de la version 1.8 d'Ansible, il y a une fonctionnalité fact-caching qui est maintenant disponible. La mise en cache des faits repose sur un serveur redis pour stocker les faits entre les exécutions de playbooks. Lorsqu'il est activé, un playbook peut référencer des faits obtenus par un autre playbook exécuté précédemment. L'exemple de la documentation Ansible donne:
Imaginez, par exemple, une très grande infrastructure avec des milliers d'hôtes. La mise en cache des faits peut être configurée pour s'exécuter la nuit, mais la configuration d'un petit ensemble de serveurs peut s'exécuter de manière ponctuelle ou périodique tout au long de la journée. Avec la mise en cache des faits activée, il ne serait pas nécessaire de "frapper" tous les serveurs pour référencer les variables et les informations les concernant.