From 8374b41e21273bdb1d98f88d27f0c03e7ea62011 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 | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/awx/main/tasks.py b/awx/main/tasks.py index 09ea552e6b5f..990ed5aa4814 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -1279,6 +1279,10 @@ 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': + result_traceback = status_data.get('result_traceback', None) + if result_traceback: + self.instance = self.update_model(self.instance.pk, result_traceback=result_traceback) def check_handler(self, config): """ @@ -3002,6 +3006,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 +3015,11 @@ def _run_internal(self, receptor_ctl): self.task.update_model(self.task.instance.pk, status='pending') return + # If ansible-runner ran, but an error occured at runtime, 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