我的库存如下所示:
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']
。
我如何结合它来创建我需要的列表?
例如
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)
归档时间: |
|
查看次数: |
7691 次 |
最近记录: |