
私の在庫は次のようになります:
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']
。
これを組み合わせて必要なリストを作成するにはどうすればよいでしょうか?
答え1
例えば
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
次に、辞書2アイテムリストを作成する
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