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

21,461

Solution 1

Add the following line to your template at first position:

#jinja2: trim_blocks:False

Solution 2

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.

Solution 3

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

Solution 4

I believe using a ternary filter might help.

solr.replication.master={{ (ansible_eth0.ipv4.address == servermaster.eth0) | ternary('false', 'true') }}
solr.replication.slave=false
Share:
21,461
Oliver Lorton
Author by

Oliver Lorton

I'm an enthusiastic software engineer working primarily in Python, and historically in PHP. I build web apps professionally, and build/tweak guitar pedals in my spare time.

Updated on February 07, 2022

Comments

  • Oliver Lorton
    Oliver Lorton about 2 years

    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?