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

如何通过API检测Ansible AWX/Tower已取消任务?代码问题排查

问题分析与修正方案

核心问题

  1. 字段名错误:AWX/Tower的Job API返回数据中,状态字段是status而非job_status,原代码中item['job_status']会触发「键不存在」的异常。
  2. 条件与需求不符:你要检测已取消任务,但原条件判断的是失败状态("Failed"),AWX中已取消任务的状态值为"canceled"。
  3. 变量未初始化:list_of_jobs_info未提前初始化,首次执行会因变量不存在报错。
  4. 缩进语法错误:原代码中register : subset_data的缩进不符合Ansible语法规范,且该register无实际意义(set_fact循环时会覆盖值)。

修正后的完整代码

- name: 初始化已取消任务列表
  set_fact:
    list_of_jobs_info: []

- name: Pull Jobs Data
  uri:
    url: https://ansible2.xrxi.com/api/v2/jobs/?format=json&page=1&page_size=1000
    headers:
      Content-Type: application/json
      Authorization: "Bearer {{ lookup('env', 'TOWER_PASSWORD') }}"
  register: jobs_data

- name: 收集已取消任务信息
  set_fact:
    list_of_jobs_info: "{{ list_of_jobs_info + [{ 'job_id' : item['id'], 'job_name' : item['name'], 'job_status' : item['status'],  'job_cancel' : item['canceled_on'], 'job_template_id' : item['summary_fields']['job_template']['id'], 'job_template_name' : item['summary_fields']['job_template']['name'] }] }}"
  when:
    - item['canceled_on'] is defined
    - item['summary_fields']['job_template'] is defined
    - item['status'] == "canceled"
  loop: "{{ jobs_data['json']['results'] }}"

- name: 输出已取消任务信息
  debug:
    var: list_of_jobs_info

修正说明

  • 新增初始化任务:提前将list_of_jobs_info设为空列表,避免变量未定义报错。
  • 修正状态判断:将item['job_status'] == "Failed"改为item['status'] == "canceled",既匹配API字段,又符合「检测已取消任务」的需求。
  • 修复语法问题:调整缩进,移除无意义的register: subset_data,直接通过debug输出目标任务列表。

内容的提问来源于stack exchange,提问作者abrahavt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:25:34