Ansible:如何調整地圖(帶提取)過濾器的輸出格式

Ansible:如何調整地圖(帶提取)過濾器的輸出格式

我正在嘗試提取屬於兩個群組的主機的 IP 位址,並在 .xml 設定檔中使用它們。

我在這裡面臨的問題是 jinja 模板中使用的表達式產生的輸出。我想要實現的是類似的輸出10.3.5.1,10.3.5.2,10.3.5.2,但我得到的不是這樣的輸出[u'10.3.5.1],[u'10.3.5.2],[u'10.3.5.2]

這是 jinja 模板中使用的表達式:

<member1>{{ (groups['group_one']+groups['group_two']) | map('extract',hostvars,'ansible_ip_addresses') | list | unique | join(',') }}</member1>

我還嘗試了其他一些過濾器,但無法得到預期的結果。

我應該為此使用什麼過濾器? (我找不到合適的)

答案1

ansible_ip_addresses是一個列表,因此您有一個(主機)列表,其中包含巢狀列表(帶有 IP 位址)。

您可能想在應用之前將其壓平uniquejoin

{{ (groups['group_one']+groups['group_two']) | map('extract',hostvars,'ansible_ip_addresses') | list | sum(start=[]) | unique | join(',') }}

這將建立一個以單一 IP 位址作為元素的平面列表,而不是採用唯一的項目並用逗號將它們連接起來。

相關內容