web-dev-qa-db-ja.com

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>

他のフィルターも試しましたが、期待した結果が得られませんでした。

これにはどのフィルターを使用すればよいですか? (適切なものが見つかりませんでした)

2
pandoJohn

ansible_ip_addressesはリストなので、ネストされたリスト(IPアドレス付き)を持つ(ホストの)リストがあります。

uniquejoinを適用する前に、フラット化することをお勧めします。

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

これにより、一意のアイテムを取得してカンマで結合するよりも、要素として単一のIPアドレスを持つフラットリストが作成されます。

2