You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ariatosca.apache.org by em...@apache.org on 2017/03/07 01:36:06 UTC
[1/2] incubator-ariatosca git commit: Document backreferences (and
fix for many-to-many)
Repository: incubator-ariatosca
Updated Branches:
refs/heads/ARIA-105-integrate-modeling 24ad8ba1e -> dd99f0fbc
Document backreferences (and fix for many-to-many)
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/5ceb14cd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/5ceb14cd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/5ceb14cd
Branch: refs/heads/ARIA-105-integrate-modeling
Commit: 5ceb14cd43a04703aee0c78b79018217bdf25494
Parents: 24ad8ba
Author: Tal Liron <ta...@gmail.com>
Authored: Sun Mar 5 13:45:11 2017 -0600
Committer: Tal Liron <ta...@gmail.com>
Committed: Sun Mar 5 13:45:11 2017 -0600
----------------------------------------------------------------------
aria/modeling/bases.py | 2 +-
aria/modeling/orchestration.py | 3 +-
aria/modeling/service.py | 102 +++++++++++++++++++++++++++++----
aria/modeling/service_template.py | 76 ++++++++++++++++++++++++
4 files changed, 169 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/5ceb14cd/aria/modeling/bases.py
----------------------------------------------------------------------
diff --git a/aria/modeling/bases.py b/aria/modeling/bases.py
index 7fe218d..a4db320 100644
--- a/aria/modeling/bases.py
+++ b/aria/modeling/bases.py
@@ -199,7 +199,7 @@ class ModelMixin(object):
helper_table = '{0}_{1}'.format(this_table, other_table)
if backreference is None:
- backreference = this_table
+ backreference = formatting.pluralize(this_table)
if table_prefix:
helper_table = '{0}_{1}'.format(table_prefix, helper_table)
backreference = '{0}_{1}'.format(table_prefix, backreference)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/5ceb14cd/aria/modeling/orchestration.py
----------------------------------------------------------------------
diff --git a/aria/modeling/orchestration.py b/aria/modeling/orchestration.py
index 30879e9..8428b69 100644
--- a/aria/modeling/orchestration.py
+++ b/aria/modeling/orchestration.py
@@ -174,7 +174,8 @@ class ServiceUpdateBase(ModelMixin):
@declared_attr
def service(cls):
- return cls.many_to_one_relationship('service')
+ return cls.many_to_one_relationship('service',
+ backreference='updates')
@declared_attr
def service_name(cls):
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/5ceb14cd/aria/modeling/service.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service.py b/aria/modeling/service.py
index 842d0fc..eb8acb5 100644
--- a/aria/modeling/service.py
+++ b/aria/modeling/service.py
@@ -69,6 +69,18 @@ class ServiceBase(InstanceModelMixin): # pylint: disable=too-many-public-methods
:vartype created_at: :class:`datetime.datetime`
:ivar updated_at: Update timestamp
:vartype updated_at: :class:`datetime.datetime`
+
+ :ivar permalink: ??
+ :vartype permalink: basestring
+ :ivar scaling_groups: ??
+ :vartype scaling_groups: {}
+
+ :ivar modifications: Modifications of this service
+ :vartype modifications: [:class:`ServiceModification`]
+ :ivar updates: Updates of this service
+ :vartype updates: [:class:`ServiceUpdate`]
+ :ivar executions: Executions on this service
+ :vartype executions: [:class:`Execution`]
"""
__tablename__ = 'service'
@@ -304,6 +316,26 @@ class NodeBase(InstanceModelMixin):
:vartype plugins: {basestring: :class:`Plugin`}
:ivar host: Host node (can be self)
:vartype host: :class:`Node`
+
+ :ivar runtime_properties: TODO: should be replaced with attributes
+ :vartype runtime_properties: {}
+ :ivar scaling_groups: ??
+ :vartype scaling_groups: []
+ :ivar state: ??
+ :vartype state: basestring
+ :ivar version: ??
+ :vartype version: int
+
+ :ivar service: Containing service
+ :vartype service: :class:`Service`
+ :ivar groups: We are a member of these groups
+ :vartype groups: [:class:`Group`]
+ :ivar policies: Policies enacted on this node
+ :vartype policies: [:class:`Policy`]
+ :ivar substitution_mapping: Our contribution to service substitution
+ :vartype substitution_mapping: :class:`SubstitutionMapping`
+ :ivar tasks: Tasks on this node
+ :vartype tasks: [:class:`Task`]
"""
__tablename__ = 'node'
@@ -558,6 +590,11 @@ class GroupBase(InstanceModelMixin):
:vartype properties: {basestring: :class:`Parameter`}
:ivar interfaces: Bundles of operations
:vartype interfaces: {basestring: :class:`Interface`}
+
+ :ivar service: Containing service
+ :vartype service: :class:`Service`
+ :ivar policies: Policies enacted on this group
+ :vartype policies: [:class:`Policy`]
"""
__tablename__ = 'group'
@@ -654,6 +691,9 @@ class PolicyBase(InstanceModelMixin):
:vartype groups: [:class:`Group`]
:ivar properties: Associated parameters
:vartype properties: {basestring: :class:`Parameter`}
+
+ :ivar service: Containing service
+ :vartype service: :class:`Service`
"""
__tablename__ = 'policy'
@@ -746,6 +786,9 @@ class SubstitutionBase(InstanceModelMixin):
:vartype node_type: :class:`Type`
:ivar mappings: Requirement and capability mappings
:vartype mappings: {basestring: :class:`SubstitutionTemplate`}
+
+ :ivar service: Containing service
+ :vartype service: :class:`Service`
"""
__tablename__ = 'substitution'
@@ -814,6 +857,9 @@ class SubstitutionMappingBase(InstanceModelMixin):
:vartype capability: :class:`Capability`
:ivar requirement_template: Requirement template in the node template
:vartype requirement_template: :class:`RequirementTemplate`
+
+ :ivar substitution: Containing substitution
+ :vartype substitution: :class:`Substitution`
"""
__tablename__ = 'substitution_mapping'
@@ -891,18 +937,28 @@ class RelationshipBase(InstanceModelMixin):
:vartype name: basestring
:ivar relationship_template: Template from which this relationship was instantiated (optional)
:vartype relationship_template: :class:`RelationshipTemplate`
+ :ivar requirement_template: Template from which this relationship was instantiated (optional)
+ :vartype requirement_template: :class:`RequirementTemplate`
:ivar type: Relationship type
:vartype type: :class:`Type`
- :ivar source_node: Source node
- :vartype source_node: :class:`Node`
- :ivar target_node: Target node
- :vartype target_node: :class:`Node`
:ivar target_capability: Capability at the target node (optional)
:vartype target_capability: :class:`Capability`
:ivar properties: Associated parameters
:vartype properties: {basestring: :class:`Parameter`}
- :ivar interface_templates: Bundles of operations
- :vartype interface_templates: {basestring: :class:`InterfaceTemplate`}
+ :ivar interfaces: Bundles of operations
+ :vartype interfaces: {basestring: :class:`Interfaces`}
+
+ :ivar source_position: ??
+ :vartype source_position: int
+ :ivar target_position: ??
+ :vartype target_position: int
+
+ :ivar source_node: Source node
+ :vartype source_node: :class:`Node`
+ :ivar target_node: Target node
+ :vartype target_node: :class:`Node`
+ :ivar tasks: Tasks on this node
+ :vartype tasks: [:class:`Task`]
"""
__tablename__ = 'relationship'
@@ -912,6 +968,10 @@ class RelationshipBase(InstanceModelMixin):
return cls.many_to_one_relationship('relationship_template')
@declared_attr
+ def requirement_template(cls):
+ return cls.many_to_one_relationship('requirement_template')
+
+ @declared_attr
def type(cls):
return cls.many_to_one_relationship('type')
@@ -928,10 +988,6 @@ class RelationshipBase(InstanceModelMixin):
def interfaces(cls):
return cls.one_to_many_relationship('interface', dict_key='name')
- @declared_attr
- def requirement_template(cls):
- return cls.many_to_one_relationship('requirement_template')
-
# region orchestration
source_position = Column(Integer) # ???
@@ -944,7 +1000,7 @@ class RelationshipBase(InstanceModelMixin):
__private_fields__ = ['type_fk',
'source_node_fk',
'target_node_fk',
- 'capability_fk',
+ 'target_capability_fk',
'requirement_template_fk',
'relationship_template_fk']
@@ -965,7 +1021,7 @@ class RelationshipBase(InstanceModelMixin):
# Relationship one-to-one to Capability
@declared_attr
- def capability_fk(cls):
+ def target_capability_fk(cls):
return cls.foreign_key('capability', nullable=True)
# Relationship many-to-one to RequirementTemplate
@@ -1037,6 +1093,13 @@ class CapabilityBase(InstanceModelMixin):
:vartype occurrences: int
:ivar properties: Associated parameters
:vartype properties: {basestring: :class:`Parameter`}
+
+ :ivar node: Containing node
+ :vartype node: :class:`Node`
+ :ivar relationship: Available when we are the target of a relationship
+ :vartype relationship: :class:`Relationship`
+ :ivar substitution_mapping: Our contribution to service substitution
+ :vartype substitution_mapping: :class:`SubstitutionMapping`
"""
__tablename__ = 'capability'
@@ -1138,6 +1201,13 @@ class InterfaceBase(InstanceModelMixin):
:vartype inputs: {basestring: :class:`Parameter`}
:ivar operations: Operations
:vartype operations: {basestring: :class:`Operation`}
+
+ :ivar node: Containing node
+ :vartype node: :class:`Node`
+ :ivar group: Containing group
+ :vartype group: :class:`Group`
+ :ivar relationship: Containing relationship
+ :vartype relationship: :class:`Relationship`
"""
__tablename__ = 'interface'
@@ -1249,6 +1319,11 @@ class OperationBase(InstanceModelMixin):
:vartype max_retries: int
:ivar retry_interval: Interval between retries (in seconds)
:vartype retry_interval: int
+
+ :ivar interface: Containing interface
+ :vartype interface: :class:`Interface`
+ :ivar service: Containing service
+ :vartype service: :class:`Service`
"""
__tablename__ = 'operation'
@@ -1369,6 +1444,9 @@ class ArtifactBase(InstanceModelMixin):
:vartype repository_credential: {basestring: basestring}
:ivar properties: Associated parameters
:vartype properties: {basestring: :class:`Parameter`}
+
+ :ivar node: Containing node
+ :vartype node: :class:`Node`
"""
__tablename__ = 'artifact'
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/5ceb14cd/aria/modeling/service_template.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_template.py b/aria/modeling/service_template.py
index aec7aa0..ebbe904 100644
--- a/aria/modeling/service_template.py
+++ b/aria/modeling/service_template.py
@@ -88,6 +88,9 @@ class ServiceTemplateBase(TemplateModelMixin):
:vartype created_at: :class:`datetime.datetime`
:ivar updated_at: Update timestamp
:vartype updated_at: :class:`datetime.datetime`
+
+ :ivar services: Instantiated services
+ :vartype services: [:class:`Service`]
"""
__tablename__ = 'service_template'
@@ -406,6 +409,17 @@ class NodeTemplateBase(TemplateModelMixin):
:vartype target_node_template_constraints: [:class:`FunctionType`]
:ivar plugins: Plugins required to be installed on the node's host
:vartype plugins: {basestring: :class:`Plugin`}
+
+ :ivar service_template: Containing service template
+ :vartype service_template: :class:`ServiceTemplate`
+ :ivar group_templates: We are a member of these groups
+ :vartype group_templates: [:class:`GroupTemplate`]
+ :ivar policy_templates: Policy templates enacted on this node
+ :vartype policy_templates: [:class:`PolicyTemplate`]
+ :ivar substitution_template_mapping: Our contribution to service substitution
+ :vartype substitution_template_mapping: :class:`SubstitutionTemplateMapping`
+ :ivar nodes: Instantiated nodes
+ :vartype nodes: [:class:`Node`]
"""
__tablename__ = 'node_template'
@@ -552,6 +566,13 @@ class GroupTemplateBase(TemplateModelMixin):
:vartype properties: {basestring: :class:`Parameter`}
:ivar interface_templates: Bundles of operations
:vartype interface_templates: {basestring: :class:`InterfaceTemplate`}
+
+ :ivar service_template: Containing service template
+ :vartype service_template: :class:`ServiceTemplate`
+ :ivar policy_templates: Policy templates enacted on this group
+ :vartype policy_templates: [:class:`PolicyTemplate`]
+ :ivar groups: Instantiated groups
+ :vartype groups: [:class:`Group`]
"""
__tablename__ = 'group_template'
@@ -652,6 +673,11 @@ class PolicyTemplateBase(TemplateModelMixin):
:vartype group_templates: [:class:`GroupTemplate`]
:ivar properties: Associated parameters
:vartype properties: {basestring: :class:`Parameter`}
+
+ :ivar service_template: Containing service template
+ :vartype service_template: :class:`ServiceTemplate`
+ :ivar policies: Instantiated policies
+ :vartype policies: [:class:`Policy`]
"""
__tablename__ = 'policy_template'
@@ -744,6 +770,11 @@ class SubstitutionTemplateBase(TemplateModelMixin):
:vartype node_type: :class:`Type`
:ivar mappings: Requirement and capability mappings
:vartype mappings: {basestring: :class:`SubstitutionTemplateMapping`}
+
+ :ivar service_template: Containing service template
+ :vartype service_template: :class:`ServiceTemplate`
+ :ivar substitutions: Instantiated substitutions
+ :vartype substitutions: [:class:`Substitution`]
"""
__tablename__ = 'substitution_template'
@@ -807,6 +838,9 @@ class SubstitutionTemplateMappingBase(TemplateModelMixin):
:vartype capability_template: :class:`CapabilityTemplate`
:ivar requirement_template: Requirement template in the node template
:vartype requirement_template: :class:`RequirementTemplate`
+
+ :ivar substitution_template: Containing substitution template
+ :vartype substitution_template: :class:`SubstitutionTemplate`
"""
__tablename__ = 'substitution_template_mapping'
@@ -918,6 +952,13 @@ class RequirementTemplateBase(TemplateModelMixin):
:vartype target_node_template_constraints: [:class:`FunctionType`]
:ivar relationship_template: Template for relationships (optional)
:vartype relationship_template: :class:`RelationshipTemplate`
+
+ :ivar node_template: Containing node template
+ :vartype node_template: :class:`NodeTemplate`
+ :ivar substitution_template_mapping: Our contribution to service substitution
+ :vartype substitution_template_mapping: :class:`SubstitutionTemplateMapping`
+ :ivar substitution_mapping: Our contribution to service substitution
+ :vartype substitution_mapping: :class:`SubstitutionMapping`
"""
__tablename__ = 'requirement_template'
@@ -1094,6 +1135,11 @@ class RelationshipTemplateBase(TemplateModelMixin):
:vartype properties: {basestring: :class:`Parameter`}
:ivar interface_templates: Bundles of operations
:vartype interface_templates: {basestring: :class:`InterfaceTemplate`}
+
+ :ivar requirement_template: Containing requirement template
+ :vartype requirement_template: :class:`RequirementTemplate`
+ :ivar relationships: Instantiated relationships
+ :vartype relationships: [:class:`Relationship`]
"""
__tablename__ = 'relationship_template'
@@ -1176,12 +1222,21 @@ class CapabilityTemplateBase(TemplateModelMixin):
:vartype type: :class:`Type`
:ivar description: Human-readable description
:vartype description: basestring
+ :ivar valid_source_node_types: Reject requirements that are not from these node types (optional)
+ :vartype valid_source_node_types: [:class:`Type`]
:ivar min_occurrences: Minimum number of requirement matches required
:vartype min_occurrences: int
:ivar max_occurrences: Maximum number of requirement matches allowed
:vartype min_occurrences: int
:ivar properties: Associated parameters
:vartype properties: {basestring: :class:`Parameter`}
+
+ :ivar node_template: Containing node template
+ :vartype node_template: :class:`NodeTemplate`
+ :ivar substitution_template_mapping: Our contribution to service substitution
+ :vartype substitution_template_mapping: :class:`SubstitutionTemplateMapping`
+ :ivar capabilities: Instantiated capabilities
+ :vartype capabilities: [:class:`Capability`]
"""
__tablename__ = 'capability_template'
@@ -1305,6 +1360,15 @@ class InterfaceTemplateBase(TemplateModelMixin):
:vartype inputs: {basestring: :class:`Parameter`}
:ivar operation_templates: Operations
:vartype operation_templates: {basestring: :class:`OperationTemplate`}
+
+ :ivar node_template: Containing node template
+ :vartype node_template: :class:`NodeTemplate`
+ :ivar group_template: Containing group template
+ :vartype group_template: :class:`GroupTemplate`
+ :ivar relationship_template: Containing relationship template
+ :vartype relationship_template: :class:`RelationshipTemplate`
+ :ivar interfaces: Instantiated interfaces
+ :vartype interfaces: [:class:`Interface`]
"""
__tablename__ = 'interface_template'
@@ -1414,6 +1478,13 @@ class OperationTemplateBase(TemplateModelMixin):
:vartype max_retries: int
:ivar retry_interval: Interval between retries (in seconds)
:vartype retry_interval: int
+
+ :ivar interface_template: Containing interface template
+ :vartype interface_template: :class:`InterfaceTemplate`
+ :ivar service_template: Containing service template
+ :vartype service_template: :class:`ServiceTemplate`
+ :ivar operations: Instantiated operations
+ :vartype operations: [:class:`Operation`]
"""
__tablename__ = 'operation_template'
@@ -1532,6 +1603,11 @@ class ArtifactTemplateBase(TemplateModelMixin):
:vartype repository_credential: {basestring: basestring}
:ivar properties: Associated parameters
:vartype properties: {basestring: :class:`Parameter`}
+
+ :ivar node_template: Containing node template
+ :vartype node_template: :class:`NodeTemplate`
+ :ivar artifacts: Instantiated artifacts
+ :vartype artifacts: [:class:`Artifact`]
"""
__tablename__ = 'artifact_template'
[2/2] incubator-ariatosca git commit: Fixed many tests
Posted by em...@apache.org.
Fixed many tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/dd99f0fb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/dd99f0fb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/dd99f0fb
Branch: refs/heads/ARIA-105-integrate-modeling
Commit: dd99f0fbc15bb9550ccae15ffbe5cf4a419848f4
Parents: 5ceb14c
Author: Tal Liron <ta...@gmail.com>
Authored: Mon Mar 6 19:35:53 2017 -0600
Committer: Tal Liron <ta...@gmail.com>
Committed: Mon Mar 6 19:35:53 2017 -0600
----------------------------------------------------------------------
aria/modeling/misc.py | 2 +-
aria/modeling/orchestration.py | 9 +-
aria/orchestrator/context/operation.py | 4 +-
aria/orchestrator/workflows/api/task.py | 19 ++-
.../workflows/builtin/execute_operation.py | 31 +++--
aria/orchestrator/workflows/executor/celery.py | 2 +-
aria/orchestrator/workflows/executor/process.py | 2 +-
tests/mock/models.py | 23 ++--
tests/mock/operations.py | 46 +++----
tests/mock/topology.py | 6 +-
tests/orchestrator/context/__init__.py | 4 -
tests/orchestrator/context/test_operation.py | 115 ++++++++++------
.../context/test_resource_render.py | 2 +-
tests/orchestrator/context/test_serialize.py | 23 ++--
tests/orchestrator/context/test_toolbelt.py | 61 +++++----
tests/orchestrator/context/test_workflow.py | 10 +-
tests/orchestrator/workflows/api/test_task.py | 135 +++++++++++--------
.../workflows/builtin/test_execute_operation.py | 27 ++--
.../orchestrator/workflows/core/test_engine.py | 14 +-
tests/orchestrator/workflows/core/test_task.py | 76 ++++++-----
.../test_task_graph_into_exececution_graph.py | 27 ++--
.../workflows/executor/test_executor.py | 8 +-
.../executor/test_process_executor_extension.py | 25 ++--
.../test_process_executor_tracked_changes.py | 26 ++--
24 files changed, 418 insertions(+), 279 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/aria/modeling/misc.py
----------------------------------------------------------------------
diff --git a/aria/modeling/misc.py b/aria/modeling/misc.py
index b61a787..0bb5cda 100644
--- a/aria/modeling/misc.py
+++ b/aria/modeling/misc.py
@@ -79,7 +79,7 @@ class ParameterBase(TemplateModelMixin):
logging.getLogger('aria').warn('Could not pickle parameter of type "{0}": {1}'
.format(self.type_name, value))
self._value = pickle.dumps(str(value))
-
+
def instantiate(self, context, container):
from . import models
return models.Parameter(name=self.name,
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/aria/modeling/orchestration.py
----------------------------------------------------------------------
diff --git a/aria/modeling/orchestration.py b/aria/modeling/orchestration.py
index 8428b69..d9d9908 100644
--- a/aria/modeling/orchestration.py
+++ b/aria/modeling/orchestration.py
@@ -154,7 +154,8 @@ class ServiceUpdateBase(ModelMixin):
__tablename__ = 'service_update'
- _private_fields = ['execution_fk', 'service_fk']
+ _private_fields = ['execution_fk',
+ 'service_fk']
created_at = Column(DateTime, nullable=False, index=True)
service_plan = Column(Dict, nullable=False)
@@ -212,10 +213,10 @@ class ServiceUpdateStepBase(ModelMixin):
_action_types = namedtuple('ACTION_TYPES', 'ADD, REMOVE, MODIFY')
ACTION_TYPES = _action_types(ADD='add', REMOVE='remove', MODIFY='modify')
+
_entity_types = namedtuple(
'ENTITY_TYPES',
- 'NODE, RELATIONSHIP, PROPERTY, OPERATION, WORKFLOW, OUTPUT, DESCRIPTION, GROUP, '
- 'POLICY_TYPE, POLICY_TRIGGER, PLUGIN')
+ 'NODE, RELATIONSHIP, PROPERTY, OPERATION, WORKFLOW, OUTPUT, DESCRIPTION, GROUP, PLUGIN')
ENTITY_TYPES = _entity_types(
NODE='node',
RELATIONSHIP='relationship',
@@ -225,8 +226,6 @@ class ServiceUpdateStepBase(ModelMixin):
OUTPUT='output',
DESCRIPTION='description',
GROUP='group',
- POLICY_TYPE='policy_type',
- POLICY_TRIGGER='policy_trigger',
PLUGIN='plugin'
)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/aria/orchestrator/context/operation.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/context/operation.py b/aria/orchestrator/context/operation.py
index 41093c9..e1a041f 100644
--- a/aria/orchestrator/context/operation.py
+++ b/aria/orchestrator/context/operation.py
@@ -66,11 +66,11 @@ class BaseOperationContext(BaseContext):
"""
A work directory that is unique to the plugin and the deployment id
"""
- if not self.task.plugin_name:
+ if self.task.plugin is None:
return None
plugin_workdir = '{0}/plugins/{1}/{2}'.format(self._workdir,
self.service.id,
- self.task.plugin_name)
+ self.task.plugin.name)
file.makedirs(plugin_workdir)
return plugin_workdir
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/aria/orchestrator/workflows/api/task.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/api/task.py b/aria/orchestrator/workflows/api/task.py
index d90b2b1..f1812b1 100644
--- a/aria/orchestrator/workflows/api/task.py
+++ b/aria/orchestrator/workflows/api/task.py
@@ -20,6 +20,7 @@ Provides the tasks to be entered into the task graph
from ....modeling import models
from ....utils.collections import OrderedDict
from ....utils.uuid import generate_uuid
+from ....utils.formatting import full_type_name
from ... import context
from .. import exceptions
@@ -60,6 +61,8 @@ class OperationTask(BaseTask):
SOURCE_OPERATION = 'source'
TARGET_OPERATION = 'target'
+
+ NAME_FORMAT = '{type}:{id}->{interface}/{operation}'
def __init__(self,
name,
@@ -94,8 +97,8 @@ class OperationTask(BaseTask):
for k, v in inputs.iteritems():
if not isinstance(v, models.Parameter):
inputs[k] = models.Parameter(name=k,
- type_name='string',
- value=str(v) if v is not None else None)
+ type_name=full_type_name(v),
+ value=v)
self.name = name
self.actor = actor
@@ -130,7 +133,10 @@ class OperationTask(BaseTask):
return cls(
actor=node,
- name='{0}.{1}'.format(interface_name, operation_name),
+ name=cls.NAME_FORMAT.format(type='node',
+ id=node.id,
+ interface=interface_name,
+ operation=operation_name),
plugin=operation.plugin,
implementation=operation.implementation,
inputs=cls._merge_inputs(operation.inputs, inputs),
@@ -161,7 +167,10 @@ class OperationTask(BaseTask):
return cls(
actor=relationship,
- name='{0}.{1}'.format(interface_name, operation_name),
+ name=cls.NAME_FORMAT.format(type='relationship',
+ id=relationship.id,
+ interface=interface_name,
+ operation=operation_name),
plugin=operation.plugin,
implementation=operation.implementation,
inputs=cls._merge_inputs(operation.inputs, inputs),
@@ -186,7 +195,7 @@ class OperationTask(BaseTask):
class WorkflowTask(BaseTask):
"""
- Represents an workflow task in the task_graph
+ Represents a workflow task in the task graph
"""
def __init__(self, workflow_func, **kwargs):
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/aria/orchestrator/workflows/builtin/execute_operation.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/builtin/execute_operation.py b/aria/orchestrator/workflows/builtin/execute_operation.py
index 7b07fc2..e7c2085 100644
--- a/aria/orchestrator/workflows/builtin/execute_operation.py
+++ b/aria/orchestrator/workflows/builtin/execute_operation.py
@@ -25,7 +25,8 @@ from ... import workflow
def execute_operation(
ctx,
graph,
- operation,
+ interface_name,
+ operation_name,
operation_kwargs,
allow_kwargs_override,
run_by_dependency_order,
@@ -69,7 +70,8 @@ def execute_operation(
graph.add_tasks(
_create_node_instance_task(
node=node,
- operation=operation,
+ interface_name=interface_name,
+ operation_name=operation_name,
operation_kwargs=operation_kwargs,
allow_kwargs_override=allow_kwargs_override
)
@@ -87,25 +89,26 @@ def execute_operation(
def _filter_node_instances(context, node_template_ids=(), node_ids=(), type_names=()):
- def _is_node_by_id(node_id):
- return not node_template_ids or node_id in node_template_ids
+ def _is_node_template_by_id(node_template_id):
+ return not node_template_ids or node_template_id in node_template_ids
- def _is_node_instance_by_id(node_instance_id):
- return not node_ids or node_instance_id in node_ids
+ def _is_node_by_id(node_id):
+ return not node_ids or node_id in node_ids
- def _is_node_by_type(node_type_hierarchy):
- return not type_names or node_type_hierarchy in type_names
+ def _is_node_by_type(node_type):
+ return not node_type.name in type_names
for node in context.nodes:
- if all((_is_node_by_id(node.node_template.id),
- _is_node_instance_by_id(node.id),
- _is_node_by_type(node.node_template.type_hierarchy))):
+ if all((_is_node_template_by_id(node.node_template.id),
+ _is_node_by_id(node.id),
+ _is_node_by_type(node.node_template.type))):
yield node
def _create_node_instance_task(
node,
- operation,
+ interface_name,
+ operation_name,
operation_kwargs,
allow_kwargs_override):
"""
@@ -122,6 +125,6 @@ def _create_node_instance_task(
return OperationTask.for_node(
node=node,
- interface_name=None, # TODO
- operation_name=operation,
+ interface_name=interface_name,
+ operation_name=operation_name,
inputs=operation_kwargs)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/aria/orchestrator/workflows/executor/celery.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/executor/celery.py b/aria/orchestrator/workflows/executor/celery.py
index 8a096b5..baa0375 100644
--- a/aria/orchestrator/workflows/executor/celery.py
+++ b/aria/orchestrator/workflows/executor/celery.py
@@ -44,7 +44,7 @@ class CeleryExecutor(BaseExecutor):
def execute(self, task):
self._tasks[task.id] = task
- inputs = task.inputs.copy()
+ inputs = dict((k, v.value) for k, v in task.inputs.iteritems())
inputs['ctx'] = task.context
self._results[task.id] = self._app.send_task(
task.operation_mapping,
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/aria/orchestrator/workflows/executor/process.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/executor/process.py b/aria/orchestrator/workflows/executor/process.py
index a1f0bee..9be834d 100644
--- a/aria/orchestrator/workflows/executor/process.py
+++ b/aria/orchestrator/workflows/executor/process.py
@@ -191,7 +191,7 @@ class ProcessExecutor(base.BaseExecutor):
return {
'task_id': task.id,
'implementation': task.implementation,
- 'operation_inputs': task.inputs,
+ 'operation_inputs': dict((k, v.value) for k, v in task.inputs.iteritems()),
'port': self._server_port,
'context': task.context.serialization_dict,
}
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/mock/models.py
----------------------------------------------------------------------
diff --git a/tests/mock/models.py b/tests/mock/models.py
index 3ccd97e..78e9373 100644
--- a/tests/mock/models.py
+++ b/tests/mock/models.py
@@ -63,16 +63,17 @@ def create_service(service_template):
def create_dependency_node_template(service_template):
- the_type = service_template.node_types.get_descendant('test_node_type')
+ node_type = service_template.node_types.get_descendant('test_node_type')
+ capability_type = service_template.capability_types.get_descendant('test_capability_type')
capability_template = models.CapabilityTemplate(
name='capability',
- type=service_template.capability_types.get_descendant('test_capability_type')
+ type=capability_type
)
node_template = models.NodeTemplate(
name=DEPENDENCY_NODE_TEMPLATE_NAME,
- type=the_type,
+ type=node_type,
capability_templates=_dictify(capability_template),
default_instances=1,
min_instances=1,
@@ -89,7 +90,7 @@ def create_dependent_node_template(service_template, dependency_node_template):
operation_templates = dict((op, models.OperationTemplate(
name=op,
implementation='test'))
- for op in operations.NODE_OPERATIONS)
+ for _, op in operations.NODE_OPERATIONS)
interface_template = models.InterfaceTemplate(
type=service_template.interface_types.get_descendant('test_interface_type'),
operation_templates=operation_templates)
@@ -148,10 +149,9 @@ def create_relationship(source, target):
)
-def create_interface_template(service_template, operation_name, operation_kwargs=None,
- interface_kwargs=None):
+def create_interface_template(service_template, interface_name, operation_name,
+ operation_kwargs=None, interface_kwargs=None):
the_type = service_template.interface_types.get_descendant('test_interface_type')
- interface_name, operation_name = operation_name.rsplit('.', 1)
operation_template = models.OperationTemplate(
name=operation_name,
**(operation_kwargs or {})
@@ -164,10 +164,13 @@ def create_interface_template(service_template, operation_name, operation_kwargs
)
-def create_interface(service, operation_name, operation_kwargs=None, interface_kwargs=None):
+def create_interface(service, interface_name, operation_name, operation_kwargs=None,
+ interface_kwargs=None):
the_type = service.service_template.interface_types.get_descendant('test_interface_type')
- interface_name, operation_name = operation_name.rsplit('.', 1)
- operation = models.Operation(name=operation_name, **(operation_kwargs or {}))
+ operation = models.Operation(
+ name=operation_name,
+ **(operation_kwargs or {})
+ )
return models.Interface(
type=the_type,
operations=_dictify(operation),
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/mock/operations.py
----------------------------------------------------------------------
diff --git a/tests/mock/operations.py b/tests/mock/operations.py
index 5495f6a..c752a8e 100644
--- a/tests/mock/operations.py
+++ b/tests/mock/operations.py
@@ -14,46 +14,46 @@
# limitations under the License.
NODE_OPERATIONS_INSTALL = [
- 'tosca.interfaces.node.lifecycle.Standard.create',
- 'tosca.interfaces.node.lifecycle.Standard.configure',
- 'tosca.interfaces.node.lifecycle.Standard.start',
+ ('Standard', 'create'),
+ ('Standard', 'configure'),
+ ('Standard', 'start')
]
NODE_OPERATIONS_UNINSTALL = [
- 'tosca.interfaces.node.lifecycle.Standard.stop',
- 'tosca.interfaces.node.lifecycle.Standard.delete',
+ ('Standard', 'stop'),
+ ('Standard', 'delete')
]
NODE_OPERATIONS = NODE_OPERATIONS_INSTALL + NODE_OPERATIONS_UNINSTALL
RELATIONSHIP_OPERATIONS_INSTALL = [
- 'tosca.interfaces.relationship.Configure.pre_configure_source',
- 'tosca.interfaces.relationship.Configure.pre_configure_target',
- 'tosca.interfaces.relationship.Configure.add_source',
- 'tosca.interfaces.relationship.Configure.add_target',
+ ('Configure', 'pre_configure_source'),
+ ('Configure', 'pre_configure_target'),
+ ('Configure', 'add_source'),
+ ('Configure', 'add_target')
]
RELATIONSHIP_OPERATIONS_UNINSTALL = [
- 'tosca.interfaces.relationship.Configure.remove_target',
- 'tosca.interfaces.relationship.Configure.target_changed',
+ ('Configure', 'remove_target'),
+ ('Configure', 'target_changed')
]
RELATIONSHIP_OPERATIONS = RELATIONSHIP_OPERATIONS_INSTALL + RELATIONSHIP_OPERATIONS_UNINSTALL
OPERATIONS_INSTALL = [
- 'tosca.interfaces.node.lifecycle.Standard.create',
- 'tosca.interfaces.relationship.Configure.pre_configure_source',
- 'tosca.interfaces.relationship.Configure.pre_configure_target',
- 'tosca.interfaces.node.lifecycle.Standard.configure',
- 'tosca.interfaces.node.lifecycle.Standard.start',
- 'tosca.interfaces.relationship.Configure.add_source',
- 'tosca.interfaces.relationship.Configure.add_target',
- 'tosca.interfaces.relationship.Configure.target_changed',
+ ('Standard', 'create'),
+ ('Configure', 'pre_configure_source'),
+ ('Configure', 'pre_configure_target'),
+ ('Standard', 'configure'),
+ ('Standard', 'start'),
+ ('Configure', 'add_source'),
+ ('Configure', 'add_target'),
+ ('Configure', 'target_changed')
]
OPERATIONS_UNINSTALL = [
- 'tosca.interfaces.relationship.Configure.remove_target',
- 'tosca.interfaces.relationship.Configure.target_changed',
- 'tosca.interfaces.node.lifecycle.Standard.stop',
- 'tosca.interfaces.node.lifecycle.Standard.delete',
+ ('Configure', 'remove_target'),
+ ('Configure', 'target_changed'),
+ ('Standard', 'stop'),
+ ('Standard', 'delete')
]
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/mock/topology.py
----------------------------------------------------------------------
diff --git a/tests/mock/topology.py b/tests/mock/topology.py
index b702783..c7d8087 100644
--- a/tests/mock/topology.py
+++ b/tests/mock/topology.py
@@ -20,13 +20,12 @@ from . import models
def create_simple_topology_single_node(model_storage, create_operation):
service_template = models.create_service_template()
-
service = models.create_service(service_template)
node_template = models.create_dependency_node_template(service_template)
interface_template = models.create_interface_template(
service_template,
- 'Standard.create',
+ 'Standard', 'create',
operation_kwargs=dict(
implementation=create_operation,
inputs={'key': aria_models.Parameter(name='key', value='create', type_name='string'),
@@ -37,7 +36,7 @@ def create_simple_topology_single_node(model_storage, create_operation):
node = models.create_dependency_node(node_template, service)
interface = models.create_interface(
service,
- 'Standard.create',
+ 'Standard', 'create',
operation_kwargs=dict(
implementation=create_operation,
inputs={'key': aria_models.Parameter(name='key', value='create', type_name='string'),
@@ -51,7 +50,6 @@ def create_simple_topology_single_node(model_storage, create_operation):
def create_simple_topology_two_nodes(model_storage):
service_template = models.create_service_template()
-
service = models.create_service(service_template)
# Creating a simple service with node -> node as a graph
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/context/__init__.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/context/__init__.py b/tests/orchestrator/context/__init__.py
index ea0fea9..4fde0a7 100644
--- a/tests/orchestrator/context/__init__.py
+++ b/tests/orchestrator/context/__init__.py
@@ -23,10 +23,6 @@ def op_path(func, module_path=None):
return '{0}.{1}'.format(module_path, func.__name__)
-def op_name(actor, operation_name):
- return '{name}.{actor.id}'.format(name=operation_name, actor=actor)
-
-
def execute(workflow_func, workflow_context, executor):
graph = workflow_func(ctx=workflow_context)
eng = engine.Engine(executor=executor, workflow_context=workflow_context, tasks_graph=graph)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/context/test_operation.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/context/test_operation.py b/tests/orchestrator/context/test_operation.py
index b460b9f..ce3bd84 100644
--- a/tests/orchestrator/context/test_operation.py
+++ b/tests/orchestrator/context/test_operation.py
@@ -28,7 +28,6 @@ from aria.orchestrator.workflows.executor import thread
from tests import mock, storage
from . import (
op_path,
- op_name,
execute,
)
@@ -56,11 +55,13 @@ def executor():
def test_node_operation_task_execution(ctx, executor):
- operation_name = 'aria.interfaces.lifecycle.create'
+ interface_name = 'Standard'
+ operation_name = 'create'
node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
interface = mock.models.create_interface(
node.service,
+ interface_name,
operation_name,
operation_kwargs=dict(implementation=op_path(my_operation, module_path=__name__))
)
@@ -72,8 +73,8 @@ def test_node_operation_task_execution(ctx, executor):
def basic_workflow(graph, **_):
graph.add_tasks(
api.task.OperationTask.for_node(
- interface_name='aria.interfaces.lifecycle',
- operation_name='create',
+ interface_name=interface_name,
+ operation_name=operation_name,
node=node,
inputs=inputs
)
@@ -81,17 +82,27 @@ def test_node_operation_task_execution(ctx, executor):
execute(workflow_func=basic_workflow, workflow_context=ctx, executor=executor)
- operation_context = global_test_holder[op_name(node, operation_name)]
+ operation_context = global_test_holder[api.task.OperationTask.NAME_FORMAT.format(
+ type='node',
+ id=node.id,
+ interface=interface_name,
+ operation=operation_name
+ )]
assert isinstance(operation_context, context.operation.NodeOperationContext)
# Task bases assertions
assert operation_context.task.actor == node
- assert operation_context.task.name == op_name(node, operation_name)
- operations = interface.operations.filter_by(name=operation_name) # pylint: disable=no-member
- assert operations.count() == 1
- assert operation_context.task.implementation == operations[0].implementation
- assert operation_context.task.inputs == inputs
+ assert operation_context.task.name == api.task.OperationTask.NAME_FORMAT.format(
+ type='node',
+ id=node.id,
+ interface=interface_name,
+ operation=operation_name
+ )
+ operations = interface.operations
+ assert len(operations) == 1
+ assert operation_context.task.implementation == operations.values()[0].implementation
+ assert operation_context.task.inputs['putput'].value is True
# Context based attributes (sugaring)
assert operation_context.node_template == node.node_template
@@ -99,12 +110,14 @@ def test_node_operation_task_execution(ctx, executor):
def test_relationship_operation_task_execution(ctx, executor):
- operation_name = 'aria.interfaces.relationship_lifecycle.post_configure'
- relationship = ctx.model.relationship.list()[0]
+ interface_name = 'Configure'
+ operation_name = 'post_configure'
+ relationship = ctx.model.relationship.list()[0]
interface = mock.models.create_interface(
relationship.source_node.service,
- operation_name=operation_name,
+ interface_name,
+ operation_name,
operation_kwargs=dict(implementation=op_path(my_operation, module_path=__name__)),
)
@@ -117,30 +130,36 @@ def test_relationship_operation_task_execution(ctx, executor):
graph.add_tasks(
api.task.OperationTask.for_relationship(
relationship=relationship,
- interface_name='aria.interfaces.relationship_lifecycle',
- operation_name='post_configure',
+ interface_name=interface_name,
+ operation_name=operation_name,
inputs=inputs
)
)
execute(workflow_func=basic_workflow, workflow_context=ctx, executor=executor)
- operation_context = global_test_holder[op_name(relationship,
- operation_name)]
+ operation_context = global_test_holder[api.task.OperationTask.NAME_FORMAT.format(
+ type='relationship',
+ id=relationship.id,
+ interface=interface_name,
+ operation=operation_name
+ )]
assert isinstance(operation_context, context.operation.RelationshipOperationContext)
# Task bases assertions
assert operation_context.task.actor == relationship
- assert operation_context.task.name.startswith(operation_name)
- operation = interface.operations.filter_by(name=operation_name) # pylint: disable=no-member
- assert operation_context.task.implementation == operation.all()[0].implementation
- assert operation_context.task.inputs == inputs
+ assert interface_name in operation_context.task.name
+ operations = interface.operations
+ assert operation_context.task.implementation == operations.values()[0].implementation
+ assert operation_context.task.inputs['putput'].value is True
# Context based attributes (sugaring)
- dependency_node_template = ctx.model.node_template.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+ dependency_node_template = ctx.model.node_template.get_by_name(
+ mock.models.DEPENDENCY_NODE_TEMPLATE_NAME)
dependency_node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
- dependent_node_template = ctx.model.node_template.get_by_name(mock.models.DEPENDENT_NODE_NAME)
+ dependent_node_template = ctx.model.node_template.get_by_name(
+ mock.models.DEPENDENT_NODE_TEMPLATE_NAME)
dependent_node = ctx.model.node.get_by_name(mock.models.DEPENDENT_NODE_NAME)
assert operation_context.target_node_template == dependency_node_template
@@ -158,42 +177,59 @@ def test_invalid_task_operation_id(ctx, executor):
:param executor:
:return:
"""
- operation_name = 'aria.interfaces.lifecycle.create'
+ interface_name = 'Standard'
+ operation_name = 'create'
+
other_node, node = ctx.model.node.list()
assert other_node.id == 1
assert node.id == 2
interface = mock.models.create_interface(
+ node.service,
+ interface_name=interface_name,
operation_name=operation_name,
operation_kwargs=dict(implementation=op_path(get_node_id, module_path=__name__))
)
- node.interfaces = [interface]
+ node.interfaces[interface.name] = interface
ctx.model.node.update(node)
@workflow
def basic_workflow(graph, **_):
graph.add_tasks(
- api.task.OperationTask.for_node(name=operation_name, node=node)
+ api.task.OperationTask.for_node(node=node,
+ interface_name=interface_name,
+ operation_name=operation_name)
)
execute(workflow_func=basic_workflow, workflow_context=ctx, executor=executor)
- op_node_id = global_test_holder[op_name(node, operation_name)]
+ op_node_id = global_test_holder[api.task.OperationTask.NAME_FORMAT.format(
+ type='node',
+ id=node.id,
+ interface=interface_name,
+ operation=operation_name
+ )]
assert op_node_id == node.id
assert op_node_id != other_node.id
def test_plugin_workdir(ctx, executor, tmpdir):
- op = 'test.op'
- plugin_name = 'mock_plugin'
+ interface_name = 'Standard'
+ operation_name = 'create'
+
+ plugin = mock.models.create_plugin()
+ plugin.name = 'mock_plugin'
node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
- node.interfaces = [mock.models.create_interface(
- op,
+ interface = mock.models.create_interface(
+ node.service,
+ interface_name,
+ operation_name,
operation_kwargs=dict(
implementation='{0}.{1}'.format(__name__, _test_plugin_workdir.__name__),
- plugin=plugin_name)
- )]
- node.plugins = [{'name': plugin_name}]
+ plugin=plugin)
+ )
+ node.interfaces[interface.name] = interface
+ node.plugins = [plugin]
ctx.model.node.update(node)
filename = 'test_file'
@@ -202,12 +238,15 @@ def test_plugin_workdir(ctx, executor, tmpdir):
@workflow
def basic_workflow(graph, **_):
- graph.add_tasks(api.task.OperationTask.for_node(
- name=op, node=node, inputs=inputs))
+ graph.add_tasks(api.task.OperationTask.for_node(node=node,
+ interface_name=interface_name,
+ operation_name=operation_name,
+ inputs=inputs)
+ )
execute(workflow_func=basic_workflow, workflow_context=ctx, executor=executor)
- expected_file = tmpdir.join('workdir', 'plugins', str(ctx.service_instance.id),
- plugin_name,
+ expected_file = tmpdir.join('workdir', 'plugins', str(ctx.service.id),
+ plugin.name,
filename)
assert expected_file.read() == content
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/context/test_resource_render.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/context/test_resource_render.py b/tests/orchestrator/context/test_resource_render.py
index b924909..696e9b3 100644
--- a/tests/orchestrator/context/test_resource_render.py
+++ b/tests/orchestrator/context/test_resource_render.py
@@ -17,7 +17,7 @@ import pytest
from tests import mock, storage
-_IMPLICIT_CTX_TEMPLATE = '{{ctx.service_instance.name}}'
+_IMPLICIT_CTX_TEMPLATE = '{{ctx.service.name}}'
_IMPLICIT_CTX_TEMPLATE_PATH = 'implicit-ctx.template'
_VARIABLES_TEMPLATE = '{{variable}}'
_VARIABLES_TEMPLATE_PATH = 'variables.template'
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/context/test_serialize.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/context/test_serialize.py b/tests/orchestrator/context/test_serialize.py
index ed6d724..9e5a0b4 100644
--- a/tests/orchestrator/context/test_serialize.py
+++ b/tests/orchestrator/context/test_serialize.py
@@ -42,14 +42,17 @@ def test_serialize_operation_context(context, executor, tmpdir):
@workflow
def _mock_workflow(ctx, graph):
- node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
- plugin_name = 'mock_plugin'
- node.interfaces = [mock.models.get_interface(
- 'test.op',
- operation_kwargs=dict(implementation=_operation_mapping(), plugin=plugin_name)
- )]
- node.plugins = [{'name': plugin_name}]
- task = api.task.OperationTask.node(instance=node, name='test.op')
+ node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+ plugin = mock.models.create_plugin()
+ interface = mock.models.create_interface(
+ node.service,
+ 'test',
+ 'op',
+ operation_kwargs=dict(implementation=_operation_mapping(), plugin=plugin)
+ )
+ node.interfaces[interface.name] = interface
+ node.plugins = [plugin]
+ task = api.task.OperationTask.for_node(node=node, interface_name='test', operation_name='op')
graph.add_tasks(task)
return graph
@@ -61,12 +64,12 @@ def _mock_operation(ctx):
# a correct ctx.task.operation_mapping tells us we kept the correct task_id
assert ctx.task.implementation == _operation_mapping()
# a correct ctx.node.name tells us we kept the correct actor_id
- assert ctx.node.name == mock.models.DEPENDENCY_NODE_INSTANCE_NAME
+ assert ctx.node.name == mock.models.DEPENDENCY_NODE_NAME
# a correct ctx.name tells us we kept the correct name
assert ctx.name is not None
assert ctx.name == ctx.task.name
# a correct ctx.deployment.name tells us we kept the correct deployment_id
- assert ctx.service_instance.name == mock.models.SERVICE_NAME
+ assert ctx.service.name == mock.models.SERVICE_NAME
# Here we test that the resource storage was properly re-created
test_file_content = ctx.resource.blueprint.read(TEST_FILE_ENTRY_ID, TEST_FILE_NAME)
assert test_file_content == TEST_FILE_CONTENT
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/context/test_toolbelt.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/context/test_toolbelt.py b/tests/orchestrator/context/test_toolbelt.py
index 28bd3d3..f04fd4b 100644
--- a/tests/orchestrator/context/test_toolbelt.py
+++ b/tests/orchestrator/context/test_toolbelt.py
@@ -24,7 +24,6 @@ from aria.orchestrator.context.toolbelt import RelationshipToolBelt
from tests import mock, storage
from . import (
op_path,
- op_name,
execute,
)
@@ -49,22 +48,22 @@ def executor():
def _get_elements(workflow_context):
dependency_node_template = workflow_context.model.node_template.get_by_name(
- mock.models.DEPENDENCY_NODE_NAME)
+ mock.models.DEPENDENCY_NODE_TEMPLATE_NAME)
dependency_node_template.host = dependency_node_template
workflow_context.model.node.update(dependency_node_template)
dependency_node = workflow_context.model.node.get_by_name(
- mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+ mock.models.DEPENDENCY_NODE_NAME)
dependency_node.host_fk = dependency_node.id
workflow_context.model.node.update(dependency_node)
dependent_node_template = workflow_context.model.node_template.get_by_name(
- mock.models.DEPENDENT_NODE_NAME)
+ mock.models.DEPENDENT_NODE_TEMPLATE_NAME)
dependent_node_template.host = dependency_node_template
workflow_context.model.node_template.update(dependent_node_template)
dependent_node = workflow_context.model.node.get_by_name(
- mock.models.DEPENDENT_NODE_INSTANCE_NAME)
+ mock.models.DEPENDENT_NODE_NAME)
dependent_node.host = dependent_node
workflow_context.model.node.update(dependent_node)
@@ -74,21 +73,26 @@ def _get_elements(workflow_context):
def test_host_ip(workflow_context, executor):
- operation_name = 'aria.interfaces.lifecycle.create'
+ interface_name = 'Standard'
+ operation_name = 'create'
_, dependency_node, _, _, _ = _get_elements(workflow_context)
- dependency_node.interfaces = [mock.models.get_interface(
- operation_name,
+ interface = mock.models.create_interface(
+ dependency_node.service,
+ interface_name=interface_name,
+ operation_name=operation_name,
operation_kwargs=dict(implementation=op_path(host_ip, module_path=__name__))
- )]
+ )
+ dependency_node.interfaces[interface.name] = interface
workflow_context.model.node.update(dependency_node)
inputs = {'putput': True}
@workflow
def basic_workflow(graph, **_):
graph.add_tasks(
- api.task.OperationTask.node(
- instance=dependency_node,
- name=operation_name,
+ api.task.OperationTask.for_node(
+ node=dependency_node,
+ interface_name=interface_name,
+ operation_name=operation_name,
inputs=inputs
)
)
@@ -99,15 +103,16 @@ def test_host_ip(workflow_context, executor):
def test_relationship_tool_belt(workflow_context, executor):
- operation_name = 'aria.interfaces.relationship_lifecycle.post_configure'
+ interface_name = 'Configure'
+ operation_name = 'post_configure'
_, _, _, _, relationship = _get_elements(workflow_context)
- relationship.interfaces = [
- mock.models.get_interface(
- operation_name,
- operation_kwargs=dict(
- implementation=op_path(relationship_operation, module_path=__name__)),
- edge='source')
- ]
+ interface = mock.models.create_interface(
+ relationship.source_node.service,
+ interface_name=interface_name,
+ operation_name=operation_name,
+ operation_kwargs=dict(implementation=op_path(relationship_operation, module_path=__name__))
+ )
+ relationship.interfaces[interface.name] = interface
workflow_context.model.relationship.update(relationship)
inputs = {'putput': True}
@@ -115,18 +120,22 @@ def test_relationship_tool_belt(workflow_context, executor):
@workflow
def basic_workflow(graph, **_):
graph.add_tasks(
- api.task.OperationTask.relationship(
- instance=relationship,
- name=operation_name,
- edge='source',
+ api.task.OperationTask.for_relationship(
+ relationship=relationship,
+ interface_name=interface_name,
+ operation_name=operation_name,
inputs=inputs
)
)
execute(workflow_func=basic_workflow, workflow_context=workflow_context, executor=executor)
- assert isinstance(global_test_holder.get(op_name(relationship, operation_name)),
- RelationshipToolBelt)
+ assert isinstance(global_test_holder.get(api.task.OperationTask.NAME_FORMAT.format(
+ type='relationship',
+ id=relationship.id,
+ interface=interface_name,
+ operation=operation_name
+ )), RelationshipToolBelt)
def test_wrong_model_toolbelt():
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/context/test_workflow.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/context/test_workflow.py b/tests/orchestrator/context/test_workflow.py
index 049b787..fa1f387 100644
--- a/tests/orchestrator/context/test_workflow.py
+++ b/tests/orchestrator/context/test_workflow.py
@@ -29,7 +29,7 @@ class TestWorkflowContext(object):
def test_execution_creation_on_workflow_context_creation(self, storage):
ctx = self._create_ctx(storage)
execution = storage.execution.get(ctx.execution.id) # pylint: disable=no-member
- assert execution.service_instance == storage.service_instance.get_by_name(
+ assert execution.service == storage.service.get_by_name(
models.SERVICE_NAME)
assert execution.workflow_name == models.WORKFLOW_NAME
assert execution.service_template == storage.service_template.get_by_name(
@@ -53,7 +53,7 @@ class TestWorkflowContext(object):
name='simple_context',
model_storage=storage,
resource_storage=None,
- service_instance_id=storage.service_instance.get_by_name(models.SERVICE_NAME).id,
+ service_id=storage.service.get_by_name(models.SERVICE_NAME).id,
workflow_name=models.WORKFLOW_NAME,
task_max_attempts=models.TASK_MAX_ATTEMPTS,
task_retry_interval=models.TASK_RETRY_INTERVAL
@@ -64,8 +64,8 @@ class TestWorkflowContext(object):
def storage():
workflow_storage = application_model_storage(
sql_mapi.SQLAlchemyModelAPI, initiator=test_storage.init_inmemory_model_storage)
- workflow_storage.service_template.put(models.get_service_template())
- blueprint = workflow_storage.service_template.get_by_name(models.SERVICE_TEMPLATE_NAME)
- workflow_storage.service_instance.put(models.get_service(blueprint))
+ workflow_storage.service_template.put(models.create_service_template())
+ service_template = workflow_storage.service_template.get_by_name(models.SERVICE_TEMPLATE_NAME)
+ workflow_storage.service.put(models.create_service(service_template))
yield workflow_storage
test_storage.release_sqlite_storage(workflow_storage)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/workflows/api/test_task.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/api/test_task.py b/tests/orchestrator/workflows/api/test_task.py
index a9b6a7a..4f5671b 100644
--- a/tests/orchestrator/workflows/api/test_task.py
+++ b/tests/orchestrator/workflows/api/test_task.py
@@ -19,6 +19,7 @@ import pytest
from aria.orchestrator import context
from aria.orchestrator.workflows import api
from aria.modeling import models
+
from tests import mock, storage
@@ -30,7 +31,7 @@ def ctx(tmpdir):
:return:
"""
simple_context = mock.context.simple(str(tmpdir), inmemory=False)
- simple_context.model.execution.put(mock.models.get_execution(simple_context.service_instance))
+ simple_context.model.execution.put(mock.models.create_execution(simple_context.service))
yield simple_context
storage.release_sqlite_storage(simple_context.model)
@@ -38,18 +39,23 @@ def ctx(tmpdir):
class TestOperationTask(object):
def test_node_operation_task_creation(self, ctx):
- operation_name = 'aria.interfaces.lifecycle.create'
- interface = mock.models.get_interface(
+ interface_name = 'test_interface'
+ operation_name = 'create'
+
+ plugin = mock.models.create_plugin('package', '0.1')
+ plugin.name = 'test_plugin'
+
+ interface = mock.models.create_interface(
+ ctx.service,
+ interface_name,
operation_name,
- operation_kwargs=dict(plugin='plugin', implementation='op_path'))
-
- node = ctx.model.node.get_by_name(mock.models.DEPENDENT_NODE_INSTANCE_NAME)
- node.interfaces = [interface]
- node.plugins = [{'name': 'plugin',
- 'package_name': 'package',
- 'package_version': '0.1'}]
- ctx.model.node_template.update(node)
- inputs = {'name': True}
+ operation_kwargs=dict(plugin=plugin, implementation='op_path'))
+
+ node = ctx.model.node.get_by_name(mock.models.DEPENDENT_NODE_NAME)
+ node.interfaces = {interface.name: interface}
+ node.plugins = [plugin]
+ ctx.model.node.update(node)
+ inputs = {'test_input': True}
max_attempts = 10
retry_interval = 10
ignore_failure = True
@@ -57,113 +63,132 @@ class TestOperationTask(object):
with context.workflow.current.push(ctx):
api_task = api.task.OperationTask.for_node(
node=node,
- name=operation_name,
+ interface_name=interface_name,
+ operation_name=operation_name,
inputs=inputs,
max_attempts=max_attempts,
retry_interval=retry_interval,
ignore_failure=ignore_failure)
- assert api_task.name == '{0}.{1}'.format(operation_name, node.id)
+ assert api_task.name == api.task.OperationTask.NAME_FORMAT.format(
+ type='node',
+ id=node.id,
+ interface=interface_name,
+ operation=operation_name
+ )
assert api_task.implementation == 'op_path'
assert api_task.actor == node
- assert api_task.inputs == inputs
+ assert api_task.inputs['test_input'].value is True
assert api_task.retry_interval == retry_interval
assert api_task.max_attempts == max_attempts
assert api_task.ignore_failure == ignore_failure
- assert api_task.plugin == {'name': 'plugin',
- 'package_name': 'package',
- 'package_version': '0.1'}
+ assert api_task.plugin.name == 'test_plugin'
assert api_task.runs_on == models.Task.RUNS_ON_NODE
def test_source_relationship_operation_task_creation(self, ctx):
- operation_name = 'aria.interfaces.relationship_lifecycle.preconfigure'
+ interface_name = 'test_interface'
+ operation_name = 'preconfigure'
+
+ plugin = mock.models.create_plugin('package', '0.1')
+ plugin.name = 'test_plugin'
- interface = mock.models.get_interface(
+ interface = mock.models.create_interface(
+ ctx.service,
+ interface_name,
operation_name,
- operation_kwargs=dict(implementation='op_path', plugin='plugin'),
- edge='source'
+ operation_kwargs=dict(plugin=plugin, implementation='op_path')
)
relationship = ctx.model.relationship.list()[0]
- relationship.interfaces = [interface]
- relationship.source_node.plugins = [{'name': 'plugin',
- 'package_name': 'package',
- 'package_version': '0.1'}]
- inputs = {'name': True}
+ relationship.interfaces[interface.name] = interface
+ relationship.source_node.plugins = [plugin]
+ inputs = {'test_input': True}
max_attempts = 10
retry_interval = 10
with context.workflow.current.push(ctx):
api_task = api.task.OperationTask.for_relationship(
relationship=relationship,
- name=operation_name,
- edge='source',
+ interface_name=interface_name,
+ operation_name=operation_name,
inputs=inputs,
max_attempts=max_attempts,
retry_interval=retry_interval)
- assert api_task.name == '{0}.{1}'.format(operation_name, relationship.id)
+ assert api_task.name == api.task.OperationTask.NAME_FORMAT.format(
+ type='relationship',
+ id=relationship.id,
+ interface=interface_name,
+ operation=operation_name
+ )
assert api_task.implementation == 'op_path'
assert api_task.actor == relationship
- assert api_task.inputs == inputs
+ assert api_task.inputs['test_input'].value is True
assert api_task.retry_interval == retry_interval
assert api_task.max_attempts == max_attempts
- assert api_task.plugin == {'name': 'plugin',
- 'package_name': 'package',
- 'package_version': '0.1'}
+ assert api_task.plugin.name == 'test_plugin'
assert api_task.runs_on == models.Task.RUNS_ON_SOURCE
def test_target_relationship_operation_task_creation(self, ctx):
- operation_name = 'aria.interfaces.relationship_lifecycle.preconfigure'
- interface = mock.models.get_interface(
+ interface_name = 'test_interface'
+ operation_name = 'preconfigure'
+
+ plugin = mock.models.create_plugin('package', '0.1')
+ plugin.name = 'test_plugin'
+
+ interface = mock.models.create_interface(
+ ctx.service,
+ interface_name,
operation_name,
- operation_kwargs=dict(implementation='op_path', plugin='plugin'),
- edge='target'
+ operation_kwargs=dict(plugin=plugin, implementation='op_path')
)
relationship = ctx.model.relationship.list()[0]
- relationship.interfaces = [interface]
- relationship.target_node.plugins = [{'name': 'plugin',
- 'package_name': 'package',
- 'package_version': '0.1'}]
- inputs = {'name': True}
+ relationship.interfaces[interface.name] = interface
+ relationship.target_node.plugins = [plugin]
+ inputs = {'test_input': True}
max_attempts = 10
retry_interval = 10
with context.workflow.current.push(ctx):
api_task = api.task.OperationTask.for_relationship(
relationship=relationship,
- name=operation_name,
- edge='target',
+ interface_name=interface_name,
+ operation_name=operation_name,
inputs=inputs,
max_attempts=max_attempts,
- retry_interval=retry_interval)
+ retry_interval=retry_interval,
+ runs_on=models.Task.RUNS_ON_TARGET)
- assert api_task.name == '{0}.{1}'.format(operation_name, relationship.id)
+ assert api_task.name == api.task.OperationTask.NAME_FORMAT.format(
+ type='relationship',
+ id=relationship.id,
+ interface=interface_name,
+ operation=operation_name
+ )
assert api_task.implementation == 'op_path'
assert api_task.actor == relationship
- assert api_task.inputs == inputs
+ assert api_task.inputs['test_input'].value is True
assert api_task.retry_interval == retry_interval
assert api_task.max_attempts == max_attempts
- assert api_task.plugin == {'name': 'plugin',
- 'package_name': 'package',
- 'package_version': '0.1'}
+ assert api_task.plugin.name == 'test_plugin'
assert api_task.runs_on == models.Task.RUNS_ON_TARGET
def test_operation_task_default_values(self, ctx):
- dependency_node_instance = ctx.model.node.get_by_name(
- mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+ dependency_node = ctx.model.node.get_by_name(
+ mock.models.DEPENDENCY_NODE_NAME)
+
with context.workflow.current.push(ctx):
task = api.task.OperationTask(
name='stub',
implementation='',
- actor=dependency_node_instance)
+ actor=dependency_node)
assert task.inputs == {}
assert task.retry_interval == ctx._task_retry_interval
assert task.max_attempts == ctx._task_max_attempts
assert task.ignore_failure == ctx._task_ignore_failure
- assert task.plugin == {}
+ assert task.plugin is None
assert task.runs_on is None
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/workflows/builtin/test_execute_operation.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/builtin/test_execute_operation.py b/tests/orchestrator/workflows/builtin/test_execute_operation.py
index cc9a8a8..0e5a506 100644
--- a/tests/orchestrator/workflows/builtin/test_execute_operation.py
+++ b/tests/orchestrator/workflows/builtin/test_execute_operation.py
@@ -18,28 +18,33 @@ import pytest
from aria.orchestrator.workflows.api import task
from aria.orchestrator.workflows.builtin.execute_operation import execute_operation
-from tests import mock
-from tests import storage
+from tests import mock, storage
@pytest.fixture
def ctx(tmpdir):
- context = mock.context.simple(str(tmpdir))
+ context = mock.context.simple(str(tmpdir), inmemory=False)
yield context
storage.release_sqlite_storage(context.model)
def test_execute_operation(ctx):
- node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
- node.interfaces = [mock.models.get_interface(mock.operations.NODE_OPERATIONS_INSTALL[0])]
+ node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+ interface_name, operation_name = mock.operations.NODE_OPERATIONS_INSTALL[0]
+ interface = mock.models.create_interface(
+ ctx.service,
+ interface_name,
+ operation_name
+ )
+ node.interfaces[interface.name] = interface
ctx.model.node.update(node)
- operation_name = mock.operations.NODE_OPERATIONS_INSTALL[0]
execute_tasks = list(
task.WorkflowTask(
execute_operation,
ctx=ctx,
- operation=operation_name,
+ interface_name=interface_name,
+ operation_name=operation_name,
operation_kwargs={},
allow_kwargs_override=False,
run_by_dependency_order=False,
@@ -50,8 +55,12 @@ def test_execute_operation(ctx):
)
assert len(execute_tasks) == 1
- assert execute_tasks[0].name == '{0}.{1}'.format(operation_name, node.id)
-
+ assert execute_tasks[0].name == task.OperationTask.NAME_FORMAT.format(
+ type='node',
+ id=node.id,
+ interface=interface_name,
+ operation=operation_name
+ )
# TODO: add more scenarios
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/workflows/core/test_engine.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/core/test_engine.py b/tests/orchestrator/workflows/core/test_engine.py
index 8c5511a..6f97952 100644
--- a/tests/orchestrator/workflows/core/test_engine.py
+++ b/tests/orchestrator/workflows/core/test_engine.py
@@ -60,15 +60,19 @@ class BaseTest(object):
max_attempts=None,
retry_interval=None,
ignore_failure=None):
- node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
- node.interfaces = [mock.models.get_interface(
- 'aria.interfaces.lifecycle.create',
+ node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+ interface = mock.models.create_interface(
+ node.service,
+ 'aria.interfaces.lifecycle',
+ 'create',
operation_kwargs=dict(implementation='{name}.{func.__name__}'.format(name=__name__,
func=func))
- )]
+ )
+ node.interfaces[interface.name] = interface
return api.task.OperationTask.for_node(
node=node,
- name='aria.interfaces.lifecycle.create',
+ interface_name='aria.interfaces.lifecycle',
+ operation_name='create',
inputs=inputs,
max_attempts=max_attempts,
retry_interval=retry_interval,
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/workflows/core/test_task.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/core/test_task.py b/tests/orchestrator/workflows/core/test_task.py
index 26564c5..d03597d 100644
--- a/tests/orchestrator/workflows/core/test_task.py
+++ b/tests/orchestrator/workflows/core/test_task.py
@@ -19,6 +19,7 @@ from datetime import (
import pytest
+from aria.modeling import models
from aria.orchestrator.context import workflow as workflow_context
from aria.orchestrator.workflows import (
api,
@@ -28,8 +29,10 @@ from aria.orchestrator.workflows import (
from tests import mock, storage
-OP_NAME = 'tosca.interfaces.node.lifecycle.Standard.create'
-RELATIONSHIP_OP_NAME = 'tosca.interfaces.relationship.Configure.pre_configure'
+NODE_INTERFACE_NAME = 'Standard'
+NODE_OPERATION_NAME = 'create'
+RELATIONSHIP_INTERFACE_NAME = 'Configure'
+RELATIONSHIP_OPERATION_NAME = 'pre_configure'
@pytest.fixture
@@ -37,15 +40,22 @@ def ctx(tmpdir):
context = mock.context.simple(str(tmpdir))
relationship = context.model.relationship.list()[0]
- relationship.interfaces = [
- mock.models.get_interface(RELATIONSHIP_OP_NAME, edge='source'),
- mock.models.get_interface(RELATIONSHIP_OP_NAME, edge='target')
- ]
+ interface = mock.models.create_interface(
+ relationship.source_node.service,
+ RELATIONSHIP_INTERFACE_NAME,
+ RELATIONSHIP_OPERATION_NAME
+ )
+ relationship.interfaces[interface.name] = interface
context.model.relationship.update(relationship)
- dependent_node = context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
- dependent_node.interfaces = [mock.models.get_interface(OP_NAME)]
- context.model.node.update(dependent_node)
+ node = context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+ interface = mock.models.create_interface(
+ node.service,
+ NODE_INTERFACE_NAME,
+ NODE_OPERATION_NAME
+ )
+ node.interfaces[interface.name] = interface
+ context.model.node.update(node)
yield context
storage.release_sqlite_storage(context.model)
@@ -55,39 +65,43 @@ class TestOperationTask(object):
def _create_node_operation_task(self, ctx, node):
with workflow_context.current.push(ctx):
- api_task = api.task.OperationTask.node(
- instance=node,
- name='tosca.interfaces.node.lifecycle.Standard.create')
+ api_task = api.task.OperationTask.for_node(
+ node=node,
+ interface_name=NODE_INTERFACE_NAME,
+ operation_name=NODE_OPERATION_NAME)
core_task = core.task.OperationTask(api_task=api_task)
return api_task, core_task
- def _create_relationship_operation_task(self, ctx, relationship, operation_name, edge):
+ def _create_relationship_operation_task(self, ctx, relationship, runs_on):
with workflow_context.current.push(ctx):
- api_task = api.task.OperationTask.relationship(
- instance=relationship, name=operation_name, edge=edge)
+ api_task = api.task.OperationTask.for_relationship(
+ relationship=relationship,
+ interface_name=RELATIONSHIP_INTERFACE_NAME,
+ operation_name=RELATIONSHIP_OPERATION_NAME,
+ runs_on=runs_on)
core_task = core.task.OperationTask(api_task=api_task)
return api_task, core_task
def test_node_operation_task_creation(self, ctx):
- storage_plugin = mock.models.get_plugin(package_name='p1', package_version='0.1')
- storage_plugin_other = mock.models.get_plugin(package_name='p0', package_version='0.0')
+ storage_plugin = mock.models.create_plugin(package_name='p1', package_version='0.1')
+ storage_plugin_other = mock.models.create_plugin(package_name='p0', package_version='0.0')
ctx.model.plugin.put(storage_plugin_other)
ctx.model.plugin.put(storage_plugin)
- node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+ node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
node_template = node.node_template
- plugin_name = 'plugin1'
- node_template.plugins = [{'name': 'plugin1',
- 'package_name': 'p1',
- 'package_version': '0.1'}]
- node.interfaces = [mock.models.get_interface(
- 'tosca.interfaces.node.lifecycle.Standard.create',
- operation_kwargs=dict(plugin='plugin1')
- )]
+ node_template.plugins = [storage_plugin]
+ interface = mock.models.create_interface(
+ node.service,
+ NODE_INTERFACE_NAME,
+ NODE_OPERATION_NAME,
+ operation_kwargs=dict(plugin=storage_plugin)
+ )
+ node.interfaces[interface.name] = interface
ctx.model.node_template.update(node_template)
ctx.model.node.update(node)
api_task, core_task = self._create_node_operation_task(ctx, node)
storage_task = ctx.model.task.get_by_name(core_task.name)
- assert storage_task.plugin_name == plugin_name
+ assert storage_task.plugin is storage_plugin
assert storage_task.execution_name == ctx.execution.name
assert storage_task.runs_on == core_task.context.node
assert core_task.model_task == storage_task
@@ -101,17 +115,17 @@ class TestOperationTask(object):
relationship = ctx.model.relationship.list()[0]
ctx.model.relationship.update(relationship)
_, core_task = self._create_relationship_operation_task(
- ctx, relationship, RELATIONSHIP_OP_NAME, 'source')
+ ctx, relationship, models.Task.RUNS_ON_SOURCE)
assert core_task.model_task.runs_on == relationship.source_node
def test_target_relationship_operation_task_creation(self, ctx):
relationship = ctx.model.relationship.list()[0]
_, core_task = self._create_relationship_operation_task(
- ctx, relationship, RELATIONSHIP_OP_NAME, 'target')
+ ctx, relationship, models.Task.RUNS_ON_TARGET)
assert core_task.model_task.runs_on == relationship.target_node
def test_operation_task_edit_locked_attribute(self, ctx):
- node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+ node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
_, core_task = self._create_node_operation_task(ctx, node)
now = datetime.utcnow()
@@ -127,7 +141,7 @@ class TestOperationTask(object):
core_task.due_at = now
def test_operation_task_edit_attributes(self, ctx):
- node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+ node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
_, core_task = self._create_node_operation_task(ctx, node)
future_time = datetime.utcnow() + timedelta(seconds=3)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/workflows/core/test_task_graph_into_exececution_graph.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/core/test_task_graph_into_exececution_graph.py b/tests/orchestrator/workflows/core/test_task_graph_into_exececution_graph.py
index 167004e..0a95d43 100644
--- a/tests/orchestrator/workflows/core/test_task_graph_into_exececution_graph.py
+++ b/tests/orchestrator/workflows/core/test_task_graph_into_exececution_graph.py
@@ -23,10 +23,16 @@ from tests import storage
def test_task_graph_into_execution_graph(tmpdir):
- operation_name = 'tosca.interfaces.node.lifecycle.Standard.create'
+ interface_name = 'Standard'
+ operation_name = 'create'
task_context = mock.context.simple(str(tmpdir))
- node = task_context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
- node.interfaces = [mock.models.get_interface(operation_name)]
+ node = task_context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+ interface = mock.models.create_interface(
+ node.service,
+ interface_name,
+ operation_name
+ )
+ node.interfaces[interface.name] = interface
task_context.model.node.update(node)
def sub_workflow(name, **_):
@@ -34,14 +40,17 @@ def test_task_graph_into_execution_graph(tmpdir):
with context.workflow.current.push(task_context):
test_task_graph = api.task.WorkflowTask(sub_workflow, name='test_task_graph')
- simple_before_task = api.task.OperationTask.node(instance=node,
- name=operation_name)
- simple_after_task = api.task.OperationTask.node(instance=node,
- name=operation_name)
+ simple_before_task = api.task.OperationTask.for_node(node=node,
+ interface_name=interface_name,
+ operation_name=operation_name)
+ simple_after_task = api.task.OperationTask.for_node(node=node,
+ interface_name=interface_name,
+ operation_name=operation_name)
inner_task_graph = api.task.WorkflowTask(sub_workflow, name='test_inner_task_graph')
- inner_task = api.task.OperationTask.node(instance=node,
- name=operation_name)
+ inner_task = api.task.OperationTask.for_node(node=node,
+ interface_name=interface_name,
+ operation_name=operation_name)
inner_task_graph.add_tasks(inner_task)
test_task_graph.add_tasks(simple_before_task)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/workflows/executor/test_executor.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/executor/test_executor.py b/tests/orchestrator/workflows/executor/test_executor.py
index 2421fa9..0e96ba3 100644
--- a/tests/orchestrator/workflows/executor/test_executor.py
+++ b/tests/orchestrator/workflows/executor/test_executor.py
@@ -43,7 +43,9 @@ def test_execute(executor):
expected_value = 'value'
successful_task = MockTask(mock_successful_task)
failing_task = MockTask(mock_failing_task)
- task_with_inputs = MockTask(mock_task_with_input, inputs=dict(input='value'))
+ #task_with_inputs = MockTask(mock_task_with_input, inputs=dict(input='value'))
+ task_with_inputs = MockTask(mock_task_with_input, inputs={'input': models.Parameter(
+ name='input', type_name='string', value='value')})
for task in [successful_task, failing_task, task_with_inputs]:
executor.execute(task)
@@ -105,7 +107,8 @@ class MockTask(object):
self.exception = None
self.id = str(uuid.uuid4())
name = func.__name__
- implementation = 'tests.orchestrator.workflows.executor.test_executor.{name}'.format(
+ implementation = '{module}.{name}'.format(
+ module=__name__,
name=name)
self.implementation = implementation
self.logger = logging.getLogger()
@@ -151,6 +154,7 @@ def register_signals():
def failure_handler(task, exception, *args, **kwargs):
task.states.append('failure')
task.exception = exception
+
events.start_task_signal.connect(start_handler)
events.on_success_task_signal.connect(success_handler)
events.on_failure_task_signal.connect(failure_handler)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/workflows/executor/test_process_executor_extension.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/executor/test_process_executor_extension.py b/tests/orchestrator/workflows/executor/test_process_executor_extension.py
index ac95554..0988fae 100644
--- a/tests/orchestrator/workflows/executor/test_process_executor_extension.py
+++ b/tests/orchestrator/workflows/executor/test_process_executor_extension.py
@@ -29,25 +29,32 @@ from tests import storage
def test_decorate_extension(context, executor):
inputs = {'input1': 1, 'input2': 2}
- def get_node_instance(ctx):
- return ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+ def get_node(ctx):
+ return ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
@workflow
def mock_workflow(ctx, graph):
- node_instance = get_node_instance(ctx)
- op = 'test.op'
- node_instance.interfaces = [mock.models.get_interface(
- op,
+ node = get_node(ctx)
+ interface_name = 'test_interface'
+ operation_name = 'operation'
+ interface = mock.models.create_interface(
+ ctx.service,
+ interface_name,
+ operation_name,
operation_kwargs=dict(implementation='{0}.{1}'.format(__name__,
_mock_operation.__name__))
- )]
- task = api.task.OperationTask.node(instance=node_instance, name=op, inputs=inputs)
+ )
+ node.interfaces[interface.name] = interface
+ task = api.task.OperationTask.for_node(node=node,
+ interface_name=interface_name,
+ operation_name=operation_name,
+ inputs=inputs)
graph.add_tasks(task)
return graph
graph = mock_workflow(ctx=context) # pylint: disable=no-value-for-parameter
eng = engine.Engine(executor=executor, workflow_context=context, tasks_graph=graph)
eng.execute()
- out = get_node_instance(context).runtime_properties['out']
+ out = get_node(context).runtime_properties['out']
assert out['wrapper_inputs'] == inputs
assert out['function_inputs'] == inputs
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/dd99f0fb/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py b/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py
index d3b3300..d84a153 100644
--- a/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py
+++ b/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py
@@ -45,7 +45,7 @@ def test_track_changes_of_failed_operation(context, executor):
def _assert_tracked_changes_are_applied(context):
- instance = context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+ instance = context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
assert instance.runtime_properties == _TEST_RUNTIME_PROPERTIES
@@ -67,7 +67,7 @@ def test_apply_tracked_changes_during_an_operation(context, executor):
}
expected_initial = context.model.node.get_by_name(
- mock.models.DEPENDENCY_NODE_INSTANCE_NAME).runtime_properties
+ mock.models.DEPENDENCY_NODE_NAME).runtime_properties
out = _run_workflow(context=context, executor=executor, op_func=_mock_updating_operation,
inputs=inputs)
@@ -87,19 +87,27 @@ def test_apply_tracked_changes_during_an_operation(context, executor):
def _run_workflow(context, executor, op_func, inputs=None):
@workflow
def mock_workflow(ctx, graph):
- node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
- node.interfaces = [mock.models.get_interface(
- 'test.op', operation_kwargs=dict(implementation=_operation_mapping(op_func)))]
- task = api.task.OperationTask.node(instance=node,
- name='test.op',
- inputs=inputs or {})
+ node = ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+ interface_name = 'test_interface'
+ operation_name = 'operation'
+ interface = mock.models.create_interface(
+ ctx.service,
+ interface_name,
+ operation_name,
+ operation_kwargs=dict(implementation=_operation_mapping(op_func))
+ )
+ node.interfaces[interface.name] = interface
+ task = api.task.OperationTask.for_node(node=node,
+ interface_name=interface_name,
+ operation_name=operation_name,
+ inputs=inputs or {})
graph.add_tasks(task)
return graph
graph = mock_workflow(ctx=context) # pylint: disable=no-value-for-parameter
eng = engine.Engine(executor=executor, workflow_context=context, tasks_graph=graph)
eng.execute()
return context.model.node.get_by_name(
- mock.models.DEPENDENCY_NODE_INSTANCE_NAME).runtime_properties.get('out')
+ mock.models.DEPENDENCY_NODE_NAME).runtime_properties.get('out')
@operation