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].

Это выражение используется в шаблоне дзиндзя:

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

Я также пробовал некоторые другие фильтры, но не смог получить ожидаемого результата.

Какие фильтры мне следует использовать для этого? (Я не смог найти нужные)

решение1

ansible_ip_addressesэто список, поэтому у вас есть список (хостов) с вложенными списками (с IP-адресами).

Вероятно, вам захочется разгладить его перед нанесением uniqueи join:

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

Это создаст плоский список с одним IP-адресом в качестве элемента, затем возьмет уникальные элементы и объединит их запятыми.

Связанный контент