Merge pull request #6218 from AlanCoding/scm_inv_cancel

SCM inventory cancel propagation
This commit is contained in:
Alan Rominger
2017-05-10 15:52:31 -04:00
committed by GitHub
4 changed files with 52 additions and 6 deletions

View File

@@ -1361,6 +1361,7 @@ class RunProjectUpdate(BaseTask):
def _update_dependent_inventories(self, project_update, dependent_inventory_sources):
project_request_id = '' if self.request.id is None else self.request.id
scm_revision = project_update.project.scm_revision
inv_update_class = InventoryUpdate._get_task_class()
for inv_src in dependent_inventory_sources:
if not inv_src.update_on_project_update:
continue
@@ -1381,15 +1382,23 @@ class RunProjectUpdate(BaseTask):
status='running',
celery_task_id=str(project_request_id),
source_project_update=project_update))
inv_update_task = local_inv_update._get_task_class()
try:
task_instance = inv_update_task()
task_instance = inv_update_class()
# Runs in the same Celery task as project update
task_instance.request.id = project_request_id
task_instance.run(local_inv_update.id)
except Exception as e:
# A failed file update does not block other actions
logger.error('Encountered error updating project dependent inventory: {}'.format(e))
# Stop all dependent inventory updates if project update was canceled
project_update.refresh_from_db()
if project_update.cancel_flag:
break
# Don't update inventory scm_revision if update was canceled
local_inv_update.refresh_from_db()
if local_inv_update.cancel_flag:
continue
inv_src.scm_last_revision = scm_revision
inv_src.save(update_fields=['scm_last_revision'])
@@ -1433,7 +1442,6 @@ class RunProjectUpdate(BaseTask):
if instance.launch_type == 'sync':
self.release_lock(instance)
p = instance.project
dependent_inventory_sources = p.scm_inventory_sources.all()
if instance.job_type == 'check' and status not in ('failed', 'canceled',):
fd = open(self.revision_path, 'r')
lines = fd.readlines()
@@ -1442,11 +1450,11 @@ class RunProjectUpdate(BaseTask):
else:
logger.info("Could not find scm revision in check")
p.playbook_files = p.playbooks
if len(dependent_inventory_sources) > 0:
p.inventory_files = p.inventories
p.inventory_files = p.inventories
p.save()
# Update any inventories that depend on this project
dependent_inventory_sources = p.scm_inventory_sources.filter(update_on_project_update=True)
if len(dependent_inventory_sources) > 0:
if status == 'successful' and instance.launch_type != 'sync':
self._update_dependent_inventories(instance, dependent_inventory_sources)