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-адресами).
Вы, вероятно, хотите сгладить его перед применением unique
а также join
:
{{ (groups['group_one']+groups['group_two']) | map('extract',hostvars,'ansible_ip_addresses') | list | sum(start=[]) | unique | join(',') }}
Это создаст плоский список с одним ip-адресом в качестве элемента, затем возьмет уникальные элементы и соединит их запятыми.