Question:
In Ansible 2.1, I have a role being called by a playbook that needs access to a host file variable. Any thoughts on how to access it?
I am trying to access the ansible_ssh_host
in the test1
section of the following inventory host
file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[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 |
I have tried accessing the role in the following fashions:
1 2 |
{{ hostvars.ansible_ssh_host }} |
and
1 2 |
{{ hostvars.test1.ansible_ssh_host }} |
I get this error:
1 2 |
fatal: [localhost]: FAILED! => {"failed": true, "msg": "'ansible.vars.hostvars.HostVars object' has no attribute 'ansible'"} |
Answer:
You are on the right track about hostvars
.
This magic variable is used to access information about other hosts.
hostvars
is a hash with inventory hostnames as keys.
To access fields of each host, use hostvars['test-1']
, hostvars['test2-1']
, etc.
ansible_ssh_host
is deprecated in favor of ansible_host
since 2.0.
So you should first remove “_ssh” from inventory hosts arguments (i.e. to become “ansible_user”, “ansible_host”, and “ansible_port”), then in your role call it with:
1 2 |
{{ hostvars['your_host_group'].ansible_host }} |