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可能默认配置了这个.但它似乎没有荣誉 - /+空白标签.
有没有办法强制换行?
小智 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)
这将插入一个空字符串文字,其副作用是不会剥离空格。
谷歌把我带到这里,所以为了繁荣而留下这个答案。
至于你提到-/+的空白标签不兑现,也不行宏启用(至少不能%%或#或##)。
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)
我相信使用ternary过滤器可能会有所帮助。
solr.replication.master={{ (ansible_eth0.ipv4.address == servermaster.eth0) | ternary('false', 'true') }}
solr.replication.slave=false
Run Code Online (Sandbox Code Playgroud)