J'utilise ansible 2.1. J'ai le fichier hôte d'inventaire suivant et un rôle appelé par une lecture qui doit accéder à la variable de fichier hôte. Avez-vous des idées sur la façon d’y accéder (en train d’obtenir une erreur):
Fichier hôte
[test1]
test-1 ansible_ssh_Host=abc.def.ghi.jkl ansible_ssh_port=1212
[test2]
test2-1 ansible_ssh_Host=abc.def.ghi.mno ansible_ssh_port=1212
[test3]
test3-1 ansible_ssh_Host=abc.def.ghi.pqr ansible_ssh_port=1212
test3-2 ansible_ssh_Host=abc.def.ghi.stu ansible_ssh_port=1212
[all:children]
test1
test2
test3
role J'ai essayé d'accéder au rôle de la manière suivante:
{{ hostvars.ansible_ssh_Host }}
&&
{{ hostvars.test1.ansible_ssh_Host }}
J'essaie d'accéder à ansible_ssh_Host dans la section test1.
Erreur
fatal: [localhost]: FAILED! => {"failed": true, "msg": "'ansible.vars.hostvars.HostVars object' has no attribute 'ansible'"}
Vous êtes sur la bonne voie concernant hostvars
.
Cette variable magique est utilisée pour accéder aux informations sur d’autres hôtes.
hostvars
est un hachage avec des noms d'hôte d'inventaire comme clés.
Pour accéder aux champs de chaque hôte, utilisez hostvars['test-1']
, hostvars['test2-1']
, etc.
ansible_ssh_Host
est obsolète en faveur de ansible_Host
depuis 2.0.
Donc, vous devez d’abord supprimer "_ssh" des arguments des hôtes d’inventaire (pour devenir "ansible_user", "ansible_Host" et "ansible_port"), puis, dans votre rôle, appelez-le avec:
{{ hostvars['your_Host_group'].ansible_Host }}
[Host_group]
Host-1 ansible_ssh_Host=192.168.0.21 node_name=foo
Host-2 ansible_ssh_Host=192.168.0.22 node_name=bar
[Host_group:vars]
custom_var=asdasdasd
Vous pouvez accéder aux vars de groupe d’hôtes en utilisant:
{{ hostvars['Host_group'].custom_var }}
Si vous avez besoin d'une valeur spécifique provenant d'un hôte spécifique, vous pouvez utiliser:
{{ hostvars[groups['Host_group'][0]].node_name }}
Vous devriez pouvoir utiliser le nom de variable directement
ansible_ssh_Host
Ou vous pouvez passer par hostvars sans avoir à spécifier l'hôte littéralement en utilisant la variable magicinventory_hostname
hostvars[inventory_hostname].ansible_ssh_Host
J'ai également trouvé un moyen simple et agréable de contacter hostsvars directement sur l'un des problèmes Github d'Ansible
On dirait que vous pouvez le faire aussi:
- debug:
msg: "{{ ansible_ssh_Host }}"