shifted from dependants/dependencies to children/parents for clarity in function names, also added in toggle logic

This commit is contained in:
Rebeccah
2020-01-06 16:39:38 -05:00
parent 4c35adad6c
commit 780f104ab2
3 changed files with 19 additions and 20 deletions

View File

@@ -129,7 +129,7 @@ class WorkflowNodeBase(CreatedModifiedModel, LaunchTimeConfig):
class WorkflowJobTemplateNode(WorkflowNodeBase): class WorkflowJobTemplateNode(WorkflowNodeBase):
FIELDS_TO_PRESERVE_AT_COPY = [ FIELDS_TO_PRESERVE_AT_COPY = [
'unified_job_template', 'workflow_job_template', 'success_nodes', 'failure_nodes', 'unified_job_template', 'workflow_job_template', 'success_nodes', 'failure_nodes',
'always_nodes', 'parent_nodes', 'credentials', 'inventory', 'extra_data', 'survey_passwords', 'always_nodes', 'credentials', 'inventory', 'extra_data', 'survey_passwords',
'char_prompts' 'char_prompts'
] ]
REENCRYPTION_BLACKLIST_AT_COPY = ['extra_data', 'survey_passwords'] REENCRYPTION_BLACKLIST_AT_COPY = ['extra_data', 'survey_passwords']
@@ -208,6 +208,11 @@ class WorkflowJobNode(WorkflowNodeBase):
"semantics will mark this True if the node is in a path that will " "semantics will mark this True if the node is in a path that will "
"decidedly not be ran. A value of False means the node may not run."), "decidedly not be ran. A value of False means the node may not run."),
) )
all_parents_must_converge = models.BooleanField(
default=False,
help_text=_("If enabled then the node will only run if all of the parent nodes "
"have met the criteria to reach this node")
)
def get_absolute_url(self, request=None): def get_absolute_url(self, request=None):
return reverse('api:workflow_job_node_detail', kwargs={'pk': self.pk}, request=request) return reverse('api:workflow_job_node_detail', kwargs={'pk': self.pk}, request=request)

View File

@@ -140,36 +140,36 @@ class SimpleDAG(object):
def find_ord(self, obj): def find_ord(self, obj):
return self.node_obj_to_node_index.get(obj, None) return self.node_obj_to_node_index.get(obj, None)
def _get_dependencies_by_label(self, node_index, label): def _get_children_by_label(self, node_index, label):
return [self.nodes[index] for index in return [self.nodes[index] for index in
self.node_from_edges_by_label.get(label, {}) self.node_from_edges_by_label.get(label, {})
.get(node_index, [])] .get(node_index, [])]
def get_dependencies(self, obj, label=None): def get_children(self, obj, label=None):
this_ord = self.find_ord(obj) this_ord = self.find_ord(obj)
nodes = [] nodes = []
if label: if label:
return self._get_dependencies_by_label(this_ord, label) return self._get_children_by_label(this_ord, label)
else: else:
nodes = [] nodes = []
for l in self.node_from_edges_by_label.keys(): for l in self.node_from_edges_by_label.keys():
nodes.extend(self._get_dependencies_by_label(this_ord, l)) nodes.extend(self._get_children_by_label(this_ord, l))
return nodes return nodes
def _get_dependents_by_label(self, node_index, label): def _get_parents_by_label(self, node_index, label):
return [self.nodes[index] for index in return [self.nodes[index] for index in
self.node_to_edges_by_label.get(label, {}) self.node_to_edges_by_label.get(label, {})
.get(node_index, [])] .get(node_index, [])]
def get_dependents(self, obj, label=None): def get_parents(self, obj, label=None):
this_ord = self.find_ord(obj) this_ord = self.find_ord(obj)
nodes = [] nodes = []
if label: if label:
return self._get_dependents_by_label(this_ord, label) return self._get_parents_by_label(this_ord, label)
else: else:
nodes = [] nodes = []
for l in self.node_to_edges_by_label.keys(): for l in self.node_to_edges_by_label.keys():
nodes.extend(self._get_dependents_by_label(this_ord, l)) nodes.extend(self._get_parents_by_label(this_ord, l))
return nodes return nodes
def get_root_nodes(self): def get_root_nodes(self):
@@ -188,7 +188,7 @@ class SimpleDAG(object):
while stack: while stack:
node_obj = stack.pop() node_obj = stack.pop()
children = [node['node_object'] for node in self.get_dependencies(node_obj)] children = [node['node_object'] for node in self.get_children(node_obj)]
children_to_add = list(filter(lambda node_obj: node_obj not in node_objs_visited, children)) children_to_add = list(filter(lambda node_obj: node_obj not in node_objs_visited, children))
if children_to_add: if children_to_add:
@@ -212,7 +212,7 @@ class SimpleDAG(object):
if obj.id in obj_ids_processed: if obj.id in obj_ids_processed:
return return
for child in self.get_dependencies(obj): for child in self.get_children(obj):
visit(child) visit(child)
obj_ids_processed.add(obj.id) obj_ids_processed.add(obj.id)
nodes_sorted.appendleft(node) nodes_sorted.appendleft(node)

View File

@@ -83,17 +83,11 @@ class WorkflowJobTemplateNode(HasCreate, base.Base):
def add_always_node(self, unified_job_template): def add_always_node(self, unified_job_template):
return self._add_node(self.related.always_nodes, unified_job_template) return self._add_node(self.related.always_nodes, unified_job_template)
def add_any_successes_node(self, unified_job_template): def add_failure_node(self, unified_job_template):
return self._add_node(self.related.success_nodes, unified_job_template)
def add_all_successes_node(self, unified_job_template):
return self._add_node(self.related.success_nodes, unified_job_template)
def add_any_failure_node(self, unified_job_template):
return self._add_node(self.related.failure_nodes, unified_job_template) return self._add_node(self.related.failure_nodes, unified_job_template)
def add_all_failures_node(self, unified_job_template): def add_success_node(self, unified_job_template):
return self._add_node(self.related.failure_nodes, unified_job_template) return self._add_node(self.related.success_nodes, unified_job_template)
def add_credential(self, credential): def add_credential(self, credential):
with suppress(exc.NoContent): with suppress(exc.NoContent):