Repository: incubator-ariatosca
Updated Branches:
  refs/heads/ARIA-3-api-for-creating-workflows 137e80cb3 -> 21c99ee66


ARIA-5-Adapt-workflow-API-users-to-modified-API(review fixups)


Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/21c99ee6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/21c99ee6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/21c99ee6

Branch: refs/heads/ARIA-3-api-for-creating-workflows
Commit: 21c99ee6644207d2e4a1beb9b2e1957cd488f414
Parents: 137e80c
Author: mxmrlv <mxm...@gmail.com>
Authored: Wed Oct 26 17:16:05 2016 +0300
Committer: mxmrlv <mxm...@gmail.com>
Committed: Wed Oct 26 17:16:05 2016 +0300

----------------------------------------------------------------------
 aria/workflows/api/task_graph.py                | 20 +++----
 aria/workflows/builtin/heal.py                  | 16 +++---
 aria/workflows/builtin/workflows.py             | 60 ++++++++++++--------
 tests/workflows/builtin/__init__.py             | 20 +++----
 .../workflows/builtin/test_execute_operation.py |  6 +-
 tests/workflows/builtin/test_heal.py            | 46 +++++++++------
 tests/workflows/builtin/test_install.py         | 13 +++--
 tests/workflows/builtin/test_uninstall.py       | 13 +++--
 8 files changed, 109 insertions(+), 85 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/21c99ee6/aria/workflows/api/task_graph.py
----------------------------------------------------------------------
diff --git a/aria/workflows/api/task_graph.py b/aria/workflows/api/task_graph.py
index 9c138e0..f645580 100644
--- a/aria/workflows/api/task_graph.py
+++ b/aria/workflows/api/task_graph.py
@@ -44,6 +44,14 @@ class TaskGraph(object):
         return '{name}(id={self._id}, name={self.name}, 
graph={self._graph!r})'.format(
             name=self.__class__.__name__, self=self)
 
+    @property
+    def id(self):
+        """
+        Represents the id of the graph
+        :return: graph id
+        """
+        return self._id
+
     # graph traversal methods
 
     @property
@@ -55,14 +63,6 @@ class TaskGraph(object):
         for _, data in self._graph.nodes_iter(data=True):
             yield data['task']
 
-    @property
-    def id(self):
-        """
-        Represents the id of the graph
-        :return: graph id
-        """
-        return self._id
-
     def topological_order(self, reverse=False):
         """
         Returns topological sort on the graph
@@ -228,7 +228,7 @@ class TaskGraph(object):
         :return: The sequence object
         :rtype: _TasksSequence
         """
-        all_items = [item] + list(items)
+        all_items = [item] + [i for i in items if i]
         prev_item = None
 
         for an_item in all_items:
@@ -254,7 +254,7 @@ class TaskGraph(object):
         :return: The parallel object
         :rtype: _TasksParallel
         """
-        all_items = [item] + list(items)
+        all_items = [item] + [i for i in items if i]
 
         for an_item in all_items:
             if not isinstance(an_item, TaskGraph._TasksArrangement) and not 
self.has_task(an_item):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/21c99ee6/aria/workflows/builtin/heal.py
----------------------------------------------------------------------
diff --git a/aria/workflows/builtin/heal.py b/aria/workflows/builtin/heal.py
index b9c7f8e..78a8312 100644
--- a/aria/workflows/builtin/heal.py
+++ b/aria/workflows/builtin/heal.py
@@ -94,11 +94,12 @@ def heal_uninstall(context, graph, failing_node_instances, 
targeted_node_instanc
             graph.add_dependency(target_node_instance_subgraph, 
node_instance_sub_workflow)
 
             if target_node_instance in failing_node_instances:
-                dependency = graph.parallel(*relationship_tasks(
+                dependency = relationship_tasks(
+                    graph=graph,
                     node_instance=node_instance,
                     relationship_instance=relationship_instance,
                     context=context,
-                    
operation_name='aria.interfaces.relationship_lifecycle.unlink'))
+                    
operation_name='aria.interfaces.relationship_lifecycle.unlink')
 
                 graph.add_dependency(node_instance_sub_workflow, dependency)
 
@@ -137,15 +138,16 @@ def heal_install(context, graph, failing_node_instances, 
targeted_node_instances
 
         for relationship_instance in node_instance.relationship_instances:
             target_node_instance = 
context.model.node_instance.get(relationship_instance.target_id)
-            target_node_instance_subgraph = 
node_instance_sub_workflows[target_node_instance.id]
-            graph.add_dependency(node_instance_sub_workflow, 
target_node_instance_subgraph)
+            target_node_instance_subworkflow = 
node_instance_sub_workflows[target_node_instance.id]
+            graph.add_dependency(node_instance_sub_workflow, 
target_node_instance_subworkflow)
 
             if target_node_instance in failing_node_instances:
-                dependent = graph.parallel(*relationship_tasks(
+                dependent = relationship_tasks(
+                    graph=graph,
                     node_instance=node_instance,
                     relationship_instance=relationship_instance,
                     context=context,
-                    
operation_name='aria.interfaces.relationship_lifecycle.establish'))
+                    
operation_name='aria.interfaces.relationship_lifecycle.establish')
 
                 graph.add_dependency(dependent, node_instance_sub_workflow)
 
@@ -164,4 +166,4 @@ def _get_contained_subgraph(context, host_node_instance):
     for node_instance in contained_instances:
         result.extend(_get_contained_subgraph(context, node_instance))
 
-    return result
+    return set(result)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/21c99ee6/aria/workflows/builtin/workflows.py
----------------------------------------------------------------------
diff --git a/aria/workflows/builtin/workflows.py 
b/aria/workflows/builtin/workflows.py
index 5fc9ec8..3763f5c 100644
--- a/aria/workflows/builtin/workflows.py
+++ b/aria/workflows/builtin/workflows.py
@@ -57,21 +57,17 @@ def install_node_instance(context, graph, node_instance):
             'aria.interfaces.lifecycle.start'],
         node_instance=node_instance
     )
-    preconfigure_operations = preconfigure_relationship(context, node_instance)
-    postconfigure_operations = postconfigure_relationship(context, 
node_instance)
-    establish_operations = establish_relationship(context, node_instance)
 
-    install_sequence = [create_node_instance]
-    install_sequence.extend(preconfigure_operations)
-    install_sequence.append(configure_node_instance)
-    install_sequence.extend(postconfigure_operations)
-    install_sequence.append(start_node_instance)
-    install_sequence.extend(establish_operations)
+    graph.sequence(create_node_instance,
+                   preconfigure_relationship(graph, context, node_instance),
+                   configure_node_instance,
+                   postconfigure_relationship(graph, context, node_instance),
+                   start_node_instance,
+                   establish_relationship(graph, context, node_instance)
+                   )
 
-    graph.sequence(*install_sequence)
 
-
-def preconfigure_relationship(context, node_instance):
+def preconfigure_relationship(graph, context, node_instance):
     """
 
     :param context:
@@ -80,12 +76,13 @@ def preconfigure_relationship(context, node_instance):
     :return:
     """
     return relationships_tasks(
+        graph=graph,
         operation_name='aria.interfaces.relationship_lifecycle.preconfigure',
         context=context,
         node_instance=node_instance)
 
 
-def postconfigure_relationship(context, node_instance):
+def postconfigure_relationship(graph, context, node_instance):
     """
 
     :param context:
@@ -94,12 +91,13 @@ def postconfigure_relationship(context, node_instance):
     :return:
     """
     return relationships_tasks(
+        graph=graph,
         operation_name='aria.interfaces.relationship_lifecycle.postconfigure',
         context=context,
         node_instance=node_instance)
 
 
-def establish_relationship(context, node_instance):
+def establish_relationship(graph, context, node_instance):
     """
 
     :param context:
@@ -108,6 +106,7 @@ def establish_relationship(context, node_instance):
     :return:
     """
     return relationships_tasks(
+        graph=graph,
         operation_name='aria.interfaces.relationship_lifecycle.establish',
         context=context,
         node_instance=node_instance)
@@ -136,15 +135,15 @@ def uninstall_node_instance(graph, context, 
node_instance):
             'aria.interfaces.lifecycle.delete'],
         node_instance=node_instance
     )
-    unlink_operations = unlink_relationship(context, node_instance)
 
-    uninstall_sequence = [stop_node_instance]
-    uninstall_sequence.extend(unlink_operations)
-    uninstall_sequence.append(delete_node_instance)
+    graph.sequence(
+        stop_node_instance,
+        unlink_relationship(graph, context, node_instance),
+        delete_node_instance
+    )
 
-    graph.sequence(*uninstall_sequence)
 
-def unlink_relationship(context, node_instance):
+def unlink_relationship(graph, context, node_instance):
     """
 
     :param context:
@@ -153,6 +152,7 @@ def unlink_relationship(context, node_instance):
     :return:
     """
     return relationships_tasks(
+        graph=graph,
         operation_name='aria.interfaces.relationship_lifecycle.unlink',
         context=context,
         node_instance=node_instance
@@ -194,7 +194,10 @@ def execute_operation_on_instance(
     )
 
 
-def relationships_tasks(operation_name, context, node_instance):
+def relationships_tasks(graph,
+                        operation_name,
+                        context,
+                        node_instance):
     """
     Creates a relationship task (source and target) for all of a node_instance 
relationships.
     :param basestring operation_name: the relationship operation name.
@@ -210,16 +213,23 @@ def relationships_tasks(operation_name, context, 
node_instance):
     for index, (_, relationship_group) in enumerate(relationships_groups):
         for relationship_instance in relationship_group:
             relationship_operations = relationship_tasks(
+                graph=graph,
                 node_instance=node_instance,
                 relationship_instance=relationship_instance,
                 context=context,
                 operation_name=operation_name,
                 index=index)
-            sub_tasks.extend(relationship_operations)
-    return sub_tasks
+            sub_tasks.append(relationship_operations)
+
+    return graph.sequence(*sub_tasks) if sub_tasks else sub_tasks
 
 
-def relationship_tasks(node_instance, relationship_instance, context, 
operation_name, index=None):
+def relationship_tasks(graph,
+                       node_instance,
+                       relationship_instance,
+                       context,
+                       operation_name,
+                       index=None):
     """
     Creates a relationship task source and target.
     :param NodeInstance node_instance: the node instance of the relationship
@@ -246,4 +256,4 @@ def relationship_tasks(node_instance, 
relationship_instance, context, operation_
         
node_instance=context.model.node_instance.get(relationship_instance.target_id),
         operation_details=relationship_instance.relationship.target_operations[
             operation_name])
-    return source_operation, target_operation
+    return graph.parallel(source_operation, target_operation)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/21c99ee6/tests/workflows/builtin/__init__.py
----------------------------------------------------------------------
diff --git a/tests/workflows/builtin/__init__.py 
b/tests/workflows/builtin/__init__.py
index d73d6ee..7ea045e 100644
--- a/tests/workflows/builtin/__init__.py
+++ b/tests/workflows/builtin/__init__.py
@@ -140,18 +140,18 @@ def simple_context():
     return wf_context
 
 
-def assert_node_install_operations(operations, with_operations=False):
-    if with_operations:
+def assert_node_install_operations(operations, with_relationships=False):
+    if with_relationships:
         all_operations = [
             'aria.interfaces.lifecycle.create',
-            'aria.interfaces.relationship_lifecycle.preconfigure.0.source',
-            'aria.interfaces.relationship_lifecycle.preconfigure.0.target',
+            'aria.interfaces.relationship_lifecycle.preconfigure',
+            'aria.interfaces.relationship_lifecycle.preconfigure',
             'aria.interfaces.lifecycle.configure',
-            'aria.interfaces.relationship_lifecycle.postconfigure.0.source',
-            'aria.interfaces.relationship_lifecycle.postconfigure.0.target',
+            'aria.interfaces.relationship_lifecycle.postconfigure',
+            'aria.interfaces.relationship_lifecycle.postconfigure',
             'aria.interfaces.lifecycle.start',
-            'aria.interfaces.relationship_lifecycle.establish.0.source',
-            'aria.interfaces.relationship_lifecycle.establish.0.target',
+            'aria.interfaces.relationship_lifecycle.establish',
+            'aria.interfaces.relationship_lifecycle.establish',
         ]
 
         for i, operation in enumerate(operations):
@@ -165,8 +165,8 @@ def assert_node_uninstall_operations(operations, 
with_relationships=False):
     if with_relationships:
         all_operations = [
             'aria.interfaces.lifecycle.stop',
-            'aria.interfaces.relationship_lifecycle.unlink.0.source',
-            'aria.interfaces.relationship_lifecycle.unlink.0.target',
+            'aria.interfaces.relationship_lifecycle.unlink',
+            'aria.interfaces.relationship_lifecycle.unlink',
             'aria.interfaces.lifecycle.delete',
         ]
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/21c99ee6/tests/workflows/builtin/test_execute_operation.py
----------------------------------------------------------------------
diff --git a/tests/workflows/builtin/test_execute_operation.py 
b/tests/workflows/builtin/test_execute_operation.py
index 457a569..8593e80 100644
--- a/tests/workflows/builtin/test_execute_operation.py
+++ b/tests/workflows/builtin/test_execute_operation.py
@@ -28,7 +28,7 @@ def context():
 def test_execute_operation(context):
     operation_name = NODE_OPERATIONS_INSTALL[0]
     node_instance_id = 'dependency_node_instance'
-    execute_operations = list(execute_operation(
+    execute_tasks = list(execute_operation(
         context=context,
         operation=operation_name,
         operation_kwargs={},
@@ -39,7 +39,7 @@ def test_execute_operation(context):
         node_instance_ids=[node_instance_id]
     ).topological_order())
 
-    assert len(execute_operations) == 1
-    assert execute_operations[0].name == '{0}.{1}'.format(node_instance_id, 
operation_name)
+    assert len(execute_tasks) == 1
+    assert execute_tasks[0].name == '{0}.{1}'.format(node_instance_id, 
operation_name)
 
 # TODO: add more scenarios

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/21c99ee6/tests/workflows/builtin/test_heal.py
----------------------------------------------------------------------
diff --git a/tests/workflows/builtin/test_heal.py 
b/tests/workflows/builtin/test_heal.py
index 8cea941..be003c7 100644
--- a/tests/workflows/builtin/test_heal.py
+++ b/tests/workflows/builtin/test_heal.py
@@ -29,52 +29,62 @@ def context():
 
 def test_heal_dependent_node(context):
     heal_graph = heal(context=context, 
node_instance_id='dependent_node_instance')
+
+    assert len(list(heal_graph.tasks)) == 2
     uninstall_subgraph, install_subgraph = 
list(heal_graph.topological_order(reverse=True))
+
+    assert len(list(uninstall_subgraph.tasks)) == 2
     dependent_node_subgraph_uninstall, dependency_node_subgraph_uninstall = \
         list(uninstall_subgraph.topological_order(reverse=True))
+
+    assert len(list(install_subgraph.tasks)) == 2
     dependency_node_subgraph_install, dependent_node_subgraph_install = \
         list(install_subgraph.topological_order(reverse=True))
 
-    dependent_node_uninstall_operations = \
+    dependent_node_uninstall_tasks = \
         list(dependent_node_subgraph_uninstall.topological_order(reverse=True))
-    dependency_node_uninstall_operations = \
+    dependency_node_uninstall_tasks = \
         
list(dependency_node_subgraph_uninstall.topological_order(reverse=True))
-    dependent_node_install_operations = \
+    dependent_node_install_tasks = \
         list(dependent_node_subgraph_install.topological_order(reverse=True))
-    dependency_node_install_operations = \
+    dependency_node_install_tasks = \
         list(dependency_node_subgraph_install.topological_order(reverse=True))
 
-    assert_node_uninstall_operations(dependent_node_uninstall_operations, 
with_relationships=True)
-    assert len(dependency_node_uninstall_operations) == 0
+    assert_node_uninstall_operations(dependent_node_uninstall_tasks, 
with_relationships=True)
+    assert len(dependency_node_uninstall_tasks) == 0
 
-    assert len(dependency_node_install_operations) == 0
-    assert_node_install_operations(dependent_node_install_operations, 
with_operations=True)
+    assert len(dependency_node_install_tasks) == 0
+    assert_node_install_operations(dependent_node_install_tasks, 
with_relationships=True)
 
 
 def test_heal_dependency_node(context):
     heal_graph = heal(context=context, 
node_instance_id='dependency_node_instance')
+    # both subgraphs should contain un\install for both the dependent and the 
dependency
+    assert len(list(heal_graph.tasks)) == 2
     uninstall_subgraph, install_subgraph = 
list(heal_graph.topological_order(reverse=True))
 
-    uninstall_operations = 
list(uninstall_subgraph.topological_order(reverse=True))
-    unlink_source, unlink_target = uninstall_operations[:2]
-    dependent_node_subgraph_uninstall, dependency_node_subgraph_uninstall = 
uninstall_operations[2:]
+    uninstall_tasks = list(uninstall_subgraph.topological_order(reverse=True))
+    assert len(uninstall_tasks) == 4
+    unlink_source, unlink_target = uninstall_tasks[:2]
+    dependent_node_subgraph_uninstall, dependency_node_subgraph_uninstall = 
uninstall_tasks[2:]
 
-    install_operations = list(install_subgraph.topological_order(reverse=True))
-    dependency_node_subgraph_install, dependent_node_subgraph_install = 
install_operations[:2]
-    establish_source, establish_target = install_operations[2:]
+    install_tasks = list(install_subgraph.topological_order(reverse=True))
+    assert len(install_tasks) == 4
+    dependency_node_subgraph_install, dependent_node_subgraph_install = 
install_tasks[:2]
+    establish_source, establish_target = install_tasks[2:]
 
     assert len(list(dependent_node_subgraph_uninstall.tasks)) == 0
-    dependency_node_uninstall_operations = \
+    dependency_node_uninstall_tasks = \
         
list(dependency_node_subgraph_uninstall.topological_order(reverse=True))
     assert len(list(dependent_node_subgraph_install.tasks)) == 0
-    dependency_node_install_operations = \
+    dependency_node_install_tasks = \
         list(dependency_node_subgraph_install.topological_order(reverse=True))
 
     assert 
unlink_source.name.startswith('aria.interfaces.relationship_lifecycle.unlink')
     assert 
unlink_target.name.startswith('aria.interfaces.relationship_lifecycle.unlink')
-    assert_node_uninstall_operations(dependency_node_uninstall_operations)
+    assert_node_uninstall_operations(dependency_node_uninstall_tasks)
 
-    assert_node_install_operations(dependency_node_install_operations)
+    assert_node_install_operations(dependency_node_install_tasks)
     assert 
establish_source.name.startswith('aria.interfaces.relationship_lifecycle.establish')
     assert 
establish_target.name.startswith('aria.interfaces.relationship_lifecycle.establish')
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/21c99ee6/tests/workflows/builtin/test_install.py
----------------------------------------------------------------------
diff --git a/tests/workflows/builtin/test_install.py 
b/tests/workflows/builtin/test_install.py
index 4cbc1dc..16cd1b8 100644
--- a/tests/workflows/builtin/test_install.py
+++ b/tests/workflows/builtin/test_install.py
@@ -26,11 +26,12 @@ def context():
 
 
 def test_install(context):
-    install_operations = 
install(context=context).topological_order(reverse=True)
+    install_tasks = 
list(install(context=context).topological_order(reverse=True))
 
-    dependency_node_subgraph, dependent_node_subgraph = 
list(install_operations)
-    dependent_node_operations = 
list(dependent_node_subgraph.topological_order(reverse=True))
-    dependency_node_operations = 
list(dependency_node_subgraph.topological_order(reverse=True))
+    assert len(install_tasks) == 2
+    dependency_node_subgraph, dependent_node_subgraph = install_tasks
+    dependent_node_tasks = 
list(dependent_node_subgraph.topological_order(reverse=True))
+    dependency_node_tasks = 
list(dependency_node_subgraph.topological_order(reverse=True))
 
-    assert_node_install_operations(dependency_node_operations)
-    assert_node_install_operations(dependent_node_operations, 
with_operations=True)
+    assert_node_install_operations(dependency_node_tasks)
+    assert_node_install_operations(dependent_node_tasks, 
with_relationships=True)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/21c99ee6/tests/workflows/builtin/test_uninstall.py
----------------------------------------------------------------------
diff --git a/tests/workflows/builtin/test_uninstall.py 
b/tests/workflows/builtin/test_uninstall.py
index ed4666d..c983fe3 100644
--- a/tests/workflows/builtin/test_uninstall.py
+++ b/tests/workflows/builtin/test_uninstall.py
@@ -26,11 +26,12 @@ def context():
 
 
 def test_uninstall(context):
-    uninstall_operations = 
uninstall(context=context).topological_order(reverse=True)
+    uninstall_tasks = 
list(uninstall(context=context).topological_order(reverse=True))
 
-    dependent_node_subgraph, dependency_node_subgraph = 
list(uninstall_operations)
-    dependent_node_operations = 
list(dependent_node_subgraph.topological_order(reverse=True))
-    dependency_node_operations = 
list(dependency_node_subgraph.topological_order(reverse=True))
+    assert len(uninstall_tasks) == 2
+    dependent_node_subgraph, dependency_node_subgraph = uninstall_tasks
+    dependent_node_tasks = 
list(dependent_node_subgraph.topological_order(reverse=True))
+    dependency_node_tasks = 
list(dependency_node_subgraph.topological_order(reverse=True))
 
-    assert_node_uninstall_operations(operations=dependency_node_operations)
-    assert_node_uninstall_operations(operations=dependent_node_operations, 
with_relationships=True)
+    assert_node_uninstall_operations(operations=dependency_node_tasks)
+    assert_node_uninstall_operations(operations=dependent_node_tasks, 
with_relationships=True)

Reply via email to