Ansibleインベントリを取得してAnsible変数に埋める方法は?

Ansibleインベントリを取得してAnsible変数に埋める方法は?

サーバーセットを定義するマニフェストファイルがあります。

[prod]
prod1 ansible_host=10.10.2.30
prod2 ansible_host=10.10.2.40
prod3 ansible_host=10.10.2.50
prod4 ansible_host=10.10.2.60

製品グループ内のすべてのサーバーに接続する変数をコンマで区切って定義したいと思います。変数がリストであると仮定すると、変数には次の値を含める必要があります。

list: "prod1_IP,prod2_IP,prod3_IP,prod4_IP"    
list: "10.10.2.30,10.10.2.40,10.10.2.50,10.10.2.60"

手動で簡単に配置できますが、問題は、リストを別のシナリオで拡張する必要があることです。

hostvars[item].ansible_hostforループで使用できると思います。しかし、どうすればいいのかわかりません。

ベストアンサー1

次のスクリプトはアクションを実行します

- hosts: prod
  gather_facts: false
  tasks:
    - block:
        - set_fact:
            list1: "{{ ansible_play_hosts_all|product(['_IP'])|map('join')|
                       join(',') }}"
        - debug:
            var: list1
        - set_fact:
            list2: "{{ ansible_play_hosts_all|map('extract', hostvars, 'ansible_host')|
                       join(',') }}"
        - debug:
            var: list2
      run_once: true

与えられた

  list1: prod1_IP,prod2_IP,prod3_IP,prod4_IP
  list2: 10.10.2.30,10.10.2.40,10.10.2.50,10.10.2.60

おすすめ記事