Ansible:マップ(抽出付き)フィルターの出力形式を調整する方法

Ansible:マップ(抽出付き)フィルターの出力形式を調整する方法

2 つのグループに属するホストの 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 アドレスを要素として持つフラットなリストが作成され、一意の項目が取得されてコンマで結合されます。

関連情報