You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:30:08