如何在ansible循环中跳过空值
我需要从 ansible 循环中的列表中跳过值 null。我正在使用 when 条件,仍然打印空值。下面是我的剧本:
- hosts: localhost
vars:
show:
- read
- write
- null
- test
val: []
tasks:
- name: Fact
set_fact:
val: "{{val+[item]}}"
loop: "{{show}}"
when: item != "null"
- name: Print
debug:
msg: "{{val}}"
输出:
TASK [Print] ***
ok: [localhost] => {
"msg": [
"read",
"write",
null,
"test"
]
}
请指教。
回答
引自YAML 10.2.1.1。空值
“表示缺少值。这通常绑定到本机类似空值的值(例如,Perl 中的 undef,Python 中的 None)。......”
关于如何测试null有更多选项。
- 与 Python 比较无
when: item != None
- 使用 Jinja 测试无
when: item is not none
- 如果您出于某种原因必须与字符串进行比较,则 Jinja 过滤器字符串会将null转换为字符串'None'
when: item|string != 'None'
- 最有效的方法是在迭代之前从列表中删除空值
loop: "{{ show|reject('none')|list }}"