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

如何在Ansible中匹配SonarQube质量门带前缀指标并获取ID

问题描述

我正在通过API操作SonarQube的质量门(qualitygate)条件,但SonarQube的条件管理存在设计局限:创建条件时只需指定质量门名称、指标(metric)、错误阈值(error)和操作符(operator),但删除条件必须使用SonarQube自动生成的ID。

因此,我需要从API返回的所有条件列表中,匹配自定义的指标名称(部分SonarQube条件会自动添加new_前缀),并获取对应条件的ID。最终目标是根据变量中定义的state字段(present/absent)管理条件,移除state为absent的条件。

我已经定义了Ansible变量和获取条件详情的任务,能够过滤出API返回的条件列表,但不知道如何同时匹配带前缀和不带前缀的指标,也不清楚如何提取对应ID。我尝试过部分写法,但无法高效处理前缀匹配,也不知道如何批量处理所有条件。

我的Ansible变量
vars:
  qualitygate:
    - qualitygate_name: Codecover
      operators:
        - metric: coverage
          operator: CT
          error: 1
          state: present
    - qualitygate_name: Conditions_Java
      operators:
        - metric: coverage
          operator: CT
          error: 10
          state: present
        - metric: duplicated_lines
          operator: GT
          error: 5
          state: present
        - metric: reliability_rating
          operator: WT
          error: D
          state: present
        - metric: security_hotspot_reviewed
          operator: CF
          error: D
          state: absent
我的Ansible任务
- name: Sonarqube | Configuration-QualityGates | Get Condition Details
  ansible.builtin.uri:
    url: "{{ protocol }}://{{ server_fqdn }}/api/qualitygates/show?name={{ item.qualitygate_name }}"
    user: admin
    password: pass
    method: GET
  register: _result_qgconditions
  loop: "{{ qualitygate }}"
  failed_when: _result_qgconditions.status != 200 and _result_qgconditions.status != 400

- name: Sonarqube | Configuration as Code | Qualitygates | Print Conditions with ID
  ansible.builtin.debug:
    msg: "{{ _result_qgconditions.results[0].json.conditions }}"
  with_subelements:
    - "{{ qualitygate }}"
    - operators
API返回的条件示例
ok: [sonarqube.host] => (item=[{'qualitygate_name': 'Codecover'}, {'metric': 'coverage', 'operator': 'CT', 'error': 1, 'state': 'present'}]) => {
    "msg": [
        {
            "error": "1",
            "id": "AZOR44V_lbLIR0tr5ThG",
            "metric": "new_maintainability_rating",
            "op": "GT"
        },
        {
            "error": "1",
            "id": "AZOR44WBlbLIR0tr5ThH",
            "metric": "new_reliability_rating",
            "op": "GT"
        },
        {
            "error": "100",
            "id": "AZOR44WDlbLIR0tr5ThI",
            "metric": "new_security_hotspots_reviewed",
            "op": "LT"
        },
        {
            "error": "1",
            "id": "AZOR44WElbLIR0tr5ThJ",
            "metric": "new_security_rating",
            "op": "GT"
        },
        {
            "error": "3",
            "id": "AZOR44WFlbLIR0tr5ThK",
            "metric": "new_duplicated_lines_density",
            "op": "GT"
        }
    ]
}
我尝试过的写法(无法正确处理前缀匹配)
- name: Sonarqube | Configuration as Code | Qualitygates | Print Conditions with ID
  ansible.builtin.debug:
    msg: "{{ _result_qgconditions.results[0].json.conditions | selectattr('metrics', 'equalto', 'item[1].metric ) }}" 
  with_subelements:
    - "{{ qualitygate }}"
    - operators

内容的提问来源于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 11:12:35