如何在条件之后获得Ansible模板以兑现新行

问题描述 投票:17回答:5

模板看起来像这样:

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可能默认配置了这个。但它似乎没有荣誉 - / +空白标签。

有没有办法强制换行?

templates jinja2 ansible
5个回答
15
投票

在第一个位置将以下行添加到模板中:

#jinja2: trim_blocks:False

4
投票

谷歌把我带到了这里,所以为了繁荣而留下这个答案。

正如你所提到的-/+空白标签不被尊重,也没有启用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

4
投票

我遇到过同样的问题。我通过添加来解决它

{{''}}

到最后一行,例如:

solr.replication.master={% if ansible_eth0.ipv4.address == servermaster.eth0 %}false{% else %}true{% endif %}{{''}}

这会插入一个空字符串文字,副作用是不剥离空格。


1
投票

我相信使用ternary过滤器可能有所帮助。

solr.replication.master={{ (ansible_eth0.ipv4.address == servermaster.eth0) | ternary('false', 'true') }}
solr.replication.slave=false

0
投票

作为解决方法,您可以添加到模板中

{% raw %}{% endraw %}
© www.soinside.com 2019 - 2024. All rights reserved.