Ansible Jinja2, форматирование

поэтому в настоящее время я запускаю цикл for для создания списка адресов, вот цикл:

sg_nodes_dn: "
  {%- set nodes = [] %}
  {%- for host in groups['elastic_nodes'] %}
  {{- nodes.append('CN=%s,OU=Systems/DevOps,O=x x x,L=x,C=x' % hostvars[host]['elk_node_name']) }}
  {%- endfor %}
  {{- nodes -}}"

Это отлично работает, однако у меня возникает проблема, когда я форматирую его в шаблон j2.

Вот переменная внутри моего шаблона:

searchguard.nodes_dn:
    {{ sg_nodes_dn | to_nice_yaml }}

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

searchguard.nodes_dn:
    - CN=x.x-x.x,OU=Systems/DevOps,O=x x x,L=x,C=x
- CN=x.x-x.x,OU=Systems/DevOps,O=x x x,L=x,C=x

Как я могу убедиться, что вторая строка правильно отформатирована? Я кратко прочитал и добавил:

#jinja2:trim_blocks: False

В начало файла, но это не решило проблему, может ли кто-нибудь еще что-нибудь ввести здесь?


person Anthony 'Runt' Cleaves    schedule 09.08.2017    source источник
comment
Можете ли вы попробовать #jinja2: lstrip_blocks: "True (or False)", trim_blocks: "True (or False)" toggle fasle and true, чтобы проверить погоду, вы можете получить желаемый результат.   -  person Arbab Nazar    schedule 09.08.2017
comment
К сожалению, нет, все равно спасибо.   -  person Anthony 'Runt' Cleaves    schedule 10.08.2017


Ответы (1)


Вы можете использовать фильтр Jinja2 indent:

searchguard.nodes_dn:
    {{ sg_nodes_dn | to_nice_yaml | indent(4, false) }}

Или просто используйте параметры по умолчанию (width=4 и indentfirst=False), которые вам нужны:

searchguard.nodes_dn:
    {{ sg_nodes_dn | to_nice_yaml | indent }}
person Eric Citaire    schedule 11.08.2017
comment
Обратите внимание, что indent - это фильтр Jinja2, тогда как to_nice_yaml - это плагин Ansible. - person Alex Harvey; 17.12.2019