如何通过API检测Ansible AWX/Tower已取消任务?代码问题排查
问题分析与修正方案
核心问题
- 字段名错误:AWX/Tower的Job API返回数据中,状态字段是
status而非job_status,原代码中item['job_status']会触发「键不存在」的异常。 - 条件与需求不符:你要检测已取消任务,但原条件判断的是失败状态(
"Failed"),AWX中已取消任务的状态值为"canceled"。 - 变量未初始化:
list_of_jobs_info未提前初始化,首次执行会因变量不存在报错。 - 缩进语法错误:原代码中
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
相关产品推荐
相关产品推荐

