Ansible – playing with Jinja2 and its whitespace control
Jinja2 templating with Ansible is powerfull and sometimes you could have some headache for positionning the result just where you want to respect a configuration file syntax.
Following, I will show you how to manage the whitespace control with Jinja2
Without specifying whitespace control
{
  "Clusters":{
    "properties": {
      {% if Var is defined %}
      "myParameter": "value1",
      {% else %}
      "myParameter": "value2",
      {% endif %}
    }
  }
}
Result :
{
  "Clusters":{
    "properties": {
            "myParameter": "value2",
          }
  }
}
As you can see the spaces of each lines will be keeped causing a gap
With – everywhere
{
  "Clusters":{
    "properties": {
      {%- if Var is defined -%}
      "myParameter": "value1",
      {%- else -%}
      "myParameter": "value2",
      {%- endif -%}
    }
  }
}
Result :
{
  "Clusters":{
    "properties": {"myParameter": "value2",}
  }
}
As you can see it will removed all the spaces and newlines
With a – in front
{
  "Clusters":{
    "properties": {
      {%- if Var is defined %}
      "myParameter": "value1",
      {% else %}
      "myParameter": "value2",
      {% endif %}
    }
  }
}
Result :
{
  "Clusters":{
    "properties": {      "myParameter": "value2",
          }
  }
}
As you can see, the newline before the {%-  will be removed and the spaces in front of the line are concatenate at the end of the previous line
With a – at the end of each block
{
  "Clusters":{
    "properties": {
      {% if Var is defined -%}
      "myParameter": "value1",
      {% else -%}
      "myParameter": "value2",
      {% endif -%}
    }
  }
}
Result :
{
  "Clusters":{
    "properties": {
      "myParameter": "value2",
      }
  }
}
As you can see this will removed all the spaces and newlines from the removed lines
With a – at the beginning of each block
{
  "Clusters":{
    "properties": {
      {%- if Var is defined %}
      "myParameter": "value1",
      {%- else %}
      "myParameter": "value2",
      {%- endif %}
    }
  }
}
Result :
{
  "Clusters":{
    "properties": {      "myParameter": "value2",    }
  }
}
As you can see the all the newlines will be removed and the spaces keeped
merci! ça m’a servi
Ah ah ah, moi aussi pas plus tard qu’il y a 2 semaines avec une topology Knox récalcitrante
saved my butt. this was killing me!