for loop
是这样的
{% for m in grp %}
abc {{ m.length }}
pqr
xyz
{% if m.flag is defined and m.flag == "f" %}
yes f {% endif %}
{% for r in uv %}
abcdef
{% endfor %}
{% endfor %}
现在的问题是
grp
的某些成员没有 flag
变量。只要存在 flag
,就会正确添加 option true
行。但是当if条件不满足时,它只是添加一个空行。这 4 或 5 行应该没有额外的空行,否则生成的配置文件将被标记为无效。
谁能帮我解决这个问题吗?
问:不满足条件则添加空行。
A:请参阅空白控制。引用:
如果在块(例如 For 标签)、注释或变量表达式的开头或结尾添加减号 (-),则该块之前或之后的空格将被删除。
下面的模板可以满足您的需求
{% if m.flag is defined and m.flag == "f" %}
yes f
{% endif -%}
例如,给定数据
grp:
- {length: 1, flag: x}
- {length: 2}
- {length: 3, flag: f}
- {length: 4, flag: f}
{% for m in grp %}
{{ m.length }}
xyz
{% if m.flag is defined and m.flag == "f" %}
yes f {% endif %}
{% endfor %}
添加空行
1
xyz
2
xyz
3
xyz
yes f
4
xyz
yes f
{% for m in grp %}
{{ m.length }}
xyz
{% if m.flag is defined and m.flag == "f" %}
yes f
{% endif -%}
{% endfor %}
没有空行
1
xyz
2
xyz
3
xyz
yes f
4
xyz
yes f
{% for m in grp %}
{{ m.length }}
xyz
{% if m.flag|default('') == "f" %}
yes f
{% endif -%}
{% endfor %}
用于测试的完整剧本示例
- hosts: localhost
vars:
grp:
- {length: 1, flag: x}
- {length: 2}
- {length: 3, flag: f}
- {length: 4, flag: f}
tasks:
- debug:
msg: |
{% for m in grp %}
{{ m.length }}
xyz
{% if m.flag is defined and m.flag == "f" %}
yes f {% endif %}
{% endfor %}
tags: t1
- debug:
msg: |
{% for m in grp %}
{{ m.length }}
xyz
{% if m.flag is defined and m.flag == "f" %}
yes f
{% endif -%}
{% endfor %}
tags: t2
- debug:
msg: |
{% for m in grp %}
{{ m.length }}
xyz
{% if m.flag|d('') == "f" %}
yes f
{% endif -%}
{% endfor %}
tags: t3