Oliver Lorton
Oliver Lorton

Reputation: 719

How do I get an Ansible template to honor new lines after a conditional

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

Answers (5)

00500005
00500005

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

panticz
panticz

Reputation: 2315

As workaround you can add to your template

{% raw %}{% endraw %}

Upvotes: 1

Peter Lloyd
Peter Lloyd

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

Acti67
Acti67

Reputation: 607

Add the following line to your template at first position:

#jinja2: trim_blocks:False

Upvotes: 38

moon.musick
moon.musick

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

Related Questions