Ansible Jinja2,格式化

Ansible Jinja2,格式化,ansible,jinja2,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 -}}" 这非常有效

因此,目前我运行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
到文件顶部,但没有解决问题,其他人可以在此处输入任何内容吗?

您可以使用Jinja2筛选器:

或者只需使用默认参数(
width=4
indentfirst=False
),这正是您需要的:

searchguard.nodes_dn:
    {{ sg_nodes_dn | to_nice_yaml | indent }}
您可以使用Jinja2过滤器:

或者只需使用默认参数(
width=4
indentfirst=False
),这正是您需要的:

searchguard.nodes_dn:
    {{ sg_nodes_dn | to_nice_yaml | indent }}

你能试一下
#jinja2:lstrip_块:“真(或假)”,trim_块:“真(或假)”
切换fasle和True以检查你是否能得到你想要的结果。不幸的是不能,谢谢你。你能试一下
#jinja2:lstrip_块:“真(或假)”,trim_块:“真(或假)”吗
切换fasle和true以检查是否可以获得所需的结果。不幸的是,不是,谢谢。请注意,indent是一个Jinja2筛选器,而to_nice_yaml是一个Ansible插件。请注意,indent是一个Jinja2筛选器,而to_nice_yaml是一个Ansible插件。