From 66426aa7dddd94cfcf8a5639f28a9ea9b52b0dc6 Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Fri, 27 Jan 2017 16:51:03 -0500 Subject: [PATCH] Store project update and inventory update stdout in the database So things work across the cluster --- awx/main/tasks.py | 18 ++++++++++++++++++ awx/main/utils/common.py | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/awx/main/tasks.py b/awx/main/tasks.py index 216a4f4534..4da3da0f59 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -1314,6 +1314,15 @@ class RunProjectUpdate(BaseTask): ''' return kwargs.get('private_data_files', {}).get('scm_credential', '') + def get_stdout_handle(self, instance): + stdout_handle = super(RunProjectUpdate, self).get_stdout_handle(instance) + + def raw_callback(data): + instance_actual = ProjectUpdate.objects.get(pk=instance.pk) + instance_actual.result_stdout_text += data + instance_actual.save() + return OutputEventFilter(stdout_handle, raw_callback=raw_callback) + def post_run_hook(self, instance, status, **kwargs): if instance.job_type == 'check' and status not in ('failed', 'canceled',): p = instance.project @@ -1666,6 +1675,15 @@ class RunInventoryUpdate(BaseTask): args.append('--traceback') return args + def get_stdout_handle(self, instance): + stdout_handle = super(RunInventoryUpdate, self).get_stdout_handle(instance) + + def raw_callback(data): + instance_actual = InventoryUpdate.objects.get(pk=instance.pk) + instance_actual.result_stdout_text += data + instance_actual.save() + return OutputEventFilter(stdout_handle, raw_callback=raw_callback) + def build_cwd(self, inventory_update, **kwargs): return self.get_path_to('..', 'plugins', 'inventory') diff --git a/awx/main/utils/common.py b/awx/main/utils/common.py index bed0588287..d571408122 100644 --- a/awx/main/utils/common.py +++ b/awx/main/utils/common.py @@ -766,9 +766,10 @@ class OutputEventFilter(object): EVENT_DATA_RE = re.compile(r'\x1b\[K((?:[A-Za-z0-9+/=]+\x1b\[\d+D)+)\x1b\[K') - def __init__(self, fileobj=None, event_callback=None): + def __init__(self, fileobj=None, event_callback=None, raw_callback=None): self._fileobj = fileobj self._event_callback = event_callback + self._raw_callback = raw_callback self._counter = 1 self._start_line = 0 self._buffer = '' @@ -781,6 +782,8 @@ class OutputEventFilter(object): if self._fileobj: self._fileobj.write(data) self._buffer += data + if self._raw_callback: + self._raw_callback(data) while True: match = self.EVENT_DATA_RE.search(self._buffer) if not match: