在Ansible中,可以使用dict2items
过滤器将字典转换为键值对的列表,然后使用条件判断来筛选出匹配的值,并仅对匹配的值运行playbook。
以下是一个示例代码:
---
- hosts: localhost
gather_facts: false
vars:
my_dict:
key1: value1
key2: value2
key3: value3
key4: value4
tasks:
- name: Convert dict to items
set_fact:
my_items: "{{ my_dict | dict2items }}"
- name: Filter items based on value
set_fact:
filtered_items: "{{ my_items | selectattr('value', 'match', '^value[12]$') | list }}"
- name: Run playbook for matching values
include_tasks: playbook.yml
loop: "{{ filtered_items }}"
loop_control:
loop_var: item
在上面的示例中,我们首先定义一个字典my_dict
,然后使用dict2items
过滤器将其转换为键值对的列表my_items
。接下来,我们使用selectattr
过滤器和正则表达式^value[12]$
筛选出值为value1
或value2
的项,并将结果保存在filtered_items
中。
最后,我们使用include_tasks
模块循环执行playbook.yml
,并将filtered_items
作为循环变量传递给该playbook。
请注意,上述示例中的playbook.yml
是一个占位符,你需要根据实际需求创建一个适用的playbook文件。