mirror of
https://github.com/ansible/awx.git
synced 2026-03-04 02:01:01 -03:30
properly capture job events for adhoc commands run on isolated instances
see: #7100
This commit is contained in:
@@ -412,11 +412,11 @@ class IsolatedManager(object):
|
|||||||
instance.hostname, task_result.get('msg', 'unknown failure')))
|
instance.hostname, task_result.get('msg', 'unknown failure')))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def wrap_stdout_handle(instance, private_data_dir, stdout_handle):
|
def wrap_stdout_handle(instance, private_data_dir, stdout_handle, event_data_key='job_id'):
|
||||||
dispatcher = CallbackQueueDispatcher()
|
dispatcher = CallbackQueueDispatcher()
|
||||||
|
|
||||||
def job_event_callback(event_data):
|
def job_event_callback(event_data):
|
||||||
event_data.setdefault('job_id', instance.id)
|
event_data.setdefault(event_data_key, instance.id)
|
||||||
if 'uuid' in event_data:
|
if 'uuid' in event_data:
|
||||||
filename = '{}-partial.json'.format(event_data['uuid'])
|
filename = '{}-partial.json'.format(event_data['uuid'])
|
||||||
partial_filename = os.path.join(private_data_dir, 'artifacts', 'job_events', filename)
|
partial_filename = os.path.join(private_data_dir, 'artifacts', 'job_events', filename)
|
||||||
|
|||||||
@@ -717,7 +717,8 @@ class BaseTask(Task):
|
|||||||
else:
|
else:
|
||||||
base_handle = super(self.__class__, self).get_stdout_handle(instance)
|
base_handle = super(self.__class__, self).get_stdout_handle(instance)
|
||||||
stdout_handle = isolated_manager.IsolatedManager.wrap_stdout_handle(
|
stdout_handle = isolated_manager.IsolatedManager.wrap_stdout_handle(
|
||||||
instance, kwargs['private_data_dir'], base_handle)
|
instance, kwargs['private_data_dir'], base_handle,
|
||||||
|
event_data_key=self.event_data_key)
|
||||||
if self.should_use_proot(instance, **kwargs):
|
if self.should_use_proot(instance, **kwargs):
|
||||||
if not check_proot_installed():
|
if not check_proot_installed():
|
||||||
raise RuntimeError('bubblewrap is not installed')
|
raise RuntimeError('bubblewrap is not installed')
|
||||||
@@ -832,6 +833,7 @@ class RunJob(BaseTask):
|
|||||||
|
|
||||||
name = 'awx.main.tasks.run_job'
|
name = 'awx.main.tasks.run_job'
|
||||||
model = Job
|
model = Job
|
||||||
|
event_data_key= 'job_id'
|
||||||
|
|
||||||
def build_private_data(self, job, **kwargs):
|
def build_private_data(self, job, **kwargs):
|
||||||
'''
|
'''
|
||||||
@@ -1117,7 +1119,7 @@ class RunJob(BaseTask):
|
|||||||
dispatcher = CallbackQueueDispatcher()
|
dispatcher = CallbackQueueDispatcher()
|
||||||
|
|
||||||
def job_event_callback(event_data):
|
def job_event_callback(event_data):
|
||||||
event_data.setdefault('job_id', instance.id)
|
event_data.setdefault(self.event_data_key, instance.id)
|
||||||
if 'uuid' in event_data:
|
if 'uuid' in event_data:
|
||||||
cache_event = cache.get('ev-{}'.format(event_data['uuid']), None)
|
cache_event = cache.get('ev-{}'.format(event_data['uuid']), None)
|
||||||
if cache_event is not None:
|
if cache_event is not None:
|
||||||
@@ -1125,7 +1127,7 @@ class RunJob(BaseTask):
|
|||||||
dispatcher.dispatch(event_data)
|
dispatcher.dispatch(event_data)
|
||||||
else:
|
else:
|
||||||
def job_event_callback(event_data):
|
def job_event_callback(event_data):
|
||||||
event_data.setdefault('job_id', instance.id)
|
event_data.setdefault(self.event_data_key, instance.id)
|
||||||
JobEvent.create_from_data(**event_data)
|
JobEvent.create_from_data(**event_data)
|
||||||
|
|
||||||
return OutputEventFilter(stdout_handle, job_event_callback)
|
return OutputEventFilter(stdout_handle, job_event_callback)
|
||||||
@@ -1910,6 +1912,7 @@ class RunAdHocCommand(BaseTask):
|
|||||||
|
|
||||||
name = 'awx.main.tasks.run_ad_hoc_command'
|
name = 'awx.main.tasks.run_ad_hoc_command'
|
||||||
model = AdHocCommand
|
model = AdHocCommand
|
||||||
|
event_data_key = 'ad_hoc_command_id'
|
||||||
|
|
||||||
def build_private_data(self, ad_hoc_command, **kwargs):
|
def build_private_data(self, ad_hoc_command, **kwargs):
|
||||||
'''
|
'''
|
||||||
@@ -2074,7 +2077,7 @@ class RunAdHocCommand(BaseTask):
|
|||||||
dispatcher = CallbackQueueDispatcher()
|
dispatcher = CallbackQueueDispatcher()
|
||||||
|
|
||||||
def ad_hoc_command_event_callback(event_data):
|
def ad_hoc_command_event_callback(event_data):
|
||||||
event_data.setdefault('ad_hoc_command_id', instance.id)
|
event_data.setdefault(self.event_data_key, instance.id)
|
||||||
if 'uuid' in event_data:
|
if 'uuid' in event_data:
|
||||||
cache_event = cache.get('ev-{}'.format(event_data['uuid']), None)
|
cache_event = cache.get('ev-{}'.format(event_data['uuid']), None)
|
||||||
if cache_event is not None:
|
if cache_event is not None:
|
||||||
@@ -2082,7 +2085,7 @@ class RunAdHocCommand(BaseTask):
|
|||||||
dispatcher.dispatch(event_data)
|
dispatcher.dispatch(event_data)
|
||||||
else:
|
else:
|
||||||
def ad_hoc_command_event_callback(event_data):
|
def ad_hoc_command_event_callback(event_data):
|
||||||
event_data.setdefault('ad_hoc_command_id', instance.id)
|
event_data.setdefault(self.event_data_key, instance.id)
|
||||||
AdHocCommandEvent.create_from_data(**event_data)
|
AdHocCommandEvent.create_from_data(**event_data)
|
||||||
|
|
||||||
return OutputEventFilter(stdout_handle, ad_hoc_command_event_callback)
|
return OutputEventFilter(stdout_handle, ad_hoc_command_event_callback)
|
||||||
|
|||||||
Reference in New Issue
Block a user