如何在ansible循环中跳过空值

Smi*_*ily 2 loops 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}}"
Run Code Online (Sandbox Code Playgroud)

输出:

TASK [Print] ***
ok: [localhost] => {
    "msg": [
        "read",
        "write",
        null,
        "test"
    ]
}
Run Code Online (Sandbox Code Playgroud)

请指教。

Vla*_*tka 5

引自YAML 10.2.1.1。空值

“表示缺少值。这通常绑定到本机类似空值的值(例如,Perl 中的 undef,Python 中的 None)。......”

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

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