diff --git a/awx/main/scheduler/dag_workflow.py b/awx/main/scheduler/dag_workflow.py index c891b2ec32..6d2b349365 100644 --- a/awx/main/scheduler/dag_workflow.py +++ b/awx/main/scheduler/dag_workflow.py @@ -42,7 +42,9 @@ class WorkflowDAG(SimpleDAG): nodes.extend(children_all) elif job.status in ['successful']: children_success = self.get_dependencies(obj, 'success_nodes') - nodes.extend(children_success) + children_always = self.get_dependencies(obj, 'always_nodes') + children_all = children_success + children_always + nodes.extend(children_all) return [n['node_object'] for n in nodes_found] def is_workflow_done(self): @@ -67,6 +69,8 @@ class WorkflowDAG(SimpleDAG): nodes.extend(children_all) elif job.status in ['successful']: children_success = self.get_dependencies(obj, 'success_nodes') - nodes.extend(children_success) + children_always = self.get_dependencies(obj, 'always_nodes') + children_all = children_success + children_always + nodes.extend(children_all) return True diff --git a/awx/main/tests/unit/scheduler/test_dag.py b/awx/main/tests/unit/scheduler/test_dag.py index 84fb2d37f2..ab1e45c3d8 100644 --- a/awx/main/tests/unit/scheduler/test_dag.py +++ b/awx/main/tests/unit/scheduler/test_dag.py @@ -154,7 +154,25 @@ def workflow_dag_finished(factory_node): expected = [] return (dag, expected, True) -@pytest.fixture(params=['workflow_dag_multiple_roots', 'workflow_dag_level_2', 'workflow_dag_multiple_edges_labeled', 'workflow_dag_finished']) +@pytest.fixture +def workflow_dag_always(factory_node): + dag = WorkflowDAG() + data = [ + factory_node(0, 'failed'), + factory_node(1, 'successful'), + factory_node(2, None), + ] + [dag.add_node(d) for d in data] + + dag.add_edge(data[0], data[1], 'always_nodes') + dag.add_edge(data[1], data[2], 'always_nodes') + + expected = data[2:3] + return (dag, expected, False) + +@pytest.fixture(params=['workflow_dag_multiple_roots', 'workflow_dag_level_2', + 'workflow_dag_multiple_edges_labeled', 'workflow_dag_finished', + 'workflow_dag_always']) def workflow_dag(request): return request.getfuncargvalue(request.param)