Sorry to drag up an old thread, but this was one of the closer conversations out of the ones I found for what I was seeing.
Looking through old tickets, it looks like there used to be an issue when accessing hostvars[inventory_hostname] that you would not get all the vars associated with the host, such as ones added from add_host call. I see this does work, however, if I debug just the hostvars itself (not hostvars[inventory_hostname]) I don’t get the same results.
The var does exist, and it can be used in plays, I mainly keep running into this as I am debugging and trying to see what vars exist for all hosts
Given a host file of:
[launched]
10.0.3.234 test_var=test
10.0.3.162 test_var=test
And a playbook of
- name: Playbook testing inventory var debugging
hosts: launched
user: root
gather_facts: yes
tasks:
- name: Output inventory var
debug: var=test_var
- name: Output inventory var from hostvars
debug: var=hostvars[inventory_hostname].test_var
- name: Output hostvars[inventory_hostname]
debug: var=hostvars[inventory_hostname]
debug: var=hostvars
The last debug for var=hostvars will not output the vars from the inventory file. The var exists, so this is kind of cosmetic, but it threw me off for a bit as I was working with add_host for dynamic EC2 provisioning and wasn’t seeing the vars I was expecting when doing debug hostvars to look at all the vars for all hosts.
(ansible)[ec2-user@ip-10-0-0-226 playbooks]$ ansible-playbook -i launched test_inventory_var_debug.yml
PLAY [Playbook testing inventory var debugging] *******************************
GATHERING FACTS ***************************************************************
ok: [10.0.3.162]
ok: [10.0.3.234]
TASK: [Output inventory var] **************************************************
ok: [10.0.3.234] => {
“test_var”: “test”
}
ok: [10.0.3.162] => {
“test_var”: “test”
}
TASK: [Output inventory var from hostvars] ************************************
ok: [10.0.3.234] => {
“hostvars[inventory_hostname].test_var”: “test”
}
ok: [10.0.3.162] => {
“hostvars[inventory_hostname].test_var”: “test”
}
TASK: [Output hostvars[inventory_hostname]] ***********************************
ok: [10.0.3.234] => {
“hostvars[inventory_hostname]”: {
“ansible_all_ipv4_addresses”: [
“10.0.3.234”
],
…
“ansible_virtualization_type”: “xen”,
“group_names”: [
“launched”
],
“inventory_hostname”: “10.0.3.234”,
“inventory_hostname_short”: “10”,
“module_setup”: true,
“test_var”: “test”
}
}
ok: [10.0.3.162] => {
“hostvars[inventory_hostname]”: {
“ansible_all_ipv4_addresses”: [
“10.0.3.162”
],
…
“ansible_virtualization_type”: “xen”,
“group_names”: [
“launched”
],
“inventory_hostname”: “10.0.3.162”,
“inventory_hostname_short”: “10”,
“module_setup”: true,
“test_var”: “test”
}
}
TASK: [Output hostvars] *******************************************************
ok: [10.0.3.234] => {
“hostvars”: {
“10.0.3.162”: {
“ansible_all_ipv4_addresses”: [
“10.0.3.162”
],
…
“ansible_virtualization_type”: “xen”,
“module_setup”: true
}
}
}
ok: [10.0.3.162] => {
“hostvars”: {
“10.0.3.162”: {
“ansible_all_ipv4_addresses”: [
“10.0.3.162”
],
…
“ansible_virtualization_type”: “xen”,
“module_setup”: true
}
}
}
PLAY RECAP ********************************************************************
10.0.3.162 : ok=5 changed=0 unreachable=0 failed=0
10.0.3.234 : ok=5 changed=0 unreachable=0 failed=0
Anyways, let me know if I misunderstand this or if there is a different var to be looking at for the inventory vars. I can open an issue ticket also.
Thanks!
Michael