Ansible:如何基于state值过滤子元素执行循环任务?
如何过滤Ansible嵌套字典中state为present的子元素?
你当前需要实现的是:在Ansible任务中跳过嵌套字典里state为absent的子元素,仅执行state为present的项。
你的嵌套字典定义如下:
qualitygate: - qualitygate_name: QA-dev operators: - metric: coverage operator: CT error: 1 state: present - qualitygate_name: Department-xyc operators: - metric: coverage operator: CT error: 10 state: absent - metric: duplicated_lines operator: GT error: 5 state: present
当前任务的when条件写法有误,因为subelements过滤器返回的item是一个二元列表:item.0对应外层的qualitygate条目,item.1对应嵌套的operators子项,state字段属于item.1层级。
修改后的完整任务如下:
- ansible.builtin.uri: url: "{{ protocol }}://{{ server_fqdn }}/api/qualitygates/create_condition" user: "{{ token }}" method: POST body_format: form-urlencoded body: error: "{{ item.1.error }}" metric: "{{ item.1.metric }}" gateName: "{{ item.0.qualitygate_name }}" op: "{{ item.1.operator }}" loop: "{{ qualitygate | subelements('operators', 'skip_missing=True') }}" when: item.1.state == 'present'
补充说明:
- 直接通过
item.1.state访问子元素的状态字段,精确匹配present即可过滤掉absent项。 - 如果需要支持大小写不敏感的匹配场景,可以改用
item.1.state | lower is match('present'),但精确匹配在大多数场景下更高效简洁。
内容的提问来源于stack exchange,提问作者G4nja Wizard
相关产品推荐
相关产品推荐

