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

时间:2014-03-12 11:31:37

标签: templates jinja2 ansible

模板如下所示:

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

有没有办法强制换行?

5 个答案:

答案 0 :(得分:15)

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

#jinja2: trim_blocks:False

答案 1 :(得分:4)

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

正如您所提到的-/+空白标记未被尊重,line macros也未被启用(至少不是%%###

在ansible中启用了

trim_blocks。我发现唯一有用的是,trim_blocks只忽略第一个换行符

对于您的示例,只需添加额外的换行就足够了

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

solr.replication.slave=false

答案 2 :(得分:4)

我有同样的问题。我通过添加

解决了这个问题
solr.replication.master={% if ansible_eth0.ipv4.address == servermaster.eth0 %}false{% else %}true{% endif %}{{''}}

到该行的末尾,例如:

<p>

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

答案 3 :(得分:1)

我认为使用ternary过滤器可能会有所帮助。

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

答案 4 :(得分:0)

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

{% raw %}{% endraw %}