summaryrefslogtreecommitdiffstats
path: root/azure/aria/aria-extension-cloudify/src/aria/aria/orchestrator/workflows/builtin/workflows.py
diff options
context:
space:
mode:
Diffstat (limited to 'azure/aria/aria-extension-cloudify/src/aria/aria/orchestrator/workflows/builtin/workflows.py')
-rw-r--r--azure/aria/aria-extension-cloudify/src/aria/aria/orchestrator/workflows/builtin/workflows.py149
1 files changed, 149 insertions, 0 deletions
diff --git a/azure/aria/aria-extension-cloudify/src/aria/aria/orchestrator/workflows/builtin/workflows.py b/azure/aria/aria-extension-cloudify/src/aria/aria/orchestrator/workflows/builtin/workflows.py
new file mode 100644
index 0000000..b286e98
--- /dev/null
+++ b/azure/aria/aria-extension-cloudify/src/aria/aria/orchestrator/workflows/builtin/workflows.py
@@ -0,0 +1,149 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+TSOCA normative lifecycle workflows.
+"""
+
+from ... import workflow
+from ..api import task
+
+
+NORMATIVE_STANDARD_INTERFACE = 'Standard' # 'tosca.interfaces.node.lifecycle.Standard'
+NORMATIVE_CONFIGURE_INTERFACE = 'Configure' # 'tosca.interfaces.relationship.Configure'
+
+NORMATIVE_CREATE = 'create'
+NORMATIVE_CONFIGURE = 'configure'
+NORMATIVE_START = 'start'
+NORMATIVE_STOP = 'stop'
+NORMATIVE_DELETE = 'delete'
+
+NORMATIVE_PRE_CONFIGURE_SOURCE = 'pre_configure_source'
+NORMATIVE_PRE_CONFIGURE_TARGET = 'pre_configure_target'
+NORMATIVE_POST_CONFIGURE_SOURCE = 'post_configure_source'
+NORMATIVE_POST_CONFIGURE_TARGET = 'post_configure_target'
+
+NORMATIVE_ADD_SOURCE = 'add_source'
+NORMATIVE_ADD_TARGET = 'add_target'
+NORMATIVE_REMOVE_TARGET = 'remove_target'
+NORMATIVE_REMOVE_SOURCE = 'remove_source'
+NORMATIVE_TARGET_CHANGED = 'target_changed'
+
+
+__all__ = (
+ 'NORMATIVE_STANDARD_INTERFACE',
+ 'NORMATIVE_CONFIGURE_INTERFACE',
+ 'NORMATIVE_CREATE',
+ 'NORMATIVE_START',
+ 'NORMATIVE_STOP',
+ 'NORMATIVE_DELETE',
+ 'NORMATIVE_CONFIGURE',
+ 'NORMATIVE_PRE_CONFIGURE_SOURCE',
+ 'NORMATIVE_PRE_CONFIGURE_TARGET',
+ 'NORMATIVE_POST_CONFIGURE_SOURCE',
+ 'NORMATIVE_POST_CONFIGURE_TARGET',
+ 'NORMATIVE_ADD_SOURCE',
+ 'NORMATIVE_ADD_TARGET',
+ 'NORMATIVE_REMOVE_SOURCE',
+ 'NORMATIVE_REMOVE_TARGET',
+ 'NORMATIVE_TARGET_CHANGED',
+ 'install_node',
+ 'uninstall_node',
+ 'start_node',
+ 'stop_node',
+)
+
+
+@workflow(suffix_template='{node.name}')
+def install_node(graph, node, **kwargs):
+ # Create
+ sequence = [task.create_task(node, NORMATIVE_STANDARD_INTERFACE, NORMATIVE_CREATE)]
+
+ # Configure
+ sequence += task.create_relationships_tasks(node,
+ NORMATIVE_CONFIGURE_INTERFACE,
+ NORMATIVE_PRE_CONFIGURE_SOURCE,
+ NORMATIVE_PRE_CONFIGURE_TARGET)
+ sequence.append(task.create_task(node, NORMATIVE_STANDARD_INTERFACE, NORMATIVE_CONFIGURE))
+ sequence += task.create_relationships_tasks(node,
+ NORMATIVE_CONFIGURE_INTERFACE,
+ NORMATIVE_POST_CONFIGURE_SOURCE,
+ NORMATIVE_POST_CONFIGURE_TARGET)
+ # Start
+ sequence += _create_start_tasks(node)
+
+ graph.sequence(*sequence)
+
+
+@workflow(suffix_template='{node.name}')
+def uninstall_node(graph, node, **kwargs):
+ # Stop
+ sequence = _create_stop_tasks(node)
+
+ # Delete
+ sequence.append(task.create_task(node, NORMATIVE_STANDARD_INTERFACE, NORMATIVE_DELETE))
+
+ graph.sequence(*sequence)
+
+
+@workflow(suffix_template='{node.name}')
+def start_node(graph, node, **kwargs):
+ graph.sequence(*_create_start_tasks(node))
+
+
+@workflow(suffix_template='{node.name}')
+def stop_node(graph, node, **kwargs):
+ graph.sequence(*_create_stop_tasks(node))
+
+
+def _create_start_tasks(node):
+ sequence = [task.create_task(node, NORMATIVE_STANDARD_INTERFACE, NORMATIVE_START)]
+ sequence += task.create_relationships_tasks(node,
+ NORMATIVE_CONFIGURE_INTERFACE,
+ NORMATIVE_ADD_SOURCE, NORMATIVE_ADD_TARGET)
+ return sequence
+
+
+def _create_stop_tasks(node):
+ sequence = [task.create_task(node, NORMATIVE_STANDARD_INTERFACE, NORMATIVE_STOP)]
+ sequence += task.create_relationships_tasks(node,
+ NORMATIVE_CONFIGURE_INTERFACE,
+ NORMATIVE_REMOVE_SOURCE, NORMATIVE_REMOVE_TARGET)
+ return sequence
+
+
+def create_node_task_dependencies(graph, tasks_and_nodes, reverse=False):
+ """
+ Creates dependencies between tasks if there is a relationship (outbound) between their nodes.
+ """
+
+ def get_task(node_name):
+ for api_task, task_node in tasks_and_nodes:
+ if task_node.name == node_name:
+ return api_task
+ return None
+
+ for api_task, node in tasks_and_nodes:
+ dependencies = []
+ for relationship in node.outbound_relationships:
+ dependency = get_task(relationship.target_node.name)
+ if dependency:
+ dependencies.append(dependency)
+ if dependencies:
+ if reverse:
+ for dependency in dependencies:
+ graph.add_dependency(dependency, api_task)
+ else:
+ graph.add_dependency(api_task, dependencies)