Ansible

ansible - 從清單中獲取所有主機名和相應 ansible_host 值的列表

  • April 4, 2022

我的庫存如下所示:

db0 ansible_host=10.0.0.1
db1 ansible_host=10.0.0.2
app0 ansible_host=10.0.0.3
app1 ansible_host=10.0.0.4
...

從中,我需要提取一個這樣的列表:

- name: db0
 ip: 10.0.0.1
- name: db1
 ip: 10.0.0.2
- name: app0
 ip: 10.0.0.3
- name: app1
 ip: 10.0.0.4

我知道我可以讓所有主機使用groups['all'].

我還可以ansible_host使用hostvars['<hostname>']['ansible_host'].

我如何結合它來創建我需要的列表?

例如

host_ip: "{{ dict(ansible_play_hosts_all|
                 zip(ansible_play_hosts_all|
                     map('extract', hostvars, 'ansible_host'))) }}"

創建字典

 host_ip:
   app0: 10.0.0.3
   app1: 10.0.0.4
   db0: 10.0.0.1
   db1: 10.0.0.2

然後,使用dict2items創建列表

host_ip_list: "{{ host_ip|dict2items(key_name='name',
                                    value_name='ip') }}"

給出預期的結構

 host_ip_list:
 - ip: 10.0.0.1
   name: db0
 - ip: 10.0.0.2
   name: db1
 - ip: 10.0.0.3
   name: app0
 - ip: 10.0.0.4
   name: app1

引用自:https://serverfault.com/questions/1097743