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模板中此类注释的文档: