简体   繁体   中英

Ansible get hostnames from one group as a variable to another play

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM