ansible - インベントリからすべてのホスト名と対応する ansible_host 値のリストを取得します

ansible - インベントリからすべてのホスト名と対応する ansible_host 値のリストを取得します

私の在庫は次のようになります:

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

関連情報