Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible:从列表中删除空值并将其分配给新列表_Ansible - Fatal编程技术网

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

Ansible:从列表中删除空值并将其分配给新列表,ansible,Ansible,我在ansible中使用任务收集的值生成了一个列表。在该列表中,有空字符串,因为某些键没有指定值。因此,我试图实现的是将该列表分配给一个新列表,但不包含这些空值 list1: [ "a", "b", "", "7", "" ] 我尝试了以下方法,但似乎不起作用: set_fact: list2: "{{ list1 1 | rejectattr('') |list }}" 有人能指出我做错了什么,并为我的问题提供解决方案吗 Ansible版本:2.9.1请尝

我在ansible中使用任务收集的值生成了一个列表。在该列表中,有空字符串,因为某些键没有指定值。因此,我试图实现的是将该列表分配给一个新列表,但不包含这些空值

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”]?要排除某些项目,请尝试组合。可能是唯一的,特别是差异。