ansible - 从清单中获取所有主机名和相应 ansible_host 值的列表

Zul*_*kis 3 ansible

我的库存如下所示:

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
...
Run Code Online (Sandbox Code Playgroud)

由此,我需要提取这样的列表:

- 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
Run Code Online (Sandbox Code Playgroud)

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

我还可以ansible_host使用 获取每个主机的值hostvars['<hostname>']['ansible_host']

我如何结合它来创建我需要的列表?

Vla*_*tka 5

例如

host_ip: "{{ dict(ansible_play_hosts_all|
                  zip(ansible_play_hosts_all|
                      map('extract', hostvars, 'ansible_host'))) }}"
Run Code Online (Sandbox Code Playgroud)

创建字典

  host_ip:
    app0: 10.0.0.3
    app1: 10.0.0.4
    db0: 10.0.0.1
    db1: 10.0.0.2
Run Code Online (Sandbox Code Playgroud)

然后,使用dict2items创建列表

host_ip_list: "{{ host_ip|dict2items(key_name='name',
                                     value_name='ip') }}"
Run Code Online (Sandbox Code Playgroud)

给出预期的结构

  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
Run Code Online (Sandbox Code Playgroud)