Question Comment accéder à la variable hôte d'un hôte différent avec Ansible?


Disons qu'un hôte a une base de données qui fait partie d'un groupe [collectors]. J'ai aussi des hôtes en groupe [reporters]. Donc, je veux définir une variable sur les journalistes de groups['collectors'][0] adresse IP. Mais le playbook pour la mise en place de journalistes ne fonctionne pas [collectors] groupe donc les faits pour cet hôte ne sont pas collectés. Est-il possible de ne pas coder en dur l'adresse IP?


39
2017-10-21 08:05


origine




Réponses:


Vous pouvez accéder à peu près à tous les faits / variables d'inventaire en procédant comme suit:

{{ 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 voudriez donc modifier votre livre de jeu qui fonctionne contre le groupe de journalistes afin d'inclure une tâche non-op (factice) appliquée au groupe de collectionneurs. Ceci permettra à Ansible de collecter des informations sur les hôtes collecteurs afin de pouvoir y accéder à partir du groupe de journalistes. Donc, vous voudrez peut-être ajouter quelque chose comme ceci en haut de votre classeur de journalistes:

- hosts: collectors
  name: Gather facts from collectors
  tasks: [ ]

Les crochets vides signifient en gros qu'aucune tâche ne sera exécutée, mais cela obligera Ansible à rassembler des informations sur les collecteurs afin que vous puissiez ensuite les référencer dans les tâches que vous exécutez contre vos journalistes.

Modifier # 1

Je me suis dit que je devrais aussi mentionner que depuis la version 1.8 de Ansible, il existe une mise en cache des faits fonctionnalité qui est maintenant disponible. La mise en cache des faits repose sur un serveur Redis pour stocker les faits entre les exécutions du livre de lecture. Lorsque cette fonction est activée, un livre de lecture peut faire référence à des faits obtenus par un autre livre de lecture 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 de 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 «toucher» tous les serveurs pour référencer les variables et les informations les concernant.


74
2017-10-23 21:37



Est-il possible de définir l'index associatif en tant que variable? par exemple ansible localhost --extra-vars "metamorphosis_ip = 172.16.3.73" -a "echo {{hostvars [{{metamorphosis_ip}}] ['inv_domain']}}" - corretge
Pour ajouter à la réponse ci-dessus, assurez-vous de référencer la FAQ Ansible ici: docs.ansible.com/ansible/faq.html ce qui explique des choses en détail, comme une boucle sur un groupe d'hôtes ou la définition d'une variable pour obtenir un hôte spécifique dans un groupe. - einarc
Tu es l'homme!!! - dsutherland
Merci pour l'idée de récupérer des faits à partir d'un nœud avec une liste de tâches vide. - pedz