我有一个字典列表
member:
- name: test2
orig: test2
- name: test1
orig: test1
并且想要从列表中的所有字典中删除orig键和值。
- name: Print Firewall Group Member
debug:
msg: "{{ item }}"
loop: "{{ member }}"
TASK [Print Firewall Group Member] *****************************************************************************************
ok: [fortigate01] => (item={'name': 'test2', 'orig': 'test2'}) => {
"msg": {
"name": "test2",
"orig": "test2"
}
}
ok: [fortigate01] => (item={'name': 'test1', 'orig': 'test1'}) => {
"msg": {
"name": "test1",
"orig": "test1"
}
}
最佳答案
- 使用过滤器ansible.utils.remove_keys 。例如,给定简化数据
member:
- name: test2
orig: test2
- name: test1
orig: test1
声明变量
names: "{{ member|ansible.utils.remove_keys(target=['orig']) }}"
给出
names:
- name: test2
- name: test1
- (可选)使用过滤器 ansible.utils.keep_keys 。下面的声明给出了相同的结果
names: "{{ member|ansible.utils.keep_keys(target=['name']) }}"
- 下一个选项是json_query
names: "{{ member|json_query('[].{name: name}') }}"
用于测试的完整剧本示例
- hosts: localhost
vars:
member:
- name: test2
orig: test2
- name: test1
orig: test1
names: "{{ member|ansible.utils.remove_keys(target=['orig']) }}"
name2: "{{ member|ansible.utils.keep_keys(target=['name']) }}"
name3: "{{ member|json_query('[].{name: name}') }}"
tasks:
- debug:
var: names
- debug:
var: name2
- debug:
var: name3
关于Ansible - 删除键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74384102/