如何跳过ansible循环中的空值



我需要跳过ansible循环中列表中的null值。我使用的是when条件,仍然打印null值。以下是我的行动手册:

- 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。空

"表示缺少值。这通常绑定到一个本机类null值(例如,Perl中的undef,Python中的None(">

关于如何测试null,还有更多选项。

  1. 与Python比较
when: item != None 
  1. 使用Jinja测试none
when: item is not none
  1. 如果出于任何原因必须与字符串进行比较,Jinja筛选器string会将null转换为string'None'
when: item|string != 'None'
  1. 最有效的方法是在迭代之前从列表中删除null
loop: "{{ show|reject('none')|list }}"

我不知道你是否想检查变量是否是"空";作为一个文本,或者如果变量没有值并且它是无效的,所以我将写两个例子:(,将null值作为字符串,并将其作为字符串进行比较:

- 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}}"

测试该值是否无效,并且它真的没有任何我们将使用的值,例如:

- hosts: localhost
vars:
show:
- read
- write
- null
- test
val: []
tasks:
- name: Fact
set_fact:
val: "{{val+[item]}}"
loop: "{{show}}"
when: item is not none
- name: Print
debug:
msg: "{{val}}"

最新更新