Ansible:从列表中删除空值并将其分配给新列表
我在ansible中使用任务收集的值生成了一个列表。在该列表中,有空字符串,因为某些键没有指定值。因此,我试图实现的是将该列表分配给一个新列表,但不包含这些空值Ansible:从列表中删除空值并将其分配给新列表,ansible,Ansible,我在ansible中使用任务收集的值生成了一个列表。在该列表中,有空字符串,因为某些键没有指定值。因此,我试图实现的是将该列表分配给一个新列表,但不包含这些空值 list1: [ "a", "b", "", "7", "" ] 我尝试了以下方法,但似乎不起作用: set_fact: list2: "{{ list1 1 | rejectattr('') |list }}" 有人能指出我做错了什么,并为我的问题提供解决方案吗 Ansible版本:2.9.1请尝
list1: [
"a",
"b",
"",
"7",
""
]
我尝试了以下方法,但似乎不起作用:
set_fact:
list2: "{{ list1 1 | rejectattr('') |list }}"
有人能指出我做错了什么,并为我的问题提供解决方案吗
Ansible版本:2.9.1
请尝试以下操作
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"
]
}
Q:从列表1[“a”、“b”、“7”、“8]中删除空值。
答:只需使用过滤器。引述:
如果未指定测试,则每个对象都将作为布尔值进行计算
-设置事实:
列表2:{{list1 | select()| list}}”
-调试:
变量:列表2
给予
“列表2”:[
“a”,
“b”,
"7"
]
同样的结果也可以通过拒绝空字符串来实现。比如说
-设置事实:
列表2:{{list1 |拒绝('match','^$')|列表}
这给了我一个结果:“‘list2’:“[AnsibleUndefined]”您是否在上述变量中定义list2:[]是的,我确实初始化了一个空列表,但我是作为一个集合而不是变量来做的谢谢,您的解决方案工作得非常好!您能否告诉我如何排除列表1中的某个项目(基于字符串匹配)以复制到列表2中?例如,列表1=[“a”、“b”、“7”、“g”、“a”]和列表2获取[“b”、“7”、“g”]?要排除某些项目,请尝试组合。可能是唯一的,特别是差异。