Ansible中如何使用指定键列表过滤字典并循环遍历?
解决Ansible字典按预定义键列表过滤遍历的问题
你不需要在when条件里嵌套模板语法({{}}),直接在Jinja2表达式中引用customListOfKeys变量即可,正确的写法如下:
loop: "{{ lookup('ansible.builtin.dict', libraries) }}" when: item.key in customListOfKeys
完整示例playbook
- name: 过滤字典中指定键的项 hosts: localhost vars: libraries: aaa: lib_a bbb: lib_b ccc: lib_c ddd: lib_d customListOfKeys: - aaa - ccc tasks: - name: 遍历匹配的字典项 debug: msg: "键: {{ item.key }}, 值: {{ item.value }}" loop: "{{ lookup('ansible.builtin.dict', libraries) }}" when: item.key in customListOfKeys
更高效的替代方案:提前过滤字典
如果字典规模较大,建议先过滤出符合条件的键值对再循环,避免在循环中逐个判断,示例如下:
- name: 提前过滤字典再遍历 debug: msg: "键: {{ item.key }}, 值: {{ item.value }}" loop: "{{ libraries | dict2items | selectattr('key', 'in', customListOfKeys) | list }}"
这里用dict2items把字典转成键值对列表,再通过selectattr结合in测试筛选出符合条件的项,最后转成列表用于循环。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

