Dans mon inventaire, je définis les hôtes comme ceci:
[server1]
141.151.176.223
Je cherche une variable qui garde le nom server1
, car je l'utilise pour définir le nom d'hôte du serveur.
inventory_hostname
est défini sur 141.151.176.223
ansible_hostname
ainsi que inventory_hostname_short
est défini sur 148
.
Pour contourner ce problème, je mets ma propre variable comme ceci:
[server1]
141.151.176.223 hostname=server1
mais je ne suis pas satisfait de cette approche.
Des idées?
Explication
Si le fichier d'inventaire a été défini de cette façon:
[server1_group]
server1 ansible_Host=141.151.176.223
Ensuite, vous pouvez accéder à:
server1
avec le inventory_hostname
fait;
141.151.176.223
avec le ansible_Host
fait;
server1_group
avec group_names|first
(group_names
fait contient une liste de tous les groupes auxquels le serveur appartient, first
sélectionne le premier élément de cette liste).
Indépendamment de ce qui précède, ansible_hostname
fait contient le nom d'hôte tel qu'il est défini sur l'hôte lui-même (la valeur est définie lors de la collecte des faits).
Solution
Vous devez utiliser une déclaration ansible_Host
standard pour pointer sur l'adresse IP de la cible et définir le nom d'hôte d'inventaire sur la manière dont vous souhaitez faire référence au serveur dans les playbooks Ansible.
En particulier, vous pouvez ignorer la définition des groupes et définir simplement:
server1 ansible_Host=141.151.176.223
La déclaration [server1]
est le nom d'un groupe et non d'un hôte (même si vous n'affectez qu'un seul hôte à ce groupe).
Comme ansible permet de placer un hôte dans plusieurs groupes, vous ne pouvez obtenir les noms qu’en tant que tableau: http://docs.ansible.com/ansible/latest/playbooks_variables.html#magic-variables-and-how- to-access-information-about-other-hosts
Je pense donc que la solution de contournement que vous avez trouvée est la voie à suivre, à moins que vous ne puissiez utiliser de vrais noms d'hôte au lieu d'adresses IP (à l'aide de DNS ou simplement d'un fichier d'hôtes statique).