如何在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
相关产品推荐
相关产品推荐

