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)