Я всегда получаю новую строку, когда переменная не определена в следующем примере:
Плейбук:
- name: testplaybook jinja2
hosts: all
gather_facts: no
vars:
testvalue1: "A"
testvalue2: "B"
testvalue4: "D"
testvalue5: "E"
tasks:
- name: test jinja2 template
local_action:
module: template
src: testtemplate2.xml.j2
dest: testtemplate2_output.xml
trim_blocks: no
testtemplate2.xml.j2:
<?xml version = "1.0" encoding = "UTF-8"?>
<configuration>
<instances>
<testinstance staticvaluex=X
staticvaluey=Y
staticvaluez=Z
{% if testvalue1 is defined %} value1 = "{{ testvalue1 }}"{% endif %}
{% if testvalue2 is defined %} value2 = "{{ testvalue2 }}"{% endif %}
{% if testvalue3 is defined %} value3 = "{{ testvalue3 }}"{% endif %}
{% if testvalue4 is defined %} value4 = "{{ testvalue4 }}"{% endif %}
{% if testvalue5 is defined %} value5 = "{{ testvalue5 }}"{% endif %}
/>
</instances>
</configuration>
В примере мы не указываем testvalue3, поэтому выходной файл testtemplate2_output.xml содержит новую строку:
<?xml version = "1.0" encoding = "UTF-8"?>
<configuration>
<instances>
<testinstance staticvaluex=X
staticvaluey=Y
staticvaluez=Z
value1 = "A"
value2 = "B"
value4 = "D"
value5 = "E"
/>
</instances>
</configuration>
Как я могу избавиться от этой новой строки?
Я много пробовал с {%-
или +%}
или trim_blocks
и т. д., но ничего не работает.
Конечно, тогда это должно работать с любой из этих строк, потому что любая из этих переменных может быть пустой и не должно быть новой строки.
Использование этого j2 с этой игрой делает работу:
tasks:
- name: test jinja2 template
local_action:
module: template
src: testtemplate2.xml.j2
dest: testtemplate2_output.xml
файл j2
<?xml version = "1.0" encoding = "UTF-8"?>
<configuration>
<instances>
<testinstance staticvaluex=X
staticvaluey=Y
staticvaluez=Z
{%- if testvalue1 is defined %}
value1 = "{{ testvalue1 }}"
{% else %}
{% endif %}
{% if testvalue2 is defined %}
value2 = "{{ testvalue2 }}"
{% endif %}
{% if testvalue3 is defined %}
value3 = "{{ testvalue3 }}"
{% endif %}
{% if testvalue4 is defined %}
value4 = "{{ testvalue4 }}"
{% endif %}
{% if testvalue5 is defined %}
value5 = "{{ testvalue5 }}"
{% endif %}
/>
</instances>
</configuration>
результат:
<?xml version = "1.0" encoding = "UTF-8"?>
<configuration>
<instances>
<testinstance staticvaluex=X
staticvaluey=Y
staticvaluez=Z
value1 = "A"
value2 = "B"
value4 = "D"
value5 = "E"
/>
</instances>
</configuration>
Большое спасибо, это работает. Я должен был начать с размещения блоков if/endif в отдельных строках, а не в одной строке.