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

Oli*_*ton 20 templates jinja2 ansible

模板看起来像这样:

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

solr.replication.slave=false
Run Code Online (Sandbox Code Playgroud)

输出应该如下所示:

solr.replication.master=true
solr.replication.slave=false
Run Code Online (Sandbox Code Playgroud)

我实际得到的是:

solr.replication.master=truesolr.replication.slave=false
Run Code Online (Sandbox Code Playgroud)

据我所知,Jinja2剥离了空格,而且ansible可能默认配置了这个.但它似乎没有荣誉 - /+空白标签.

有没有办法强制换行?

Act*_*i67 18

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

#jinja2: trim_blocks:False
Run Code Online (Sandbox Code Playgroud)


小智 6

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

{{''}}
Run Code Online (Sandbox Code Playgroud)

到行尾,例如:

solr.replication.master={% if ansible_eth0.ipv4.address == servermaster.eth0 %}false{% else %}true{% endif %}{{''}}
Run Code Online (Sandbox Code Playgroud)

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


005*_*005 5

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

至于你提到-/+的空白标签不兑现,也不行宏启用(至少不能%%###)。

trim_blocks在ansible中启用。我发现trim_blocks唯一有效的方法是仅忽略第一个换行符

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

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

solr.replication.slave=false
Run Code Online (Sandbox Code Playgroud)


moo*_*ick 2

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

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