Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 jsonfacts文件的字典中删除列表项(或分组)?_Ansible_Ansible Facts - Fatal编程技术网

有没有办法从Ansible jsonfacts文件的字典中删除列表项(或分组)?

有没有办法从Ansible jsonfacts文件的字典中删除列表项(或分组)?,ansible,ansible-facts,Ansible,Ansible Facts,我能够在test.yml文件中使用以下内容将两个列表合并在一起: set_fact: connectors: "{{containerports | default([]) }} + {{ newportslist }}" 在我的自定义事实JSON文件中生成了以下内容: { "containerports": [ { "containername": "two", "local_port_file": "1050

我能够在test.yml文件中使用以下内容将两个列表合并在一起:

        set_fact:
            connectors: "{{containerports | default([]) }} + {{ newportslist }}"
在我的自定义事实JSON文件中生成了以下内容:

{
"containerports": [
    {
        "containername": "two", 
        "local_port_file": "10502", 
        "local_port_stream": "11502", 
    }, 
    {
        "containername": "five", 
        "local_port_file": "10503", 
        "local_port_stream": "11503", 
    }
]
}
在Ansible中有没有一种方法可以删除整个列表{}?如果有,有没有一种方法可以根据字段名删除它

理想情况下,我会有一个类似“删除列表”的东西,它有一个名为“五”的容器名,然后将我的事实文件更新为:

{
"containerports": [
    {
        "containername": "two", 
        "local_port_file": "10502", 
        "local_port_stream": "11502", 
    } 
]
}

阅读。过滤器提供各种处理数据的方法。用于处理字典列表的常见过滤器是
selectattr
过滤器,它将根据某些属性从列表中提取字典。相应的
rejectattr
过滤器会提取任何不匹配的内容重新尝试以下方法:

---
- hosts: localhost
  connection: local
  vars:
    exclude_name: "two"
    containerports:
      - containername: "two" 
        local_port_file: "10502" 
        local_port_stream: "11502"
      - containername: "three" 
        local_port_file: "10503" 
        local_port_stream: "11503"
      - containername: "four" 
        local_port_file: "10504" 
        local_port_stream: "11504"
  tasks:
    - name: Extract all but dictionary called <exclude_name>
      set_fact:
        containerports: "{{ containerports | rejectattr('containername', 'match', exclude_name) | list }}"
    - name: Display the result
      debug:
        var: containerports
阅读。过滤器提供各种处理数据的方法。用于处理字典列表的常用过滤器是
selectattr
过滤器,它将根据某个属性从列表中提取字典。相应的
rejectattr
,可提取任何不匹配的内容。因此请注意:

---
- hosts: localhost
  connection: local
  vars:
    exclude_name: "two"
    containerports:
      - containername: "two" 
        local_port_file: "10502" 
        local_port_stream: "11502"
      - containername: "three" 
        local_port_file: "10503" 
        local_port_stream: "11503"
      - containername: "four" 
        local_port_file: "10504" 
        local_port_stream: "11504"
  tasks:
    - name: Extract all but dictionary called <exclude_name>
      set_fact:
        containerports: "{{ containerports | rejectattr('containername', 'match', exclude_name) | list }}"
    - name: Display the result
      debug:
        var: containerports