我使用任务收集的值在 Ansible 中生成了一个列表。
在该列表中,有空字符串,因为某些键没有分配给它们的值。
所以,我想要实现的目标是将该列表分配给一个新列表,但没有那些空值。
list1: [
"a",
"b",
"",
"7",
""
]
我尝试了以下方法,但似乎不起作用:
set_fact:
list2: "{{ list1 1 | rejectattr('') |list }}"
有人能够指出我做错了什么并为我的问题提供解决方案吗?
Ansible 版本:2.9.1
问:从list1中删除空值[“a”,“b”,“”,“7”,“”]
A:使用过滤器选择。引用:
“如果未指定测试,则每个对象将被评估为布尔值。”
- set_fact:
list2: "{{ list1|select() }}"
vars:
list1: ["a", "b", "", "7", ""]
给予
list2: [a, b, '7']
问:如果某个元素为0或False?
A:0和False都计算为布尔值False。过滤器select也会删除它们
- set_fact:
list2: "{{ list1|select() }}"
vars:
list1: ["a", "b", 0, "7", False, ""]
给出相同的结果
list2: [a, b, '7']
- set_fact:
list2: "{{ list1|reject('match', '^$') }}"
vars:
list1: ["a", "b", 0, "7", False, ""]
给予
list2: [a, b, 0, '7', false]
请尝试如下
vars:
list1: [ "a", "b", "", "7", "" ]
list2: []
tasks:
- name: test
set_fact:
list2: "{{list2 + [item]}}"
when: item != ""
with_items:
- "{{list1}}"
输出
ok: [localhost] => {
"msg": [
"a",
"b",
"7"
]
}