mirror of
https://github.com/ansible/awx.git
synced 2026-05-20 15:27:47 -02:30
generalize stdout event processing to emit events for *all* job types
* introduces three new models: `ProjectUpdateEvent`, `InventoryUpdateEvent`, and `SystemJobEvent` * simplifies the stdout callback management in `tasks.py` - now _all_ job run types capture and emit events to the callback receiver * supports stdout reconstruction from events for stdout downloads for _all_ job types * configures `ProjectUpdate` runs to configure the awx display callback (so we can capture real playbook events for `project_update.yml`) * ProjectUpdate, InventoryUpdate, and SystemJob runs no longer write text blobs to the deprecated `main_unifiedjob.result_stdout_text` column see: https://github.com/ansible/awx/issues/200
This commit is contained in:
@@ -128,8 +128,17 @@ class CallbackBrokerWorker(ConsumerMixin):
|
||||
logger.error("Exception on worker thread, restarting: " + str(e))
|
||||
continue
|
||||
try:
|
||||
if 'job_id' not in body and 'ad_hoc_command_id' not in body:
|
||||
raise Exception('Payload does not have a job_id or ad_hoc_command_id')
|
||||
|
||||
event_map = {
|
||||
'job_id': JobEvent,
|
||||
'ad_hoc_command_id': AdHocCommandEvent,
|
||||
'project_update_id': ProjectUpdateEvent,
|
||||
'inventory_update_id': InventoryUpdateEvent,
|
||||
'system_job_id': SystemJobEvent,
|
||||
}
|
||||
|
||||
if not any([key in body for key in event_map]):
|
||||
raise Exception('Payload does not have a job identifier')
|
||||
if settings.DEBUG:
|
||||
from pygments import highlight
|
||||
from pygments.lexers import PythonLexer
|
||||
@@ -140,16 +149,15 @@ class CallbackBrokerWorker(ConsumerMixin):
|
||||
))
|
||||
|
||||
def _save_event_data():
|
||||
if 'job_id' in body:
|
||||
JobEvent.create_from_data(**body)
|
||||
elif 'ad_hoc_command_id' in body:
|
||||
AdHocCommandEvent.create_from_data(**body)
|
||||
for key, cls in event_map.items():
|
||||
if key in body:
|
||||
cls.create_from_data(**body)
|
||||
|
||||
job_identifier = 'unknown job'
|
||||
if 'job_id' in body:
|
||||
job_identifier = body['job_id']
|
||||
elif 'ad_hoc_command_id' in body:
|
||||
job_identifier = body['ad_hoc_command_id']
|
||||
for key in event_map.keys():
|
||||
if key in body:
|
||||
job_identifier = body[key]
|
||||
break
|
||||
|
||||
retries = 0
|
||||
while retries <= self.MAX_RETRIES:
|
||||
|
||||
Reference in New Issue
Block a user