首页 > 解决方案 > Ansible - jinja 防止 jinja 在宏中剥离换行符

问题描述

假设我有一个使用以下 p 的 jinja2 模板

{% macro logging(ltype) %}
{% if ltype == 'fluentd' %}
logging:
  driver: 'fluentd'
  options:
    tag: "{{ app_name }}.{{ '{{' }}.Name{{ '}}' }}"
    labels: "mylabel"
{% endif %}
{% endmacro %}
...                                                                                                                   
   {{ logging('fluentd') }}                                                                                           
... 

当我渲染这个模板(template模块)时,我得到

...
   logging:
  driver: 'fluentd'
  options:
    tag: "test.{{.Name}}"
    labels: "mylabel"

...

如您所见,由于driver我不知道的原因,密钥被转移。我已经尝试了所有空格控制的可能性,没有任何改变这种行为。

有没有人有解决它的想法?

期望的结果是

...
   logging:
     driver: 'fluentd'
     options:
       tag: "test.{{.Name}}"
       labels: "mylabel"   
...

标签: ansiblejinja2

解决方案


将模板的该部分更改为:

...

{{ logging('fluentd') | indent(3,true) }}

...

推荐阅读