サーバーセットを定義するマニフェストファイルがあります。
[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_host
forループで使用できると思います。しかし、どうすればいいのかわかりません。
答え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