mirror of
https://github.com/ansible/awx.git
synced 2026-01-15 03:40:42 -03:30
* Celery + json pickling do not handle custom Exceptions (and may never do so). Mentioning of, if handling custom Exceptions then the code would be susceptible to same arbitrary code execution that python pickle is vulnerable to. * So don't use custom Exceptions.
37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
# Copyright (c) 2018 Ansible by Red Hat
|
|
# All Rights Reserved.
|
|
|
|
# Celery does not respect exception type when using a serializer different than pickle;
|
|
# and awx uses the json serializer
|
|
# https://github.com/celery/celery/issues/3586
|
|
|
|
|
|
class _AwxTaskError():
|
|
def build_exception(self, task, message=None):
|
|
if message is None:
|
|
message = "Execution error running {}".format(task.log_format)
|
|
e = Exception(message)
|
|
e.task = task
|
|
e.is_awx_task_error = True
|
|
return e
|
|
|
|
def TaskCancel(self, task, rc):
|
|
"""Canceled flag caused run_pexpect to kill the job run"""
|
|
message="{} was canceled (rc={})".format(task.log_format, rc)
|
|
e = self.build_exception(task, message)
|
|
e.rc = rc
|
|
e.awx_task_error_type = "TaskCancel"
|
|
return e
|
|
|
|
def TaskError(self, task, rc):
|
|
"""Userspace error (non-zero exit code) in run_pexpect subprocess"""
|
|
message = "{} encountered an error (rc={}), please see task stdout for details.".format(task.log_format, rc)
|
|
e = self.build_exception(task, message)
|
|
e.rc = rc
|
|
e.awx_task_error_type = "TaskError"
|
|
return e
|
|
|
|
|
|
AwxTaskError = _AwxTaskError()
|
|
|