Ansible如何根据字典子键匹配值,将对应父键设置为fact
实现方案
你可以通过两种常见方式实现该需求:
方式1:直接遍历原字典匹配(无需依赖shell任务的执行结果)
直接对my_dict遍历判断,匹配到对应值时直接取父键赋值:
- set_fact: desired_output: "{{ item.key }}" loop: "{{ my_dict | dict2items }}" # 可替换为你要匹配的任意目标值 when: item.value.some_key == 'second_value'
如果存在多个匹配的父键,且你需要保存所有匹配结果,可以修改为数组存储的写法:
- set_fact: desired_output: "{{ desired_output | default([]) + [item.key] }}" loop: "{{ my_dict | dict2items }}" when: item.value.some_key == 'second_value'
方式2:基于之前shell任务的返回结果匹配
如果你需要依赖shell命令实际执行输出的结果做判断,可以使用exec_output的返回值遍历:
- set_fact: desired_output: "{{ item.item.key }}" loop: "{{ exec_output.results }}" # stdout为shell命令的输出结果,和目标值匹配时赋值 when: item.stdout == 'second_value'
内容的提问来源于stack exchange,提问作者Kevin C
相关产品推荐
相关产品推荐

