if runner crashes, attempt to record why

this attempts to surface the underlying runner exception for tracebacks
like this one:

FileNotFoundError: [Errno 2] No such file or directory:
'/tmp/awx_41_93gtgv25/artifacts/41/status'
This commit is contained in:
Ryan Petrello
2019-04-15 11:35:42 -04:00
parent e8de7bc845
commit 387682ed8d
3 changed files with 27 additions and 7 deletions

View File

@@ -1103,7 +1103,7 @@ class BaseTask(object):
start_args='') # blank field to remove encrypted passwords
self.instance.websocket_emit_status("running")
status, rc, tb = 'error', None, ''
status, rc = 'error', None
output_replacements = []
extra_update_fields = {}
fact_modification_times = {}
@@ -1255,7 +1255,7 @@ class BaseTask(object):
except Exception:
# this could catch programming or file system errors
tb = traceback.format_exc()
extra_update_fields['result_traceback'] = traceback.format_exc()
logger.exception('%s Exception occurred while running task', self.instance.log_format)
finally:
logger.info('%s finished running, producing %s events.', self.instance.log_format, self.event_ct)
@@ -1266,7 +1266,7 @@ class BaseTask(object):
logger.exception('{} Post run hook errored.'.format(self.instance.log_format))
self.instance = self.update_model(pk)
self.instance = self.update_model(pk, status=status, result_traceback=tb,
self.instance = self.update_model(pk, status=status,
output_replacements=output_replacements,
emitted_events=self.event_ct,
**extra_update_fields)