mirror of
https://github.com/ansible/awx.git
synced 2026-01-27 00:21:30 -03:30
this commit implements the bulk of `awx-manage run_dispatcher`, a new command that binds to RabbitMQ via kombu and balances messages across a pool of workers that are similar to celeryd workers in spirit. Specifically, this includes: - a new decorator, `awx.main.dispatch.task`, which can be used to decorate functions or classes so that they can be designated as "Tasks" - support for fanout/broadcast tasks (at this point in time, only `conf.Setting` memcached flushes use this functionality) - support for job reaping - support for success/failure hooks for job runs (i.e., `handle_work_success` and `handle_work_error`) - support for auto scaling worker pool that scale processes up and down on demand - minimal support for RPC, such as status checks and pool recycle/reload
34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
# Copyright (c) 2018 Ansible by Red Hat
|
|
# All Rights Reserved.
|
|
|
|
import six
|
|
|
|
|
|
class _AwxTaskError():
|
|
def build_exception(self, task, message=None):
|
|
if message is None:
|
|
message = six.text_type("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=six.text_type("{} 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 = six.text_type("{} 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()
|