Here is inventory file.
[abc]
host1
host2
[123]
host3
And main.yml
#play1
- hosts: abc
roles:
- { role: abc }
tasks:
...
#play2
- hosts: 123
roles:
- { role: 123 }
tasks:
debug: msg="{{inventory_hostname}}"
Basically I need to run some commands in host3 and the commands need host1 and host2 in it. So how can I get host1 and host2 which are in group abc into play2 debug: msg="{{inventory_hostname}}"
, I know inventory_hostname is getting host3. is there any other way I can get only host1 and host2. Let me know if I'm not clear.
Thanks in Advance.,
You can use the "groups" magic variable as discussed in the documentation .
groups is a list of all the groups (and hosts) in the inventory. This can be used to enumerate all hosts within a group.
So you can reference, eg, groups['abc']
or groups['abc'][0]
.
This is the one line solution:
- name: Print hostnames of 'registry' inventory group
vars:
registry_hostnames: "{{ groups['registry'] | map('extract', hostvars) | map(attribute='ansible_host') }}"
debug:
var: registry_hostnames
It uses the inventory names listed in groups
variable to access the hostvars
variable (with the inventory names as indices). From the resulting list we can use another map to access the inventory variable that we're interested in.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.