Templates 我如何获得一个Ansible模板,以在一个有条件的

Templates 我如何获得一个Ansible模板,以在一个有条件的,templates,jinja2,ansible,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=
    {% 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=
    {% 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可能是在默认情况下配置的。但它似乎并不尊重-/+空格标记


有没有办法强制换行?

我相信使用
三值过滤器可能会有所帮助

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

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

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

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

例如,只需添加一个额外的换行符就足够了

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

solr.replication.slave=false

在模板的第一个位置添加以下行:

#jinja2: trim_blocks:False

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

{{''}}
到行的末尾,例如:

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

这将插入一个空字符串文字,其副作用是不会删除空白。

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

{% raw %}{% endraw %}

你在哪里找到的?文档参考将是伟大的,因为我找不到它,我想我需要一些非常类似的东西,但不是这个确切的结果,在每一行只包含条件被打印为一个空白行。对某些人来说可能没问题,但是…@byoungb请参见,而且,对于环境选项可能也很有用。是的,实际上我想问的是,您可以在模板顶部将jinja2环境变量设置为注释。有关ansible模板中此类注释的文档: