ansible jinja2 模板中的内联注释
Inline comment in ansible jinja2 template
我的 docker .env
文件是从 jinja2 模板创建的。我正在使用 {# ... #}
作为 comments。
它有这个:
FOO={{BAR}} {# blah blah blah #}
SOMETHING=2
我希望它呈现:
FOO=1
SOMETHING=2
但它实际呈现:
FOO=1 SOMETHING=2
Jinja2 去除块后的尾随换行符,as described in the fine manual
您至少可以通过 3 种方式影响该行为:
- 不要使用 end-of-line 注释(因为它们将以
#}\n
结尾,因此 jinja2 会吃掉 \n
)
- 强制 jinja2 块之后的字符为 non-newline 字符(例如
#} \n
,尽管这会让 git 和一些编辑发疯,因为它被认为是尾随空格
- 如果这发生在
template:
上下文中,您可以关闭 trim_blocks: no
;在某些情况下,您也可以通过模板中的 #jinja2:trim_blocks:False
header 在模板内部执行此操作,如 template:
文档页面 所述
2021 年更新(版本 3。0.x)
在标签中使用加号 (+)
正如@mdaniel 所指出的,有几种方法可以调整 Jinja2 的空白行为,但 3.0.x's documentation 中出现了一个新选项,我认为这是解决问题的最简单方法:
... you can manually disable the trim_blocks behavior by
putting a plus sign (+) at the end of a block:
<div>
{% if something +%}
yay
{% endif %}
</div>
因此,您的具体问题应该可以通过插入一个加号轻松解决:
FOO={{BAR}} {# blah blah blah +#}
SOMETHING=2
如果您想删除出现在变量和注释之间的空格,请使用减号显式删除它:
FOO={{BAR}} {#- blah blah blah +#}
SOMETHING=2
使用trim_blocks
参数
由于这个问题标记了 Ansible,我应该指出您还可以通过设置 ansible.builtin.template
module 的 trim_blocks
参数来修改行为。自 2.4 版以来,这一直是 Ansible 的一部分。默认为 yes
,但您可以将其设置为 no
以获得所需的结果。
希望这能帮助发现此问题的其他人寻求类似的解决方案。
我的 docker .env
文件是从 jinja2 模板创建的。我正在使用 {# ... #}
作为 comments。
它有这个:
FOO={{BAR}} {# blah blah blah #}
SOMETHING=2
我希望它呈现:
FOO=1 SOMETHING=2
但它实际呈现:
FOO=1 SOMETHING=2
Jinja2 去除块后的尾随换行符,as described in the fine manual
您至少可以通过 3 种方式影响该行为:
- 不要使用 end-of-line 注释(因为它们将以
#}\n
结尾,因此 jinja2 会吃掉\n
) - 强制 jinja2 块之后的字符为 non-newline 字符(例如
#} \n
,尽管这会让 git 和一些编辑发疯,因为它被认为是尾随空格 - 如果这发生在
template:
上下文中,您可以关闭trim_blocks: no
;在某些情况下,您也可以通过模板中的#jinja2:trim_blocks:False
header 在模板内部执行此操作,如template:
文档页面 所述
2021 年更新(版本 3。0.x)
在标签中使用加号 (+)
正如@mdaniel 所指出的,有几种方法可以调整 Jinja2 的空白行为,但 3.0.x's documentation 中出现了一个新选项,我认为这是解决问题的最简单方法:
... you can manually disable the trim_blocks behavior by putting a plus sign (+) at the end of a block:
<div> {% if something +%} yay {% endif %} </div>
因此,您的具体问题应该可以通过插入一个加号轻松解决:
FOO={{BAR}} {# blah blah blah +#}
SOMETHING=2
如果您想删除出现在变量和注释之间的空格,请使用减号显式删除它:
FOO={{BAR}} {#- blah blah blah +#}
SOMETHING=2
使用trim_blocks
参数
由于这个问题标记了 Ansible,我应该指出您还可以通过设置 ansible.builtin.template
module 的 trim_blocks
参数来修改行为。自 2.4 版以来,这一直是 Ansible 的一部分。默认为 yes
,但您可以将其设置为 no
以获得所需的结果。
希望这能帮助发现此问题的其他人寻求类似的解决方案。