From 71fcb1a82c99ac3d573e0836c5dbf43788d114e7 Mon Sep 17 00:00:00 2001 From: chris meyers Date: Fri, 29 Mar 2019 13:50:29 -0400 Subject: [PATCH] process host facts for iso runs * Move isolated clean to our final run hook * ISO and non-iso code path now share the post-fact-processing code --- awx/main/isolated/manager.py | 1 - awx/main/tasks.py | 33 +++++++++++++++++++------------- awx/playbooks/check_isolated.yml | 12 +----------- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/awx/main/isolated/manager.py b/awx/main/isolated/manager.py index a5f64d6e57..5a51e898e0 100644 --- a/awx/main/isolated/manager.py +++ b/awx/main/isolated/manager.py @@ -366,5 +366,4 @@ class IsolatedManager(object): event_data = {'event': 'EOF', 'final_counter': 0} event_data.setdefault(self.event_data_key, self.instance.id) CallbackQueueDispatcher().dispatch(event_data) - self.cleanup() return status, rc diff --git a/awx/main/tasks.py b/awx/main/tasks.py index 4b58a1a253..a95074b19d 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -995,7 +995,7 @@ class BaseTask(object): Hook for any steps to run before job/task is marked as complete. ''' - def final_run_hook(self, instance, status, private_data_dir, fact_modification_times): + def final_run_hook(self, instance, status, private_data_dir, fact_modification_times, isolated_manager_instance=None): ''' Hook for any steps to run after job/task is marked as complete. ''' @@ -1088,6 +1088,7 @@ class BaseTask(object): ''' self.safe_env = {} private_data_dir = None + isolated_manager_instance = None try: isolated = self.instance.is_isolated() @@ -1199,17 +1200,17 @@ class BaseTask(object): os.path.join(private_data_dir, 'inventory') ) ansible_runner.utils.dump_artifacts(params) - manager_instance = isolated_manager.IsolatedManager( + isolated_manager_instance = isolated_manager.IsolatedManager( cancelled_callback=lambda: self.update_model(self.instance.pk).cancel_flag ) - status, rc = manager_instance.run(self.instance, - private_data_dir, - params.get('playbook'), - params.get('module'), - module_args, - event_data_key=self.event_data_key, - ident=str(self.instance.pk)) - self.event_ct = len(manager_instance.handled_events) + status, rc = isolated_manager_instance.run(self.instance, + private_data_dir, + params.get('playbook'), + params.get('module'), + module_args, + event_data_key=self.event_data_key, + ident=str(self.instance.pk)) + self.event_ct = len(isolated_manager_instance.handled_events) else: res = ansible_runner.interface.run(**params) status = res.status @@ -1239,7 +1240,7 @@ class BaseTask(object): **extra_update_fields) try: - self.final_run_hook(self.instance, status, private_data_dir, fact_modification_times) + self.final_run_hook(self.instance, status, private_data_dir, fact_modification_times, isolated_manager_instance=isolated_manager_instance) except Exception: logger.exception('{} Final run hook errored.'.format(self.instance.log_format)) @@ -1568,7 +1569,7 @@ class RunJob(BaseTask): ('project_update', local_project_sync.name, local_project_sync.id))) raise - def final_run_hook(self, job, status, private_data_dir, fact_modification_times): + def final_run_hook(self, job, status, private_data_dir, fact_modification_times, isolated_manager_instance=None): super(RunJob, self).final_run_hook(job, status, private_data_dir, fact_modification_times) if not private_data_dir: # If there's no private data dir, that means we didn't get into the @@ -1580,7 +1581,8 @@ class RunJob(BaseTask): os.path.join(private_data_dir, 'artifacts', str(job.id), 'fact_cache'), fact_modification_times, ) - + if isolated_manager_instance: + isolated_manager_instance.cleanup() try: inventory = job.inventory except Inventory.DoesNotExist: @@ -2340,6 +2342,11 @@ class RunAdHocCommand(BaseTask): ''' return getattr(settings, 'AWX_PROOT_ENABLED', False) + def final_run_hook(self, adhoc_job, status, private_data_dir, fact_modification_times, isolated_manager_instance=None): + super(RunAdHocCommand, self).final_run_hook(adhoc_job, status, private_data_dir, fact_modification_times) + if isolated_manager_instance: + isolated_manager_instance.cleanup() + @task() class RunSystemJob(BaseTask): diff --git a/awx/playbooks/check_isolated.yml b/awx/playbooks/check_isolated.yml index 7cb3724da2..5d35783bce 100644 --- a/awx/playbooks/check_isolated.yml +++ b/awx/playbooks/check_isolated.yml @@ -18,20 +18,10 @@ src: "{{src}}/artifacts/" dest: "{{src}}/artifacts/" mode: pull + delete: yes recursive: yes - name: Fail if previous check determined that process is not alive. fail: msg: "isolated task is still running" when: "is_alive.rc == 0" - - - stat: path="{{src}}/facts/" - register: fact_cache - - - name: Copy gathered facts from the isolated host. - synchronize: - src: "{{src}}/facts/" - dest: "{{src}}/facts/" - delete: yes # delete fact cache records that go missing via clear_facts - mode: pull - when: fact_cache.stat.exists