You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ariatosca.apache.org by mx...@apache.org on 2017/05/03 11:26:15 UTC
incubator-ariatosca git commit: review0.5 [Forced Update!]
Repository: incubator-ariatosca
Updated Branches:
refs/heads/ARIA-163-Update-node-state-for-stub-tasks 26ded901c -> 46dbed7be (forced update)
review0.5
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/46dbed7b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/46dbed7b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/46dbed7b
Branch: refs/heads/ARIA-163-Update-node-state-for-stub-tasks
Commit: 46dbed7be6689b06ae9651e3c68517ca76a1d827
Parents: 94cb2a1
Author: max-orlov <ma...@gigaspaces.com>
Authored: Wed May 3 14:24:54 2017 +0300
Committer: max-orlov <ma...@gigaspaces.com>
Committed: Wed May 3 14:26:10 2017 +0300
----------------------------------------------------------------------
aria/orchestrator/workflows/api/task.py | 51 +++++---------------
aria/orchestrator/workflows/builtin/heal.py | 4 +-
aria/orchestrator/workflows/builtin/install.py | 6 +--
.../orchestrator/workflows/builtin/uninstall.py | 6 +--
.../orchestrator/workflows/builtin/workflows.py | 25 ++++++++++
.../workflows/core/events_handler.py | 5 --
aria/orchestrator/workflows/core/task.py | 16 ++----
aria/orchestrator/workflows/executor/base.py | 12 +++++
aria/orchestrator/workflows/executor/dry.py | 11 -----
.../profiles/tosca-simple-1.0/interfaces.yaml | 13 +++--
10 files changed, 70 insertions(+), 79 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/46dbed7b/aria/orchestrator/workflows/api/task.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/api/task.py b/aria/orchestrator/workflows/api/task.py
index 8fce8c1..cb1618c 100644
--- a/aria/orchestrator/workflows/api/task.py
+++ b/aria/orchestrator/workflows/api/task.py
@@ -104,15 +104,15 @@ class OperationTask(BaseTask):
def __repr__(self):
return self.name
- def __new__(cls, actor, interface_name, operation_name, *args, **kwargs):
- """
- Returns a new operation task if the operation exists in the node, otherwise returns None.
- """
- try:
- cls.is_empty(actor, interface_name, operation_name)
- return super(OperationTask, cls).__new__(cls)
- except exceptions.OperationNotFoundException:
- return None
+ # def __new__(cls, actor, interface_name, operation_name, *args, **kwargs):
+ # """
+ # Returns a new operation task if the operation exists in the node, otherwise returns None.
+ # """
+ # try:
+ # cls.is_empty(actor, interface_name, operation_name)
+ # return super(OperationTask, cls).__new__(cls)
+ # except exceptions.OperationNotFoundException:
+ # return None
@staticmethod
def is_empty(actor, interface_name, operation_name):
@@ -170,7 +170,7 @@ def create_relationships_tasks(
"""
sub_tasks = []
for relationship in node.outbound_relationships:
- relationship_operations = relationship_tasks(
+ relationship_operations = create_relationship_tasks(
relationship,
interface_name,
source_operation_name=source_operation_name,
@@ -180,8 +180,8 @@ def create_relationships_tasks(
return sub_tasks
-def relationship_tasks(relationship, interface_name, source_operation_name=None,
- target_operation_name=None, **kwargs):
+def create_relationship_tasks(relationship, interface_name, source_operation_name=None,
+ target_operation_name=None, **kwargs):
"""
Creates a relationship task source and target.
:param Relationship relationship: the relationship instance itself
@@ -210,29 +210,4 @@ def relationship_tasks(relationship, interface_name, source_operation_name=None,
)
)
- return [op for op in operations if op]
-
-
-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 task, node in tasks_and_nodes:
- if node.name == node_name:
- return task
- return None
-
- for 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, task)
- else:
- graph.add_dependency(task, dependencies)
+ return operations
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/46dbed7b/aria/orchestrator/workflows/builtin/heal.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/builtin/heal.py b/aria/orchestrator/workflows/builtin/heal.py
index 8c76f6c..ca382e8 100644
--- a/aria/orchestrator/workflows/builtin/heal.py
+++ b/aria/orchestrator/workflows/builtin/heal.py
@@ -103,7 +103,7 @@ def heal_uninstall(ctx, graph, failing_nodes, targeted_nodes):
graph.add_dependency(target_node_subgraph, node_sub_workflow)
if target_node in failing_nodes:
- dependency = task.relationship_tasks(
+ dependency = task.create_relationship_tasks(
relationship=relationship,
operation_name='aria.interfaces.relationship_lifecycle.unlink')
graph.add_tasks(*dependency)
@@ -157,7 +157,7 @@ def heal_install(ctx, graph, failing_nodes, targeted_nodes):
graph.add_dependency(node_sub_workflow, target_node_subworkflow)
if target_node in failing_nodes:
- dependent = task.relationship_tasks(
+ dependent = task.create_relationship_tasks(
relationship=relationship,
operation_name='aria.interfaces.relationship_lifecycle.establish')
graph.add_tasks(*dependent)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/46dbed7b/aria/orchestrator/workflows/builtin/install.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/builtin/install.py b/aria/orchestrator/workflows/builtin/install.py
index c4ab16e..821b190 100644
--- a/aria/orchestrator/workflows/builtin/install.py
+++ b/aria/orchestrator/workflows/builtin/install.py
@@ -17,15 +17,15 @@
Builtin install workflow
"""
-from .workflows import install_node
from ... import workflow
from ..api import task as api_task
+from . import workflows
@workflow
def install(ctx, graph):
tasks_and_nodes = []
for node in ctx.nodes:
- tasks_and_nodes.append((api_task.WorkflowTask(install_node, node=node), node))
+ tasks_and_nodes.append((api_task.WorkflowTask(workflows.install_node, node=node), node))
graph.add_tasks([task for task, _ in tasks_and_nodes])
- api_task.create_node_task_dependencies(graph, tasks_and_nodes)
+ workflows.create_node_task_dependencies(graph, tasks_and_nodes)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/46dbed7b/aria/orchestrator/workflows/builtin/uninstall.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/builtin/uninstall.py b/aria/orchestrator/workflows/builtin/uninstall.py
index 920dabf..c35117e 100644
--- a/aria/orchestrator/workflows/builtin/uninstall.py
+++ b/aria/orchestrator/workflows/builtin/uninstall.py
@@ -17,15 +17,15 @@
Builtin uninstall workflow
"""
-from .workflows import uninstall_node
from ... import workflow
from ..api import task as api_task
+from . import workflows
@workflow
def uninstall(ctx, graph):
tasks_and_nodes = []
for node in ctx.nodes:
- tasks_and_nodes.append((api_task.WorkflowTask(uninstall_node, node=node), node))
+ tasks_and_nodes.append((api_task.WorkflowTask(workflows.uninstall_node, node=node), node))
graph.add_tasks([task for task, _ in tasks_and_nodes])
- api_task.create_node_task_dependencies(graph, tasks_and_nodes, reverse=True)
+ workflows.create_node_task_dependencies(graph, tasks_and_nodes, reverse=True)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/46dbed7b/aria/orchestrator/workflows/builtin/workflows.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/builtin/workflows.py b/aria/orchestrator/workflows/builtin/workflows.py
index 3b3c1ec..c2db20b 100644
--- a/aria/orchestrator/workflows/builtin/workflows.py
+++ b/aria/orchestrator/workflows/builtin/workflows.py
@@ -122,3 +122,28 @@ def _create_stop_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 task, node in tasks_and_nodes:
+ if node.name == node_name:
+ return task
+ return None
+
+ for 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, task)
+ else:
+ graph.add_dependency(task, dependencies)
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/46dbed7b/aria/orchestrator/workflows/core/events_handler.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/core/events_handler.py b/aria/orchestrator/workflows/core/events_handler.py
index 83b79d5..48356ec 100644
--- a/aria/orchestrator/workflows/core/events_handler.py
+++ b/aria/orchestrator/workflows/core/events_handler.py
@@ -41,11 +41,6 @@ def _task_started(task, *args, **kwargs):
task.started_at = datetime.utcnow()
task.status = task.STARTED
-@events.start_task_signal.connect
-def _node_task_started(task, *args, **kwargs):
- with task._update():
- _update_node_state_if_necessary(task, is_transitional=True)
-
@events.on_failure_task_signal.connect
def _task_failed(task, exception, *args, **kwargs):
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/46dbed7b/aria/orchestrator/workflows/core/task.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/core/task.py b/aria/orchestrator/workflows/core/task.py
index 181e47b..05e3365 100644
--- a/aria/orchestrator/workflows/core/task.py
+++ b/aria/orchestrator/workflows/core/task.py
@@ -28,7 +28,7 @@ from functools import (
from ....modeling import models
from ...context import operation as operation_context
from .. import exceptions
-from ..executor import dry
+from ..executor import base
def _locked(func=None):
@@ -70,11 +70,9 @@ class StubTask(BaseTask):
or sub-workflow
"""
def __init__(self, *args, **kwargs):
- super(StubTask, self).__init__(executor=dry.MarkerExecutor(), *args, **kwargs)
+ super(StubTask, self).__init__(executor=base.StubExecutor(), *args, **kwargs)
self.status = models.Task.PENDING
self.due_at = datetime.utcnow()
- self.started_at = None
- self.ended_at = None
def has_ended(self):
return self.status in (models.Task.SUCCESS, models.Task.FAILED)
@@ -83,11 +81,9 @@ class StubTask(BaseTask):
return self.status in (models.Task.PENDING, models.Task.RETRYING)
def end(self):
- self.ended_at = datetime.utcnow()
self.status = models.Task.SUCCESS
def start(self):
- self.started_at = datetime.utcnow()
self.status = models.Task.STARTED
@@ -127,7 +123,7 @@ class OperationTask(BaseTask):
# If no executor is provided, we defer that this is a stub task which does not need to be
# executed.
super(OperationTask, self).__init__(
- id=api_task.id, executor=executor or dry.StubExecutor(), *args, **kwargs)
+ id=api_task.id, executor=executor or base.EmptyOperationExecutor(), *args, **kwargs)
self._workflow_context = api_task._workflow_context
self.interface_name = api_task.interface_name
@@ -146,12 +142,6 @@ class OperationTask(BaseTask):
raise RuntimeError('No operation context could be created for {actor.model_cls}'
.format(actor=api_task.actor))
- # TODO: this executor should be put into the task (if no executor was setup in the
- # operation)
- # executor = '{module}.{name}'.format(module=self._executor.__module__,
- # name=self._executor.__class__.__name__
- # )
-
task_model = create_task_model(
name=api_task.name,
actor=api_task.actor,
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/46dbed7b/aria/orchestrator/workflows/executor/base.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/executor/base.py b/aria/orchestrator/workflows/executor/base.py
index f11a6b7..f5109d7 100644
--- a/aria/orchestrator/workflows/executor/base.py
+++ b/aria/orchestrator/workflows/executor/base.py
@@ -54,3 +54,15 @@ class BaseExecutor(logger.LoggerMixin):
@staticmethod
def _task_succeeded(task):
events.on_success_task_signal.send(task)
+
+
+class StubExecutor(BaseExecutor):
+ def execute(self, task):
+ task.start()
+ task.end()
+
+
+class EmptyOperationExecutor(BaseExecutor):
+ def execute(self, task):
+ events.start_task_signal.send(task)
+ events.on_success_task_signal.send(task)
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/46dbed7b/aria/orchestrator/workflows/executor/dry.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/executor/dry.py b/aria/orchestrator/workflows/executor/dry.py
index 55d8f98..d98d79b 100644
--- a/aria/orchestrator/workflows/executor/dry.py
+++ b/aria/orchestrator/workflows/executor/dry.py
@@ -23,17 +23,6 @@ from .base import BaseExecutor
# TODO: the name of this module should definitely change
-class MarkerExecutor(BaseExecutor):
- def execute(self, task):
- task.start()
- task.end()
-
-
-class StubExecutor(BaseExecutor):
- def execute(self, task):
- events.start_task_signal.send(task)
- events.on_success_task_signal.send(task)
-
class DryExecutor(BaseExecutor):
"""
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/46dbed7b/extensions/aria_extension_tosca/profiles/tosca-simple-1.0/interfaces.yaml
----------------------------------------------------------------------
diff --git a/extensions/aria_extension_tosca/profiles/tosca-simple-1.0/interfaces.yaml b/extensions/aria_extension_tosca/profiles/tosca-simple-1.0/interfaces.yaml
index ff6ba6c..a3021f9 100644
--- a/extensions/aria_extension_tosca/profiles/tosca-simple-1.0/interfaces.yaml
+++ b/extensions/aria_extension_tosca/profiles/tosca-simple-1.0/interfaces.yaml
@@ -82,14 +82,14 @@ interface_types:
relationship_edge: target
add_target:
description: >-
- Operation to notify the source node of a target node being added via a relationship.
+ Operation to notify the target node of a target node being added via a relationship.
_extensions:
- relationship_edge: source
+ relationship_edge: target
add_source:
description: >-
- Operation to notify the target node of a source node which is now available via a relationship.
+ Operation to notify the source node of a source node which is now available via a relationship.
_extensions:
- relationship_edge: target
+ relationship_edge: source
target_changed:
description: >-
Operation to notify source some property or attribute of the target changed
@@ -99,4 +99,9 @@ interface_types:
description: >-
Operation to remove a target node.
_extensions:
+ relationship_edge: target
+ remove_source:
+ description: >-
+ Operation to remove a source node.
+ _extensions:
relationship_edge: source