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

前端 未结 5 655
误落风尘
误落风尘 2020-12-14 16:30

The template looks like this:

solr.replication.master=
    {% if ansible_eth0.ipv4.address == servermaster.eth0 %}
        false
    {% else %}
        true
         


        
相关标签:
5条回答
  • 2020-12-14 16:48

    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.

    0 讨论(0)
  • 2020-12-14 16:52

    Add the following line to your template at first position:

    #jinja2: trim_blocks:False
    
    0 讨论(0)
  • 2020-12-14 16:53

    I believe using a ternary filter might help.

    solr.replication.master={{ (ansible_eth0.ipv4.address == servermaster.eth0) | ternary('false', 'true') }}
    solr.replication.slave=false
    
    0 讨论(0)
  • 2020-12-14 17:04

    As workaround you can add to your template

    {% raw %}{% endraw %}
    
    0 讨论(0)
  • 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
    
    0 讨论(0)
提交回复
热议问题