mirror of
https://github.com/ansible/awx.git
synced 2026-05-19 14:57:39 -02:30
Merge pull request #4359 from chrismeyersfsu/enhancement-artifacts_set_stats
set_stats support
This commit is contained in:
@@ -178,7 +178,7 @@ class EventContext(object):
|
|||||||
event_data['res'] = {}
|
event_data['res'] = {}
|
||||||
event_dict = dict(event=event, event_data=event_data)
|
event_dict = dict(event=event, event_data=event_data)
|
||||||
for key in event_data.keys():
|
for key in event_data.keys():
|
||||||
if key in ('job_id', 'ad_hoc_command_id', 'uuid', 'parent_uuid', 'created', 'artifact_data'):
|
if key in ('job_id', 'ad_hoc_command_id', 'uuid', 'parent_uuid', 'created',):
|
||||||
event_dict[key] = event_data.pop(key)
|
event_dict[key] = event_data.pop(key)
|
||||||
elif key in ('verbosity', 'pid'):
|
elif key in ('verbosity', 'pid'):
|
||||||
event_dict[key] = event_data[key]
|
event_dict[key] = event_data[key]
|
||||||
|
|||||||
@@ -111,10 +111,6 @@ class BaseCallbackModule(CallbackBase):
|
|||||||
|
|
||||||
if 'res' in event_data:
|
if 'res' in event_data:
|
||||||
event_data['res'] = self.censor_result(copy.copy(event_data['res']))
|
event_data['res'] = self.censor_result(copy.copy(event_data['res']))
|
||||||
res = event_data.get('res', None)
|
|
||||||
if res and isinstance(res, dict):
|
|
||||||
if 'artifact_data' in res:
|
|
||||||
event_data['artifact_data'] = res['artifact_data']
|
|
||||||
|
|
||||||
if event not in self.EVENTS_WITHOUT_TASK:
|
if event not in self.EVENTS_WITHOUT_TASK:
|
||||||
task = event_data.pop('task', None)
|
task = event_data.pop('task', None)
|
||||||
@@ -319,6 +315,9 @@ class BaseCallbackModule(CallbackBase):
|
|||||||
with self.capture_event_data('playbook_on_notify', **event_data):
|
with self.capture_event_data('playbook_on_notify', **event_data):
|
||||||
super(BaseCallbackModule, self).v2_playbook_on_notify(result, handler)
|
super(BaseCallbackModule, self).v2_playbook_on_notify(result, handler)
|
||||||
|
|
||||||
|
'''
|
||||||
|
ansible_stats is, retoractively, added in 2.2
|
||||||
|
'''
|
||||||
def v2_playbook_on_stats(self, stats):
|
def v2_playbook_on_stats(self, stats):
|
||||||
self.clear_play()
|
self.clear_play()
|
||||||
# FIXME: Add count of plays/tasks.
|
# FIXME: Add count of plays/tasks.
|
||||||
@@ -329,7 +328,9 @@ class BaseCallbackModule(CallbackBase):
|
|||||||
ok=stats.ok,
|
ok=stats.ok,
|
||||||
processed=stats.processed,
|
processed=stats.processed,
|
||||||
skipped=stats.skipped,
|
skipped=stats.skipped,
|
||||||
|
artifact_data=stats.custom.get('_run', {})
|
||||||
)
|
)
|
||||||
|
|
||||||
with self.capture_event_data('playbook_on_stats', **event_data):
|
with self.capture_event_data('playbook_on_stats', **event_data):
|
||||||
super(BaseCallbackModule, self).v2_playbook_on_stats(stats)
|
super(BaseCallbackModule, self).v2_playbook_on_stats(stats)
|
||||||
|
|
||||||
|
|||||||
@@ -1175,7 +1175,6 @@ class JobEvent(CreatedModifiedModel):
|
|||||||
# Save UUID and parent UUID for determining parent-child relationship.
|
# Save UUID and parent UUID for determining parent-child relationship.
|
||||||
job_event_uuid = kwargs.get('uuid', None)
|
job_event_uuid = kwargs.get('uuid', None)
|
||||||
parent_event_uuid = kwargs.get('parent_uuid', None)
|
parent_event_uuid = kwargs.get('parent_uuid', None)
|
||||||
artifact_dict = kwargs.get('artifact_data', None)
|
|
||||||
|
|
||||||
# Sanity check: Don't honor keys that we don't recognize.
|
# Sanity check: Don't honor keys that we don't recognize.
|
||||||
valid_keys = {'job_id', 'event', 'event_data', 'playbook', 'play',
|
valid_keys = {'job_id', 'event', 'event_data', 'playbook', 'play',
|
||||||
@@ -1185,6 +1184,11 @@ class JobEvent(CreatedModifiedModel):
|
|||||||
if key not in valid_keys:
|
if key not in valid_keys:
|
||||||
kwargs.pop(key)
|
kwargs.pop(key)
|
||||||
|
|
||||||
|
event_data = kwargs.get('event_data', None)
|
||||||
|
artifact_dict = None
|
||||||
|
if event_data:
|
||||||
|
artifact_dict = event_data.pop('artifact_data', None)
|
||||||
|
|
||||||
# Try to find a parent event based on UUID.
|
# Try to find a parent event based on UUID.
|
||||||
if parent_event_uuid:
|
if parent_event_uuid:
|
||||||
cache_key = '{}_{}'.format(kwargs['job_id'], parent_event_uuid)
|
cache_key = '{}_{}'.format(kwargs['job_id'], parent_event_uuid)
|
||||||
@@ -1208,12 +1212,21 @@ class JobEvent(CreatedModifiedModel):
|
|||||||
|
|
||||||
# Save artifact data to parent job (if provided).
|
# Save artifact data to parent job (if provided).
|
||||||
if artifact_dict:
|
if artifact_dict:
|
||||||
event_data = kwargs.get('event_data', None)
|
|
||||||
if event_data and isinstance(event_data, dict):
|
if event_data and isinstance(event_data, dict):
|
||||||
res = event_data.get('res', None)
|
# Note: Core has not added support for marking artifacts as
|
||||||
if res and isinstance(res, dict):
|
# sensitive yet. Going forward, core will not use
|
||||||
if res.get('_ansible_no_log', False):
|
# _ansible_no_log to denote sensitive set_stats calls.
|
||||||
artifact_dict['_ansible_no_log'] = True
|
# Instead, they plan to add a flag outside of the traditional
|
||||||
|
# no_log mechanism. no_log will not work for this feature,
|
||||||
|
# in core, because sensitive data is scrubbed before sending
|
||||||
|
# data to the callback. The playbook_on_stats is the callback
|
||||||
|
# in which the set_stats data is used.
|
||||||
|
|
||||||
|
# Again, the sensitive artifact feature has not yet landed in
|
||||||
|
# core. The below is how we mark artifacts payload as
|
||||||
|
# senstive
|
||||||
|
# artifact_dict['_ansible_no_log'] = True
|
||||||
|
#
|
||||||
parent_job = Job.objects.filter(pk=kwargs['job_id']).first()
|
parent_job = Job.objects.filter(pk=kwargs['job_id']).first()
|
||||||
if parent_job and parent_job.artifacts != artifact_dict:
|
if parent_job and parent_job.artifacts != artifact_dict:
|
||||||
parent_job.artifacts = artifact_dict
|
parent_job.artifacts = artifact_dict
|
||||||
|
|||||||
Reference in New Issue
Block a user