web-dev-qa-db-fra.com

accéder à la variable hôte de l'hôte dans Playbook

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'"}
26
ali haider

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 }}
33
Konstantin Suvorov
[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 }}
8
Eduardo Cuomo

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
5
Jason S

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 }}"
0
Michael