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