Reputation: 719
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?
Upvotes: 46
Views: 33987
Reputation: 4057
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
Upvotes: 8
Reputation: 681
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.
Upvotes: 22
Reputation: 607
Add the following line to your template at first position:
#jinja2: trim_blocks:False
Upvotes: 38
Reputation: 5654
I believe using a ternary
filter might help.
solr.replication.master={{ (ansible_eth0.ipv4.address == servermaster.eth0) | ternary('false', 'true') }}
solr.replication.slave=false
Upvotes: 2