Мне нужно получить список таких 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]
Я пытался использовать фильтры и вещи, которые я нашел, но, как бы я ни старался, я получаю ошибки (поскольку большинство ответов, которые я нашел, предполагают, что читатель знает, как применить предоставленное решение, а это не мой случай). Я предполагаю, что мне следует применить фильтр «соединения», но я не знаю, как это сделать.
Не могли бы вы мне помочь?
Спасибо!
Вы можете отформатировать IP-адреса с помощью кавычек и сначала добавить их в список, прежде чем объединять их с помощью ','
в выводе:
{%- set ips = [] -%}
{%- for servidor in groups['servidores'] %}
{% do ips.append("'%s'" | format(hostvars[servidor].ansible_host)) %}
{% endfor -%}
[{{ ips | join(',') }}]
К сожалению, я написал код в спешке и забыл заключить вывод в фигурные скобки. Пожалуйста, попробуйте еще раз.
Я понял!!! Спасибо большое за вашу помощь!!! Мне пришлось немного изменить его (мне потребовалось некоторое время, чтобы понять, что было не так. Итак, после изменения "{%" и "%}" в 3-й строке вашего кода для "{{" и "} } "соответственно, это сработало как шарм :) Еще раз большое спасибо за вашу помощь !!! :) Я бы поддержал все ваши комментарии, но у меня недостаточно репутации, чтобы голосовать за что-либо, извините за это: /
Рад помочь. Можете ли вы отметить этот ответ как принятый, если считаете его правильным? (То есть щелкните серую галочку рядом с вопросом.)
Выполнено! Извините за это :) Кроме того, если вы хотите отредактировать его с помощью исправления, которое заставляет его работать (это всего лишь деталь, но в противном случае он не работает), это рабочий вариант: {% - set ips = [] - %} {% для серверов в группах ['servidores']%} {{ips.append ("'% s'" | format (hostvars [servidor] .ansible_host))}} {% endfor%} [{{ips | join (',')}}] Удачного дня!
Ах, вы правы, я забыл, что для вызова do
нужно использовать Заявление ips.append
. В конце концов, не рекомендуется использовать {{
и }}
для вызова функции, возвращающей None
, такой как append
. Я соответствующим образом обновил свой ответ.
омг ... У меня нет репутации даже для того, чтобы болтать, но есть этот красный знак с просьбой переместить это обсуждение в чат: D В любом случае, это еще одна вещь, которой вы меня прямо сейчас научите. Я адаптирую свой код, чтобы следовать этой хорошей практике, и еще раз большое вам спасибо !!! :)
Спасибо! В этом есть большой смысл !!! :) Althogh по какой-то причине не работает :( Сообщение об ошибке содержит: «... Обнаружен неизвестный тег 'ips'. Jinja искал следующие теги: 'endfor' или 'else '. Самый внутренний блок, который нужно закрыть, - это' for '.. "Я пробовал разные вещи, но пока не заставил его работать