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