Ansible – playing with Jinja2 and its whitespace control

Ansible – playing with Jinja2 and its whitespace control

4 October 2018 3 By Eric Deleforterie

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

  1. {
  2. "Clusters":{
  3. "properties": {
  4. {% if Var is defined %}
  5. "myParameter": "value1",
  6. {% else %}
  7. "myParameter": "value2",
  8. {% endif %}
  9. }
  10. }
  11. }
{
  "Clusters":{
    "properties": {
      {% if Var is defined %}
      "myParameter": "value1",
      {% else %}
      "myParameter": "value2",
      {% endif %}
    }
  }
}
{
  "Clusters":{
    "properties": {
      {% if Var is defined %}
      "myParameter": "value1",
      {% else %}
      "myParameter": "value2",
      {% endif %}
    }
  }
}

Result :

  1. {
  2. "Clusters":{
  3. "properties": {
  4. "myParameter": "value2",
  5. }
  6. }
  7. }
{
  "Clusters":{
    "properties": {
            "myParameter": "value2",
          }
  }
}
{
  "Clusters":{
    "properties": {
            "myParameter": "value2",
          }
  }
}

As you can see the spaces of each lines will be keeped causing a gap

With – everywhere

  1. {
  2. "Clusters":{
  3. "properties": {
  4. {%- if Var is defined -%}
  5. "myParameter": "value1",
  6. {%- else -%}
  7. "myParameter": "value2",
  8. {%- endif -%}
  9. }
  10. }
  11. }
{
  "Clusters":{
    "properties": {
      {%- if Var is defined -%}
      "myParameter": "value1",
      {%- else -%}
      "myParameter": "value2",
      {%- endif -%}
    }
  }
}
{
  "Clusters":{
    "properties": {
      {%- if Var is defined -%}
      "myParameter": "value1",
      {%- else -%}
      "myParameter": "value2",
      {%- endif -%}
    }
  }
}

Result :

  1. {
  2. "Clusters":{
  3. "properties": {"myParameter": "value2",}
  4. }
  5. }
{
  "Clusters":{
    "properties": {"myParameter": "value2",}
  }
}
{
  "Clusters":{
    "properties": {"myParameter": "value2",}
  }
}

As you can see it will removed all the spaces and newlines

With a – in front

  1. {
  2. "Clusters":{
  3. "properties": {
  4. {%- if Var is defined %}
  5. "myParameter": "value1",
  6. {% else %}
  7. "myParameter": "value2",
  8. {% endif %}
  9. }
  10. }
  11. }
{
  "Clusters":{
    "properties": {
      {%- if Var is defined %}
      "myParameter": "value1",
      {% else %}
      "myParameter": "value2",
      {% endif %}
    }
  }
}
{
  "Clusters":{
    "properties": {
      {%- if Var is defined %}
      "myParameter": "value1",
      {% else %}
      "myParameter": "value2",
      {% endif %}
    }
  }
}

Result :

  1. {
  2. "Clusters":{
  3. "properties": { "myParameter": "value2",
  4. }
  5. }
  6. }
{
  "Clusters":{
    "properties": {      "myParameter": "value2",
          }
  }
}
{
  "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

  1. {
  2. "Clusters":{
  3. "properties": {
  4. {% if Var is defined -%}
  5. "myParameter": "value1",
  6. {% else -%}
  7. "myParameter": "value2",
  8. {% endif -%}
  9. }
  10. }
  11. }
{
  "Clusters":{
    "properties": {
      {% if Var is defined -%}
      "myParameter": "value1",
      {% else -%}
      "myParameter": "value2",
      {% endif -%}
    }
  }
}
{
  "Clusters":{
    "properties": {
      {% if Var is defined -%}
      "myParameter": "value1",
      {% else -%}
      "myParameter": "value2",
      {% endif -%}
    }
  }
}

Result :

  1. {
  2. "Clusters":{
  3. "properties": {
  4. "myParameter": "value2",
  5. }
  6. }
  7. }
{
  "Clusters":{
    "properties": {
      "myParameter": "value2",
      }
  }
}
{
  "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

  1. {
  2. "Clusters":{
  3. "properties": {
  4. {%- if Var is defined %}
  5. "myParameter": "value1",
  6. {%- else %}
  7. "myParameter": "value2",
  8. {%- endif %}
  9. }
  10. }
  11. }
{
  "Clusters":{
    "properties": {
      {%- if Var is defined %}
      "myParameter": "value1",
      {%- else %}
      "myParameter": "value2",
      {%- endif %}
    }
  }
}
{
  "Clusters":{
    "properties": {
      {%- if Var is defined %}
      "myParameter": "value1",
      {%- else %}
      "myParameter": "value2",
      {%- endif %}
    }
  }
}

Result :

  1. {
  2. "Clusters":{
  3. "properties": { "myParameter": "value2", }
  4. }
  5. }
{
  "Clusters":{
    "properties": {      "myParameter": "value2",    }
  }
}
{
  "Clusters":{
    "properties": {      "myParameter": "value2",    }
  }
}

As you can see the all the newlines will be removed and the spaces keeped

 

 

 

 

 

Please follow and like us: