Ansible:从列表中删除空值并将其分配给新列表

aci*_*cin 2 ansible

我有一个使用任务收集的值在 ansible 中生成的列表。在该列表中,有一些空字符串,因为某些键没有分配给它们的值。所以,我想要实现的是将该列表分配给一个新列表,但没有那些空值。

list1: [
   "a",
   "b",
   "",
   "7",
   ""
]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法,但似乎不起作用:

set_fact:
  list2: "{{ list1 1 | rejectattr('') |list }}"
Run Code Online (Sandbox Code Playgroud)

有没有人能够指出我做错了什么并为我的问题提供解决方案?

Ansible version: 2.9.1

Vla*_*tka 5

问:从 list1 ["a", "b", "", "7", ""] 中删除空值

答:只需使用选择过滤器。引用:

“如果未指定测试,则每个对象都将被评估为布尔值。”

    - set_fact:
        list2: "{{ list1|select()|list }}"
    - debug:
        var: list2
Run Code Online (Sandbox Code Playgroud)

    "list2": [
        "a", 
        "b", 
        "7"
    ]
Run Code Online (Sandbox Code Playgroud)

通过拒绝空字符串可以获得相同的结果。例如

    - set_fact:
        list2: "{{ list1|reject('match', '^$')|list }}"
Run Code Online (Sandbox Code Playgroud)