模板看起来像这样:
solr.replication.master=
{% if ansible_eth0.ipv4.address == servermaster.eth0 %}
false
{% else %}
true
{% endif %}
solr.replication.slave=false
输出应该如下所示:
solr.replication.master=true
solr.replication.slave=false
我实际得到的是:
solr.replication.master=truesolr.replication.slave=false
据我所知,Jinja2剥离了空格,而且ansible可能默认配置了这个。但它似乎没有荣誉 - / +空白标签。
有没有办法强制换行?
在第一个位置将以下行添加到模板中:
#jinja2: trim_blocks:False
谷歌把我带到了这里,所以为了繁荣而留下这个答案。
正如你所提到的-/+
空白标签不被尊重,也没有启用line macros(至少不是%%
或#
或##
)。
trim_blocks
启用了ansible。我发现唯一有效的方法是,trim_blocks
只忽略第一个换行符
对于您的示例,只需添加额外的换行就足够了
solr.replication.master={% if ansible_eth0.ipv4.address == servermaster.eth0 %}false{% else %}true{% endif %}
solr.replication.slave=false
我遇到过同样的问题。我通过添加来解决它
{{''}}
到最后一行,例如:
solr.replication.master={% if ansible_eth0.ipv4.address == servermaster.eth0 %}false{% else %}true{% endif %}{{''}}
这会插入一个空字符串文字,副作用是不剥离空格。
我相信使用ternary
过滤器可能有所帮助。
solr.replication.master={{ (ansible_eth0.ipv4.address == servermaster.eth0) | ternary('false', 'true') }}
solr.replication.slave=false
作为解决方法,您可以添加到模板中
{% raw %}{% endraw %}