From 184db58fa3783666a57f17919e3b02f0cd212f8c Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Mon, 30 Jul 2018 16:11:44 -0400 Subject: [PATCH] set workflow status to failed if we find a node w/ a missing UJT see: https://github.com/ansible/tower/issues/2576 --- awx/main/scheduler/dag_workflow.py | 1 + awx/main/tests/functional/models/test_workflow.py | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/awx/main/scheduler/dag_workflow.py b/awx/main/scheduler/dag_workflow.py index aa1f8bd957..3f7657f571 100644 --- a/awx/main/scheduler/dag_workflow.py +++ b/awx/main/scheduler/dag_workflow.py @@ -69,6 +69,7 @@ class WorkflowDAG(SimpleDAG): job = obj.job if obj.unified_job_template is None: + is_failed = True continue elif not job: return False, False diff --git a/awx/main/tests/functional/models/test_workflow.py b/awx/main/tests/functional/models/test_workflow.py index 61882f2097..0514fc8bda 100644 --- a/awx/main/tests/functional/models/test_workflow.py +++ b/awx/main/tests/functional/models/test_workflow.py @@ -61,6 +61,15 @@ class TestWorkflowDAGFunctional(TransactionTestCase): self.assertTrue(is_done) self.assertFalse(has_failed) + # verify that relaunched WFJ fails if a JT leaf is deleted + for jt in JobTemplate.objects.all(): + jt.delete() + relaunched = wfj.create_relaunch_workflow_job() + dag = WorkflowDAG(workflow_job=relaunched) + is_done, has_failed = dag.is_workflow_done() + self.assertTrue(is_done) + self.assertTrue(has_failed) + def test_workflow_fails_for_unfinished_node(self): wfj = self.workflow_job(states=['error', None, None, None, None]) dag = WorkflowDAG(workflow_job=wfj)