From 15ad0c3349af63aad88f2dfa97c90b9b82c57572 Mon Sep 17 00:00:00 2001 From: Shane McDonald Date: Mon, 26 Apr 2021 17:35:20 -0400 Subject: [PATCH] Improve error handling / display when Ansible Runner errors --- awx/main/tasks.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/awx/main/tasks.py b/awx/main/tasks.py index 09ea552e6b5f..8a2395f811ca 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -1279,6 +1279,8 @@ def status_handler(self, status_data, runner_config): if k in job_env: job_env[k] = v self.instance = self.update_model(self.instance.pk, job_args=json.dumps(runner_config.command), job_cwd=runner_config.cwd, job_env=job_env) + elif status_data['status'] == 'error': + self.instance = self.update_model(self.instance.pk, result_traceback=status_data['result_traceback']) def check_handler(self, config): """ @@ -3002,6 +3004,8 @@ def _run_internal(self, receptor_ctl): # TODO: There should be a more efficient way of getting this information receptor_work_list = receptor_ctl.simple_command("work list") detail = receptor_work_list[self.unit_id]['Detail'] + state_name = receptor_work_list[self.unit_id]['StateName'] + if 'exceeded quota' in detail: logger.warn(detail) log_name = self.task.instance.log_format @@ -3009,6 +3013,11 @@ def _run_internal(self, receptor_ctl): self.task.update_model(self.task.instance.pk, status='pending') return + # If ansible-runner ran, but the job itself failed, the traceback information + # is saved via the status_handler passed in to the processor. + if state_name == 'Succeeded': + return res + raise RuntimeError(detail) return res