Как добавить разделители в Jinja2

Мне нужно получить список таких IP-адресов (значения в кавычках, через запятую и без пробелов).

['172.16.1.67','172.16.1.68','172.16.1.69']

Для этого я пытаюсь вызвать шаблон jinja2 в моем playbook. Содержание шаблона:

[{% for servidor in groups['servidores'] %}{{ hostvars[servidor].ansible_host}}{% endfor %}]

Этот шаблон генерирует эту строку:

[172.16.1.67172.16.1.68172.16.1.69]

Я пытался использовать фильтры и вещи, которые я нашел, но, как бы я ни старался, я получаю ошибки (поскольку большинство ответов, которые я нашел, предполагают, что читатель знает, как применить предоставленное решение, а это не мой случай). Я предполагаю, что мне следует применить фильтр «соединения», но я не знаю, как это сделать.

Не могли бы вы мне помочь?

Спасибо!

Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
1
0
352
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете отформатировать IP-адреса с помощью кавычек и сначала добавить их в список, прежде чем объединять их с помощью ',' в выводе:

{%- set ips = [] -%}
{%- for servidor in groups['servidores'] %}
    {% do ips.append("'%s'" | format(hostvars[servidor].ansible_host)) %}
{% endfor -%}
[{{ ips | join(',') }}]

Спасибо! В этом есть большой смысл !!! :) Althogh по какой-то причине не работает :( Сообщение об ошибке содержит: «... Обнаружен неизвестный тег 'ips'. Jinja искал следующие теги: 'endfor' или 'else '. Самый внутренний блок, который нужно закрыть, - это' for '.. "Я пробовал разные вещи, но пока не заставил его работать

Sebastián Greco 10.09.2018 11:18

К сожалению, я написал код в спешке и забыл заключить вывод в фигурные скобки. Пожалуйста, попробуйте еще раз.

blhsing 10.09.2018 11:21

Я понял!!! Спасибо большое за вашу помощь!!! Мне пришлось немного изменить его (мне потребовалось некоторое время, чтобы понять, что было не так. Итак, после изменения "{%" и "%}" в 3-й строке вашего кода для "{{" и "} } "соответственно, это сработало как шарм :) Еще раз большое спасибо за вашу помощь !!! :) Я бы поддержал все ваши комментарии, но у меня недостаточно репутации, чтобы голосовать за что-либо, извините за это: /

Sebastián Greco 10.09.2018 12:45

Рад помочь. Можете ли вы отметить этот ответ как принятый, если считаете его правильным? (То есть щелкните серую галочку рядом с вопросом.)

blhsing 10.09.2018 12:47

Выполнено! Извините за это :) Кроме того, если вы хотите отредактировать его с помощью исправления, которое заставляет его работать (это всего лишь деталь, но в противном случае он не работает), это рабочий вариант: {% - set ips = [] - %} {% для серверов в группах ['servidores']%} {{ips.append ("'% s'" | format (hostvars [servidor] .ansible_host))}} {% endfor%} [{{ips | join (',')}}] Удачного дня!

Sebastián Greco 10.09.2018 12:50

Ах, вы правы, я забыл, что для вызова do нужно использовать Заявление ips.append. В конце концов, не рекомендуется использовать {{ и }} для вызова функции, возвращающей None, такой как append. Я соответствующим образом обновил свой ответ.

blhsing 10.09.2018 12:51

омг ... У меня нет репутации даже для того, чтобы болтать, но есть этот красный знак с просьбой переместить это обсуждение в чат: D В любом случае, это еще одна вещь, которой вы меня прямо сейчас научите. Я адаптирую свой код, чтобы следовать этой хорошей практике, и еще раз большое вам спасибо !!! :)

Sebastián Greco 10.09.2018 12:53

Другие вопросы по теме