在Ansible中,可以使用rejectattr
过滤器来从查找结果中排除项目。下面是一个示例代码:
- name: Exclude items from lookup result
hosts: localhost
gather_facts: false
vars:
excluded_items:
- item2
- item4
tasks:
- name: Lookup items
set_fact:
items: "{{ lookup('file', 'items.txt').splitlines() }}"
- name: Exclude items
set_fact:
filtered_items: "{{ items | rejectattr('item', 'in', excluded_items) | map(attribute='item') | list }}"
- name: Print filtered items
debug:
var: filtered_items
在上面的示例中,假设有一个名为items.txt
的文件,包含以下内容:
item1
item2
item3
item4
item5
首先使用lookup
模块将文件内容读取到items
变量中。然后使用rejectattr
过滤器,将items
中的项目与excluded_items
中的项目进行比较,并排除匹配的项目。最后使用map
过滤器和list
过滤器将过滤后的结果转换为列表,并将结果存储在filtered_items
变量中。
最后使用debug
模块打印filtered_items
变量,以便查看过滤结果。
运行上述示例代码后,输出将是:
TASK [Print filtered items] *************************************************************************************************
ok: [localhost] => {
"filtered_items": [
"item1",
"item3",
"item5"
]
}
可以看到,item2
和item4
被成功排除了。