The template looks like this:
solr.replication.master=
{% if ansible_eth0.ipv4.address == servermaster.eth0 %}
false
{% else %}
true
{% endif %}
solr.replication.slave=false
And the output should look like this:
solr.replication.master=true
solr.replication.slave=false
What I am actually getting is:
solr.replication.master=truesolr.replication.slave=false
I understand that Jinja2 strips whitespace, and that ansible is probably configuring this by default. But it does not seem to honor -/+ whitespace tags.
Is there a way to force a line break?
Add the following line to your template at first position:
#jinja2: trim_blocks:False
Google brought me here, so leaving this answer for prosperity's sake.
As you mentioned -/+
whitespace tags are not honored, nor are line macros enabled (at least not %%
or #
or ##
).
trim_blocks
is enabled in ansible. The only thing that I found that does work, is that trim_blocks
ignores only the first newline
For your example, just adding an extra newline should be sufficient
solr.replication.master={% if ansible_eth0.ipv4.address == servermaster.eth0 %}false{% else %}true{% endif %}
solr.replication.slave=false
I had the same issue. I solved it by adding
{{''}}
to the end of the line, for example:
solr.replication.master={% if ansible_eth0.ipv4.address == servermaster.eth0 %}false{% else %}true{% endif %}{{''}}
This inserts an empty string literal, with the side effect that whitespace is not stripped.
I believe using a ternary
filter might help.
solr.replication.master={{ (ansible_eth0.ipv4.address == servermaster.eth0) | ternary('false', 'true') }}
solr.replication.slave=false
As workaround you can add to your template
{% raw %}{% endraw %}
Looks like you have force=no
in the ansible playbook so the file will not be overwritten.