Hello all,
I have an inventory file populated with two hosts and I would like to use the value of host B’s variable on host A. I had no luck with using hostvars in the template.
Example inventory file. Note this will be a dynamically generated file.
[host_a]
x.x.x.x
[host_a:vars]
eth0=192.168.1.1
eth1=192.168.2.1
[host_b]
x.x.x.x
[host_b:vars]
eth0=192.168.1.2
eth1=192.168.2.2
I want to use 192.168.2.1 from host_a’s variable in a template that will generate a config file on both host a and b. For example, the config on both hosts will have an entry like this: clustered_ips = 192.168.2.1, 192.168.2.2
I tried this in the template file but get undefined variable.
{{ hostvars[host_a][eth0] }}
How can I accomplish this?
Thanks in advance.
Steven
Without quotes inside they are taken as variables, so host_a and eth0 is taken as variables.
So you're looking for this
{{ hostvars['host_a']['eth0'] }}
The issue was not so much with the quoting ( I tried that as well before posting ) but the value host_a after hostvars. Ansible was looking for the IP address under the host heading.
Ex. {{ hostvars[‘x.x.x.x’][eth0] }}
Is there another way to do this? I would prefer not to put the IP or a DNS name in the template so real values don’t get checked into source code.
Thanks,
The issue was not so much with the quoting ( I tried that as well before
posting ) but the value host_a after hostvars. Ansible was looking for the
IP address under the host heading.
Ex. {{ hostvars['x.x.x.x'][eth0] }}
Of course, is't a group name.
Is there another way to do this? I would prefer not to put the IP or a DNS
name in the template so real values don't get checked into source code.
If you only have one host in the group this should work.
{{ hostvars[group['host_a'][0]]['eth0'] }}