http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/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 b39a81f..26564c5 100644
--- a/tests/orchestrator/workflows/core/test_task.py
+++ b/tests/orchestrator/workflows/core/test_task.py
@@ -28,30 +28,43 @@ 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'
+
 
 @pytest.fixture
 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')
+    ]
+    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)
+
     yield context
     storage.release_sqlite_storage(context.model)
 
 
 class TestOperationTask(object):
 
-    def _create_node_operation_task(self, ctx, node_instance):
+    def _create_node_operation_task(self, ctx, node):
         with workflow_context.current.push(ctx):
-            api_task = api.task.OperationTask.node_instance(
-                instance=node_instance,
+            api_task = api.task.OperationTask.node(
+                instance=node,
                 name='tosca.interfaces.node.lifecycle.Standard.create')
             core_task = core.task.OperationTask(api_task=api_task)
         return api_task, core_task
 
-    def _create_relationship_operation_task(self, ctx, relationship_instance, 
operation_end):
+    def _create_relationship_operation_task(self, ctx, relationship, 
operation_name, edge):
         with workflow_context.current.push(ctx):
-            api_task = api.task.OperationTask.relationship_instance(
-                instance=relationship_instance,
-                
name='tosca.interfaces.relationship.Configure.pre_configure_source',
-                operation_end=operation_end)
+            api_task = api.task.OperationTask.relationship(
+                instance=relationship, name=operation_name, edge=edge)
             core_task = core.task.OperationTask(api_task=api_task)
         return api_task, core_task
 
@@ -60,45 +73,47 @@ class TestOperationTask(object):
         storage_plugin_other = mock.models.get_plugin(package_name='p0', 
package_version='0.0')
         ctx.model.plugin.put(storage_plugin_other)
         ctx.model.plugin.put(storage_plugin)
-        node_instance = ctx.model.node_instance.get_by_name(
-            mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
-        node = node_instance.node
+        node = 
ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+        node_template = node.node_template
         plugin_name = 'plugin1'
-        node.plugins = [{'name': plugin_name,
-                         'package_name': 'p1',
-                         'package_version': '0.1'}]
-        node.operations['tosca.interfaces.node.lifecycle.Standard.create'] = 
{'plugin': plugin_name}
-        api_task, core_task = self._create_node_operation_task(ctx, 
node_instance)
+        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')
+        )]
+        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.execution_name == ctx.execution.name
-        assert storage_task.runs_on.id == core_task.context.node_instance.id
+        assert storage_task.runs_on == core_task.context.node
         assert core_task.model_task == storage_task
         assert core_task.name == api_task.name
-        assert core_task.operation_mapping == api_task.operation_mapping
-        assert core_task.actor == api_task.actor == node_instance
+        assert core_task.implementation == api_task.implementation
+        assert core_task.actor == api_task.actor == node
         assert core_task.inputs == api_task.inputs == storage_task.inputs
         assert core_task.plugin == storage_plugin
 
     def test_source_relationship_operation_task_creation(self, ctx):
-        relationship_instance = ctx.model.relationship_instance.list()[0]
+        relationship = ctx.model.relationship.list()[0]
+        ctx.model.relationship.update(relationship)
         _, core_task = self._create_relationship_operation_task(
-            ctx, relationship_instance,
-            api.task.OperationTask.SOURCE_OPERATION)
-        assert core_task.model_task.runs_on.id == 
relationship_instance.source_node_instance.id
+            ctx, relationship, RELATIONSHIP_OP_NAME, 'source')
+        assert core_task.model_task.runs_on == relationship.source_node
 
     def test_target_relationship_operation_task_creation(self, ctx):
-        relationship_instance = ctx.model.relationship_instance.list()[0]
+        relationship = ctx.model.relationship.list()[0]
         _, core_task = self._create_relationship_operation_task(
-            ctx, relationship_instance,
-            api.task.OperationTask.TARGET_OPERATION)
-        assert core_task.model_task.runs_on.id == 
relationship_instance.target_node_instance.id
+            ctx, relationship, RELATIONSHIP_OP_NAME, 'target')
+        assert core_task.model_task.runs_on == relationship.target_node
 
     def test_operation_task_edit_locked_attribute(self, ctx):
-        node_instance = \
-            
ctx.model.node_instance.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+        node = 
ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
 
-        _, core_task = self._create_node_operation_task(ctx, node_instance)
+        _, core_task = self._create_node_operation_task(ctx, node)
         now = datetime.utcnow()
         with pytest.raises(exceptions.TaskException):
             core_task.status = core_task.STARTED
@@ -112,10 +127,9 @@ class TestOperationTask(object):
             core_task.due_at = now
 
     def test_operation_task_edit_attributes(self, ctx):
-        node_instance = \
-            
ctx.model.node_instance.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+        node = 
ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
 
-        _, core_task = self._create_node_operation_task(ctx, node_instance)
+        _, core_task = self._create_node_operation_task(ctx, node)
         future_time = datetime.utcnow() + timedelta(seconds=3)
 
         with core_task._update():

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/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 57be075..167004e 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
@@ -25,21 +25,23 @@ from tests import storage
 def test_task_graph_into_execution_graph(tmpdir):
     operation_name = 'tosca.interfaces.node.lifecycle.Standard.create'
     task_context = mock.context.simple(str(tmpdir))
-    node_instance = \
-        
task_context.model.node_instance.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+    node = 
task_context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+    node.interfaces = [mock.models.get_interface(operation_name)]
+    task_context.model.node.update(node)
+
     def sub_workflow(name, **_):
         return api.task_graph.TaskGraph(name)
 
     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(instance=node_instance,
-                                                                  
name=operation_name)
-        simple_after_task = 
api.task.OperationTask.node_instance(instance=node_instance,
-                                                                 
name=operation_name)
+        simple_before_task = api.task.OperationTask.node(instance=node,
+                                                         name=operation_name)
+        simple_after_task = api.task.OperationTask.node(instance=node,
+                                                        name=operation_name)
 
         inner_task_graph = api.task.WorkflowTask(sub_workflow, 
name='test_inner_task_graph')
-        inner_task = 
api.task.OperationTask.node_instance(instance=node_instance,
-                                                          name=operation_name)
+        inner_task = api.task.OperationTask.node(instance=node,
+                                                 name=operation_name)
         inner_task_graph.add_tasks(inner_task)
 
     test_task_graph.add_tasks(simple_before_task)
@@ -91,7 +93,7 @@ def test_task_graph_into_execution_graph(tmpdir):
 def _assert_execution_is_api_task(execution_task, api_task):
     assert execution_task.id == api_task.id
     assert execution_task.name == api_task.name
-    assert execution_task.operation_mapping == api_task.operation_mapping
+    assert execution_task.implementation == api_task.implementation
     assert execution_task.actor == api_task.actor
     assert execution_task.inputs == api_task.inputs
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/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 d983fe9..580bf8b 100644
--- a/tests/orchestrator/workflows/executor/test_executor.py
+++ b/tests/orchestrator/workflows/executor/test_executor.py
@@ -28,7 +28,7 @@ except ImportError:
     _celery = None
     app = None
 
-from aria.storage import model
+from aria.storage.modeling import model
 from aria.orchestrator import events
 from aria.orchestrator.workflows.executor import (
     thread,
@@ -43,7 +43,7 @@ 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={'input': 
expected_value})
+    task_with_inputs = MockTask(mock_task_with_input, 
inputs=dict(input='value'))
 
     for task in [successful_task, failing_task, task_with_inputs]:
         executor.execute(task)
@@ -105,8 +105,9 @@ class MockTask(object):
         self.exception = None
         self.id = str(uuid.uuid4())
         name = func.__name__
-        operation = 
'tests.orchestrator.workflows.executor.test_executor.{name}'.format(name=name)
-        self.operation_mapping = operation
+        implementation = 
'tests.orchestrator.workflows.executor.test_executor.{name}'.format(
+            name=name)
+        self.implementation = implementation
         self.logger = logging.getLogger()
         self.name = name
         self.inputs = inputs or {}

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/tests/orchestrator/workflows/executor/test_process_executor.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/executor/test_process_executor.py 
b/tests/orchestrator/workflows/executor/test_process_executor.py
index ff5dce6..e904eb3 100644
--- a/tests/orchestrator/workflows/executor/test_process_executor.py
+++ b/tests/orchestrator/workflows/executor/test_process_executor.py
@@ -42,7 +42,7 @@ class TestProcessExecutor(object):
 
     def test_plugin_execution(self, executor, mock_plugin):
         task = MockTask(plugin=mock_plugin,
-                        operation='mock_plugin1.operation')
+                        implementation='mock_plugin1.operation')
 
         queue = Queue.Queue()
 
@@ -131,11 +131,11 @@ class MockTask(object):
 
     INFINITE_RETRIES = aria_model.Task.INFINITE_RETRIES
 
-    def __init__(self, plugin, operation):
+    def __init__(self, plugin, implementation):
         self.id = str(uuid.uuid4())
-        self.operation_mapping = operation
+        self.implementation = implementation
         self.logger = logging.getLogger()
-        self.name = operation
+        self.name = implementation
         self.inputs = {}
         self.context = MockContext()
         self.retry_count = 0

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/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 18957f1..ac95554 100644
--- a/tests/orchestrator/workflows/executor/test_process_executor_extension.py
+++ b/tests/orchestrator/workflows/executor/test_process_executor_extension.py
@@ -30,15 +30,18 @@ def test_decorate_extension(context, executor):
     inputs = {'input1': 1, 'input2': 2}
 
     def get_node_instance(ctx):
-        return 
ctx.model.node_instance.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+        return 
ctx.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
 
     @workflow
     def mock_workflow(ctx, graph):
         node_instance = get_node_instance(ctx)
         op = 'test.op'
-        op_dict = {'operation': '{0}.{1}'.format(__name__, 
_mock_operation.__name__)}
-        node_instance.node.operations['test.op'] = op_dict
-        task = api.task.OperationTask.node_instance(instance=node_instance, 
name=op, inputs=inputs)
+        node_instance.interfaces = [mock.models.get_interface(
+            op,
+            operation_kwargs=dict(implementation='{0}.{1}'.format(__name__,
+                                                                  
_mock_operation.__name__))
+        )]
+        task = api.task.OperationTask.node(instance=node_instance, name=op, 
inputs=inputs)
         graph.add_tasks(task)
         return graph
     graph = mock_workflow(ctx=context)  # pylint: 
disable=no-value-for-parameter
@@ -55,7 +58,7 @@ class MockProcessExecutorExtension(object):
     def decorate(self):
         def decorator(function):
             def wrapper(ctx, **operation_inputs):
-                ctx.node_instance.runtime_properties['out'] = 
{'wrapper_inputs': operation_inputs}
+                ctx.node.runtime_properties['out'] = {'wrapper_inputs': 
operation_inputs}
                 function(ctx=ctx, **operation_inputs)
             return wrapper
         return decorator
@@ -63,7 +66,7 @@ class MockProcessExecutorExtension(object):
 
 @operation
 def _mock_operation(ctx, **operation_inputs):
-    ctx.node_instance.runtime_properties['out']['function_inputs'] = 
operation_inputs
+    ctx.node.runtime_properties['out']['function_inputs'] = operation_inputs
 
 
 @pytest.fixture

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/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 e383859..d3b3300 100644
--- 
a/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py
+++ 
b/tests/orchestrator/workflows/executor/test_process_executor_tracked_changes.py
@@ -45,13 +45,13 @@ def test_track_changes_of_failed_operation(context, 
executor):
 
 
 def _assert_tracked_changes_are_applied(context):
-    instance = 
context.model.node_instance.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
+    instance = 
context.model.node.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
     assert instance.runtime_properties == _TEST_RUNTIME_PROPERTIES
 
 
 def _update_runtime_properties(context):
-    context.node_instance.runtime_properties.clear()
-    context.node_instance.runtime_properties.update(_TEST_RUNTIME_PROPERTIES)
+    context.node.runtime_properties.clear()
+    context.node.runtime_properties.update(_TEST_RUNTIME_PROPERTIES)
 
 
 def test_refresh_state_of_tracked_attributes(context, executor):
@@ -66,7 +66,7 @@ def test_apply_tracked_changes_during_an_operation(context, 
executor):
         'changed_but_refreshed': {'some': 'newer', 'properties': 'right there'}
     }
 
-    expected_initial = context.model.node_instance.get_by_name(
+    expected_initial = context.model.node.get_by_name(
         mock.models.DEPENDENCY_NODE_INSTANCE_NAME).runtime_properties
 
     out = _run_workflow(context=context, executor=executor, 
op_func=_mock_updating_operation,
@@ -87,17 +87,18 @@ 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_instance = ctx.model.node_instance.get_by_name(
-            mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
-        node_instance.node.operations['test.op'] = {'operation': 
_operation_mapping(op_func)}
-        task = api.task.OperationTask.node_instance(instance=node_instance, 
name='test.op',
-                                                    inputs=inputs or {})
+        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 {})
         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_instance.get_by_name(
+    return context.model.node.get_by_name(
         
mock.models.DEPENDENCY_NODE_INSTANCE_NAME).runtime_properties.get('out')
 
 
@@ -114,25 +115,25 @@ def _mock_fail_operation(ctx):
 
 @operation
 def _mock_refreshing_operation(ctx):
-    out = {'initial': copy.deepcopy(ctx.node_instance.runtime_properties)}
-    ctx.node_instance.runtime_properties.update({'some': 'new', 'properties': 
'right here'})
-    out['after_change'] = copy.deepcopy(ctx.node_instance.runtime_properties)
-    ctx.model.node_instance.refresh(ctx.node_instance)
-    out['after_refresh'] = copy.deepcopy(ctx.node_instance.runtime_properties)
-    ctx.node_instance.runtime_properties['out'] = out
+    out = {'initial': copy.deepcopy(ctx.node.runtime_properties)}
+    ctx.node.runtime_properties.update({'some': 'new', 'properties': 'right 
here'})
+    out['after_change'] = copy.deepcopy(ctx.node.runtime_properties)
+    ctx.model.node.refresh(ctx.node)
+    out['after_refresh'] = copy.deepcopy(ctx.node.runtime_properties)
+    ctx.node.runtime_properties['out'] = out
 
 
 @operation
 def _mock_updating_operation(ctx, committed, changed_but_refreshed):
-    out = {'initial': copy.deepcopy(ctx.node_instance.runtime_properties)}
-    ctx.node_instance.runtime_properties.update(committed)
-    ctx.model.node_instance.update(ctx.node_instance)
-    out['after_update'] = copy.deepcopy(ctx.node_instance.runtime_properties)
-    ctx.node_instance.runtime_properties.update(changed_but_refreshed)
-    out['after_change'] = copy.deepcopy(ctx.node_instance.runtime_properties)
-    ctx.model.node_instance.refresh(ctx.node_instance)
-    out['after_refresh'] = copy.deepcopy(ctx.node_instance.runtime_properties)
-    ctx.node_instance.runtime_properties['out'] = out
+    out = {'initial': copy.deepcopy(ctx.node.runtime_properties)}
+    ctx.node.runtime_properties.update(committed)
+    ctx.model.node.update(ctx.node)
+    out['after_update'] = copy.deepcopy(ctx.node.runtime_properties)
+    ctx.node.runtime_properties.update(changed_but_refreshed)
+    out['after_change'] = copy.deepcopy(ctx.node.runtime_properties)
+    ctx.model.node.refresh(ctx.node)
+    out['after_refresh'] = copy.deepcopy(ctx.node.runtime_properties)
+    ctx.node.runtime_properties['out'] = out
 
 
 def _operation_mapping(func):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/tests/resources/scripts/test_ssh.sh
----------------------------------------------------------------------
diff --git a/tests/resources/scripts/test_ssh.sh 
b/tests/resources/scripts/test_ssh.sh
index 6f18278..90202c7 100644
--- a/tests/resources/scripts/test_ssh.sh
+++ b/tests/resources/scripts/test_ssh.sh
@@ -4,7 +4,7 @@ set -u
 set -e
 
 test_run_script_basic() {
-    ctx node-instance runtime-properties test_value $test_value
+    ctx node runtime-properties test_value $test_value
 }
 
 test_run_script_as_sudo() {
@@ -12,7 +12,7 @@ test_run_script_as_sudo() {
 }
 
 test_run_script_default_base_dir() {
-    ctx node-instance runtime-properties work_dir $PWD
+    ctx node runtime-properties work_dir $PWD
 }
 
 test_run_script_with_hide() {
@@ -20,44 +20,44 @@ test_run_script_with_hide() {
 }
 
 test_run_script_process_config() {
-    ctx node-instance runtime-properties env_value $test_value_env
-    ctx node-instance runtime-properties bash_version $BASH_VERSION
-    ctx node-instance runtime-properties arg1_value $1
-    ctx node-instance runtime-properties arg2_value $2
-    ctx node-instance runtime-properties cwd $PWD
-    ctx node-instance runtime-properties ctx_path $(which ctx)
+    ctx node runtime-properties env_value $test_value_env
+    ctx node runtime-properties bash_version $BASH_VERSION
+    ctx node runtime-properties arg1_value $1
+    ctx node runtime-properties arg2_value $2
+    ctx node runtime-properties cwd $PWD
+    ctx node runtime-properties ctx_path $(which ctx)
 }
 
 test_run_script_command_prefix() {
-    ctx node-instance runtime-properties dollar_dash $-
+    ctx node runtime-properties dollar_dash $-
 }
 
 test_run_script_reuse_existing_ctx_1() {
-    ctx node-instance runtime-properties test_value1 $test_value1
+    ctx node runtime-properties test_value1 $test_value1
 }
 
 test_run_script_reuse_existing_ctx_2() {
-    ctx node-instance runtime-properties test_value2 $test_value2
+    ctx node runtime-properties test_value2 $test_value2
 }
 
 test_run_script_download_resource_plain() {
     local destination=$(mktemp)
     ctx download-resource ${destination} test_resource
-    ctx node-instance runtime-properties test_value "$(cat ${destination})"
+    ctx node runtime-properties test_value "$(cat ${destination})"
 }
 
 test_run_script_download_resource_and_render() {
     local destination=$(mktemp)
     ctx download-resource-and-render ${destination} test_resource
-    ctx node-instance runtime-properties test_value "$(cat ${destination})"
+    ctx node runtime-properties test_value "$(cat ${destination})"
 }
 
 test_run_script_inputs_as_env_variables_no_override() {
-    ctx node-instance runtime-properties test_value "$custom_env_var"
+    ctx node runtime-properties test_value "$custom_env_var"
 }
 
 test_run_script_inputs_as_env_variables_process_env_override() {
-    ctx node-instance runtime-properties test_value "$custom_env_var"
+    ctx node runtime-properties test_value "$custom_env_var"
 }
 
 test_run_script_error_in_script() {

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/tests/resources/service_templates/node-cellar/workflows.py
----------------------------------------------------------------------
diff --git a/tests/resources/service_templates/node-cellar/workflows.py 
b/tests/resources/service_templates/node-cellar/workflows.py
index b3546bb..fff78bf 100644
--- a/tests/resources/service_templates/node-cellar/workflows.py
+++ b/tests/resources/service_templates/node-cellar/workflows.py
@@ -11,9 +11,6 @@ def maintenance(ctx, graph, enabled):
 
     operation = 'Maintenance.enable' if enabled else 'Maintenance.disable'
 
-    for node_instance in ctx.model.node_instance.iter():
-        if operation in node_instance.node.operations:
-            task = OperationTask.node_instance(
-                instance=node_instance,
-                name=operation)
-            graph.add_tasks(task)
+    for node in ctx.model.node.iter():
+        for interface in node.interfaces.filter_by(name='Maintenance', 
type_name='Maintenance'):
+            graph.add_tasks(OperationTask.node(instance=node, name=operation))

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/tests/storage/__init__.py
----------------------------------------------------------------------
diff --git a/tests/storage/__init__.py b/tests/storage/__init__.py
index b798e01..4278831 100644
--- a/tests/storage/__init__.py
+++ b/tests/storage/__init__.py
@@ -14,8 +14,8 @@
 # limitations under the License.
 import os
 import platform
-from tempfile import mkdtemp
 from shutil import rmtree
+from tempfile import mkdtemp
 
 from sqlalchemy import (
     create_engine,
@@ -29,13 +29,14 @@ from sqlalchemy import (
 
 from aria.storage import (
     model,
-    structure,
     type as aria_type,
+    structure,
+    modeling
 )
 
 
-class MockModel(model.DeclarativeBase, structure.ModelMixin): #pylint: 
disable=abstract-method
-    __tablename__ = 'mock_models'
+class MockModel(model.aria_declarative_base, structure.ModelMixin): #pylint: 
disable=abstract-method
+    __tablename__ = 'mock_model'
     model_dict = Column(aria_type.Dict)
     model_list = Column(aria_type.List)
     value = Column(Integer)
@@ -64,7 +65,7 @@ def release_sqlite_storage(storage):
             session.rollback()
             session.close()
         for engine in set(mapi._engine for mapi in mapis):
-            model.DeclarativeBase.metadata.drop_all(engine)
+            model.aria_declarative_base.metadata.drop_all(engine)
 
 
 def init_inmemory_model_storage():

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/tests/storage/test_instrumentation.py
----------------------------------------------------------------------
diff --git a/tests/storage/test_instrumentation.py 
b/tests/storage/test_instrumentation.py
index 771342c..08d5ae0 100644
--- a/tests/storage/test_instrumentation.py
+++ b/tests/storage/test_instrumentation.py
@@ -17,17 +17,16 @@ import pytest
 from sqlalchemy import Column, Text, Integer, event
 
 from aria.storage import (
-    model,
     structure,
-    type as aria_type,
     ModelStorage,
     sql_mapi,
     instrumentation,
-    exceptions
+    exceptions,
+    type as aria_type,
+    model
 )
 from ..storage import release_sqlite_storage, init_inmemory_model_storage
 
-
 STUB = instrumentation._STUB
 Value = instrumentation._Value
 instruments_holder = []
@@ -346,15 +345,15 @@ class _MockModel(structure.ModelMixin):
     string2 = Column(Text)
 
 
-class MockModel1(model.DeclarativeBase, _MockModel):
-    __tablename__ = 'mock_model1'
+class MockModel1(_MockModel, model.aria_declarative_base):
+    __tablename__ = 'mock_model_1'
 
 
-class MockModel2(model.DeclarativeBase, _MockModel):
-    __tablename__ = 'mock_model2'
+class MockModel2(_MockModel, model.aria_declarative_base):
+    __tablename__ = 'mock_model_2'
 
 
-class StrictMockModel(model.DeclarativeBase):
+class StrictMockModel(structure.ModelMixin, model.aria_declarative_base):
     __tablename__ = 'strict_mock_model'
 
     strict_dict = Column(aria_type.StrictDict(basestring, basestring))

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/tests/storage/test_model_storage.py
----------------------------------------------------------------------
diff --git a/tests/storage/test_model_storage.py 
b/tests/storage/test_model_storage.py
index 34cc5df..f88080a 100644
--- a/tests/storage/test_model_storage.py
+++ b/tests/storage/test_model_storage.py
@@ -17,9 +17,9 @@ import pytest
 
 from aria.storage import (
     ModelStorage,
-    model,
     exceptions,
     sql_mapi,
+    modeling,
 )
 from aria import application_model_storage
 from ..storage import release_sqlite_storage, init_inmemory_model_storage
@@ -38,7 +38,7 @@ def storage():
 
 @pytest.fixture(scope='module', autouse=True)
 def module_cleanup():
-    model.DeclarativeBase.metadata.remove(MockModel.__table__)  #pylint: 
disable=no-member
+    modeling.model.aria_declarative_base.metadata.remove(MockModel.__table__)  
#pylint: disable=no-member
 
 
 def test_storage_base(storage):
@@ -63,14 +63,41 @@ def test_model_storage(storage):
 def test_application_storage_factory():
     storage = application_model_storage(sql_mapi.SQLAlchemyModelAPI,
                                         initiator=init_inmemory_model_storage)
+
+    assert storage.parameter
+    assert storage.mapping_template
+    assert storage.substitution_template
+    assert storage.service_template
+    assert storage.node_template
+    assert storage.group_template
+    assert storage.interface_template
+    assert storage.operation_template
+    assert storage.artifact_template
+    assert storage.policy_template
+    assert storage.group_policy_template
+    assert storage.group_policy_trigger_template
+    assert storage.requirement_template
+    assert storage.capability_template
+
+    assert storage.mapping
+    assert storage.substitution
+    assert storage.service_instance
     assert storage.node
-    assert storage.node_instance
-    assert storage.plugin
-    assert storage.blueprint
-    assert storage.deployment
-    assert storage.deployment_update
-    assert storage.deployment_update_step
-    assert storage.deployment_modification
+    assert storage.group
+    assert storage.interface
+    assert storage.operation
+    assert storage.capability
+    assert storage.artifact
+    assert storage.policy
+    assert storage.group_policy
+    assert storage.group_policy_trigger
+    assert storage.relationship
+
     assert storage.execution
+    assert storage.service_instance_update
+    assert storage.service_instance_update_step
+    assert storage.service_instance_modification
+    assert storage.plugin
+    assert storage.task
 
     release_sqlite_storage(storage)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/tests/storage/test_models.py
----------------------------------------------------------------------
diff --git a/tests/storage/test_models.py b/tests/storage/test_models.py
index 6450152..1e8d6b5 100644
--- a/tests/storage/test_models.py
+++ b/tests/storage/test_models.py
@@ -22,22 +22,21 @@ from aria.storage import (
     exceptions,
     sql_mapi,
 )
-from aria.storage.model import (
-    DeploymentUpdateStep,
-    Blueprint,
+from aria.storage.modeling.model import (
+    ServiceTemplate,
+    ServiceInstance,
+    ServiceInstanceUpdate,
+    ServiceInstanceUpdateStep,
+    ServiceInstanceModification,
     Execution,
     Task,
     Plugin,
-    Deployment,
-    Node,
-    NodeInstance,
     Relationship,
-    RelationshipInstance,
-    DeploymentUpdate,
-    DeploymentModification,
+    NodeTemplate,
+    Node,
+    Parameter
 )
 
-
 from tests import mock
 from ..storage import release_sqlite_storage, init_inmemory_model_storage
 
@@ -58,61 +57,56 @@ def _empty_storage():
                                      initiator=init_inmemory_model_storage)
 
 
-def _blueprint_storage():
+def _service_template_storage():
     storage = _empty_storage()
-    blueprint = mock.models.get_blueprint()
-    storage.blueprint.put(blueprint)
+    service_template = mock.models.get_blueprint()
+    storage.service_template.put(service_template)
     return storage
 
 
-def _deployment_storage():
-    storage = _blueprint_storage()
-    deployment = mock.models.get_deployment(storage.blueprint.list()[0])
-    storage.deployment.put(deployment)
+def _service_instance_storage():
+    storage = _service_template_storage()
+    service_instance = mock.models.get_deployment(
+        storage.service_template.get_by_name(mock.models.BLUEPRINT_NAME))
+    storage.service_instance.put(service_instance)
     return storage
 
 
-def _deployment_update_storage():
-    storage = _deployment_storage()
-    deployment_update = DeploymentUpdate(
-        deployment=storage.deployment.list()[0],
+def _service_instance_update_storage():
+    storage = _service_instance_storage()
+    service_instance_update = ServiceInstanceUpdate(
+        service_instance=storage.service_instance.list()[0],
         created_at=now,
-        deployment_plan={},
+        service_instance_plan={},
     )
-    storage.deployment_update.put(deployment_update)
+    storage.service_instance_update.put(service_instance_update)
     return storage
 
 
-def _node_storage():
-    storage = _deployment_storage()
-    node = mock.models.get_dependency_node(storage.deployment.list()[0])
-    storage.node.put(node)
+def _node_template_storage():
+    storage = _service_instance_storage()
+    node_template = 
mock.models.get_dependency_node(storage.service_instance.list()[0])
+    storage.node_template.put(node_template)
     return storage
 
 
 def _nodes_storage():
-    storage = _deployment_storage()
-    dependent_node = 
mock.models.get_dependent_node(storage.deployment.list()[0])
-    dependency_node = 
mock.models.get_dependency_node(storage.deployment.list()[0])
-    storage.node.put(dependent_node)
-    storage.node.put(dependency_node)
-    return storage
-
-
-def _node_instances_storage():
     storage = _nodes_storage()
-    dependent_node = storage.node.get_by_name(mock.models.DEPENDENT_NODE_NAME)
-    dependency_node = 
storage.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
-    dependency_node_instance = 
mock.models.get_dependency_node_instance(dependency_node)
-    dependent_node_instance = 
mock.models.get_dependent_node_instance(dependent_node)
-    storage.node_instance.put(dependency_node_instance)
-    storage.node_instance.put(dependent_node_instance)
+    service_instance = 
storage.service_instance.get_by_name(mock.models.DEPLOYMENT_NAME)
+    dependent_node_template = 
storage.node_template.get_by_name(mock.models.DEPENDENT_NODE_NAME)
+    dependency_node_template = 
storage.node_template.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+    dependency_node = 
mock.models.get_dependency_node_instance(dependency_node_template,
+                                                               
service_instance)
+    dependent_node = 
mock.models.get_dependent_node_instance(dependent_node_template,
+                                                             service_instance)
+    storage.node.put(dependency_node)
+    storage.node.put(dependent_node)
     return storage
 
 
 def _execution_storage():
-    storage = _deployment_storage()
-    execution = mock.models.get_execution(storage.deployment.list()[0])
+    storage = _service_instance_storage()
+    execution = mock.models.get_execution(storage.service_instance.list()[0])
     plugin = mock.models.get_plugin()
     storage.execution.put(execution)
     storage.plugin.put(plugin)
@@ -126,26 +120,26 @@ def empty_storage():
 
 
 @pytest.fixture
-def blueprint_storage():
-    with sql_storage(_blueprint_storage) as storage:
+def service_template_storage():
+    with sql_storage(_service_template_storage) as storage:
         yield storage
 
 
 @pytest.fixture
-def deployment_storage():
-    with sql_storage(_deployment_storage) as storage:
+def service_instance_storage():
+    with sql_storage(_service_instance_storage) as storage:
         yield storage
 
 
 @pytest.fixture
-def deployment_update_storage():
-    with sql_storage(_deployment_update_storage) as storage:
+def service_instance_update_storage():
+    with sql_storage(_service_instance_update_storage) as storage:
         yield storage
 
 
 @pytest.fixture
-def node_storage():
-    with sql_storage(_node_storage) as storage:
+def node_template_storage():
+    with sql_storage(_node_template_storage) as storage:
         yield storage
 
 
@@ -156,12 +150,6 @@ def nodes_storage():
 
 
 @pytest.fixture
-def node_instances_storage():
-    with sql_storage(_node_instances_storage) as storage:
-        yield storage
-
-
-@pytest.fixture
 def execution_storage():
     with sql_storage(_execution_storage) as storage:
         yield storage
@@ -171,17 +159,17 @@ m_cls = type('MockClass')
 now = datetime.utcnow()
 
 
-def _test_model(is_valid, storage, model_name, model_cls, model_kwargs):
+def _test_model(is_valid, storage, model_cls, model_kwargs):
     if is_valid:
         model = model_cls(**model_kwargs)
-        getattr(storage, model_name).put(model)
+        getattr(storage, model_cls.__modelname__).put(model)
         return model
     else:
-        with pytest.raises(exceptions.StorageError):
-            getattr(storage, model_name).put(model_cls(**model_kwargs))
+        with pytest.raises((exceptions.StorageError, TypeError),):
+            getattr(storage, 
model_cls.__modelname__).put(model_cls(**model_kwargs))
 
 
-class TestBlueprint(object):
+class TestServiceTemplate(object):
 
     @pytest.mark.parametrize(
         'is_valid, plan, description, created_at, updated_at, main_file_name',
@@ -198,74 +186,71 @@ class TestBlueprint(object):
                                       updated_at, main_file_name):
         _test_model(is_valid=is_valid,
                     storage=empty_storage,
-                    model_name='blueprint',
-                    model_cls=Blueprint,
-                    model_kwargs=dict(plan=plan,
-                                      description=description,
-                                      created_at=created_at,
-                                      updated_at=updated_at,
-                                      main_file_name=main_file_name))
+                    model_cls=ServiceTemplate,
+                    model_kwargs=dict(
+                        plan=plan,
+                        description=description,
+                        created_at=created_at,
+                        updated_at=updated_at,
+                        main_file_name=main_file_name)
+                   )
 
 
-class TestDeployment(object):
+class TestServiceInstance(object):
 
     @pytest.mark.parametrize(
-        'is_valid, name, created_at, description, inputs, groups, permalink, 
policy_triggers, '
+        'is_valid, name, created_at, description, inputs, permalink, 
policy_triggers, '
         'policy_types, outputs, scaling_groups, updated_at, workflows',
         [
-            (False, m_cls, now, 'desc', {}, {}, 'perlnk', {}, {}, {}, {}, now, 
{}),
-            (False, 'name', m_cls, 'desc', {}, {}, 'perlnk', {}, {}, {}, {}, 
now, {}),
-            (False, 'name', now, m_cls, {}, {}, 'perlnk', {}, {}, {}, {}, now, 
{}),
-            (False, 'name', now, 'desc', m_cls, {}, 'perlnk', {}, {}, {}, {}, 
now, {}),
-            (False, 'name', now, 'desc', {}, m_cls, 'perlnk', {}, {}, {}, {}, 
now, {}),
-            (False, 'name', now, 'desc', {}, {}, m_cls, {}, {}, {}, {}, now, 
{}),
-            (False, 'name', now, 'desc', {}, {}, 'perlnk', m_cls, {}, {}, {}, 
now, {}),
-            (False, 'name', now, 'desc', {}, {}, 'perlnk', {}, m_cls, {}, {}, 
now, {}),
-            (False, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, m_cls, {}, 
now, {}),
-            (False, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, {}, m_cls, 
now, {}),
-            (False, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, {}, {}, 
m_cls, {}),
-            (False, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, {}, {}, 
now, m_cls),
-
-            (True, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, {}, {}, now, 
{}),
-            (True, None, now, 'desc', {}, {}, 'perlnk', {}, {}, {}, {}, now, 
{}),
-            (True, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, {}, {}, now, 
{}),
-            (True, 'name', now, None, {}, {}, 'perlnk', {}, {}, {}, {}, now, 
{}),
-            (True, 'name', now, 'desc', None, {}, 'perlnk', {}, {}, {}, {}, 
now, {}),
-            (True, 'name', now, 'desc', {}, None, 'perlnk', {}, {}, {}, {}, 
now, {}),
-            (True, 'name', now, 'desc', {}, {}, None, {}, {}, {}, {}, now, {}),
-            (True, 'name', now, 'desc', {}, {}, 'perlnk', None, {}, {}, {}, 
now, {}),
-            (True, 'name', now, 'desc', {}, {}, 'perlnk', {}, None, {}, {}, 
now, {}),
-            (True, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, None, {}, 
now, {}),
-            (True, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, {}, None, 
now, {}),
-            (True, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, {}, {}, 
None, {}),
-            (True, 'name', now, 'desc', {}, {}, 'perlnk', {}, {}, {}, {}, now, 
None),
+            (False, m_cls, now, 'desc', [], 'perlnk', {}, {}, [], {}, now, {}),
+            (False, 'name', m_cls, 'desc', [], 'perlnk', {}, {}, [], {}, now, 
{}),
+            (False, 'name', now, m_cls, [], 'perlnk', {}, {}, [], {}, now, {}),
+            (False, 'name', now, 'desc', [], m_cls, {}, {}, [], {}, now, {}),
+            (False, 'name', now, 'desc', [], 'perlnk', m_cls, {}, [], {}, now, 
{}),
+            (False, 'name', now, 'desc', [], 'perlnk', {}, m_cls, [], {}, now, 
{}),
+            (False, 'name', now, 'desc', [], 'perlnk', {}, {}, m_cls, {}, now, 
{}),
+            (False, 'name', now, 'desc', [], 'perlnk', {}, {}, [], m_cls, now, 
{}),
+            (False, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, m_cls, 
{}),
+            (False, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, now, 
m_cls),
+
+            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, now, {}),
+            (True, None, now, 'desc', [], 'perlnk', {}, {}, [], {}, now, {}),
+            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, now, {}),
+            (True, 'name', now, None, [], 'perlnk', {}, {}, [], {}, now, {}),
+            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, now, {}),
+            (True, 'name', now, 'desc', [], None, {}, {}, [], {}, now, {}),
+            (True, 'name', now, 'desc', [], 'perlnk', None, {}, [], {}, now, 
{}),
+            (True, 'name', now, 'desc', [], 'perlnk', {}, None, [], {}, now, 
{}),
+            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], None, now, 
{}),
+            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, None, 
{}),
+            (True, 'name', now, 'desc', [], 'perlnk', {}, {}, [], {}, now, 
None),
         ]
     )
-    def test_deployment_model_creation(self, deployment_storage, is_valid, 
name, created_at,
-                                       description, inputs, groups, permalink, 
policy_triggers,
+    def test_deployment_model_creation(self, service_instance_storage, 
is_valid, name, created_at,
+                                       description, inputs, permalink, 
policy_triggers,
                                        policy_types, outputs, scaling_groups, 
updated_at,
                                        workflows):
-        deployment = _test_model(is_valid=is_valid,
-                                 storage=deployment_storage,
-                                 model_name='deployment',
-                                 model_cls=Deployment,
-                                 model_kwargs=dict(
-                                     name=name,
-                                     
blueprint=deployment_storage.blueprint.list()[0],
-                                     created_at=created_at,
-                                     description=description,
-                                     inputs=inputs,
-                                     groups=groups,
-                                     permalink=permalink,
-                                     policy_triggers=policy_triggers,
-                                     policy_types=policy_types,
-                                     outputs=outputs,
-                                     scaling_groups=scaling_groups,
-                                     updated_at=updated_at,
-                                     workflows=workflows
-                                 ))
+        service_instance = _test_model(
+            is_valid=is_valid,
+            storage=service_instance_storage,
+            model_cls=ServiceInstance,
+            model_kwargs=dict(
+                name=name,
+                
service_template=service_instance_storage.service_template.list()[0],
+                created_at=created_at,
+                description=description,
+                inputs=inputs,
+                permalink=permalink,
+                policy_triggers=policy_triggers,
+                policy_types=policy_types,
+                outputs=outputs,
+                scaling_groups=scaling_groups,
+                updated_at=updated_at,
+                workflows=workflows
+            ))
         if is_valid:
-            assert deployment.blueprint == 
deployment_storage.blueprint.list()[0]
+            assert service_instance.service_template == \
+                   service_instance_storage.service_template.list()[0]
 
 
 class TestExecution(object):
@@ -289,27 +274,27 @@ class TestExecution(object):
             (True, now, now, now, 'error', False, None, Execution.STARTED, 
'wf_name'),
         ]
     )
-    def test_execution_model_creation(self, deployment_storage, is_valid, 
created_at, started_at,
-                                      ended_at, error, is_system_workflow, 
parameters, status,
-                                      workflow_name):
-        execution = _test_model(is_valid=is_valid,
-                                storage=deployment_storage,
-                                model_name='execution',
-                                model_cls=Execution,
-                                model_kwargs=dict(
-                                    
deployment=deployment_storage.deployment.list()[0],
-                                    created_at=created_at,
-                                    started_at=started_at,
-                                    ended_at=ended_at,
-                                    error=error,
-                                    is_system_workflow=is_system_workflow,
-                                    parameters=parameters,
-                                    status=status,
-                                    workflow_name=workflow_name,
-                                ))
+    def test_execution_model_creation(self, service_instance_storage, 
is_valid, created_at,
+                                      started_at, ended_at, error, 
is_system_workflow, parameters,
+                                      status, workflow_name):
+        execution = _test_model(
+            is_valid=is_valid,
+            storage=service_instance_storage,
+            model_cls=Execution,
+            model_kwargs=dict(
+                
service_instance=service_instance_storage.service_instance.list()[0],
+                created_at=created_at,
+                started_at=started_at,
+                ended_at=ended_at,
+                error=error,
+                is_system_workflow=is_system_workflow,
+                parameters=parameters,
+                status=status,
+                workflow_name=workflow_name,
+            ))
         if is_valid:
-            assert execution.deployment == 
deployment_storage.deployment.list()[0]
-            assert execution.blueprint == 
deployment_storage.blueprint.list()[0]
+            assert execution.service_instance == 
service_instance_storage.service_instance.list()[0]
+            assert execution.service_template == 
service_instance_storage.service_template.list()[0]
 
     def test_execution_status_transition(self):
         def create_execution(status):
@@ -376,10 +361,11 @@ class TestExecution(object):
                     execution.status = transitioned_status
 
 
-class TestDeploymentUpdate(object):
+class TestServiceInstanceUpdate(object):
     @pytest.mark.parametrize(
-        'is_valid, created_at, deployment_plan, 
deployment_update_node_instances, '
-        'deployment_update_deployment, deployment_update_nodes, 
modified_entity_ids, state',
+        'is_valid, created_at, deployment_plan, 
service_instance_update_node_instances, '
+        'service_instance_update_service_instance, 
service_instance_update_nodes, '
+        'modified_entity_ids, state',
         [
             (False, m_cls, {}, {}, {}, [], {}, 'state'),
             (False, now, m_cls, {}, {}, [], {}, 'state'),
@@ -397,74 +383,74 @@ class TestDeploymentUpdate(object):
             (True, now, {}, {}, {}, [], {}, None),
         ]
     )
-    def test_deployment_update_model_creation(self, deployment_storage, 
is_valid, created_at,
-                                              deployment_plan, 
deployment_update_node_instances,
-                                              deployment_update_deployment, 
deployment_update_nodes,
-                                              modified_entity_ids, state):
-        deployment_update = _test_model(
+    def test_service_instance_update_model_creation(
+            self, service_instance_storage, is_valid, created_at, 
deployment_plan,
+            service_instance_update_node_instances, 
service_instance_update_service_instance,
+            service_instance_update_nodes, modified_entity_ids, state):
+        service_instance_update = _test_model(
             is_valid=is_valid,
-            storage=deployment_storage,
-            model_name='deployment_update',
-            model_cls=DeploymentUpdate,
+            storage=service_instance_storage,
+            model_cls=ServiceInstanceUpdate,
             model_kwargs=dict(
-                deployment=deployment_storage.deployment.list()[0],
+                
service_instance=service_instance_storage.service_instance.list()[0],
                 created_at=created_at,
-                deployment_plan=deployment_plan,
-                
deployment_update_node_instances=deployment_update_node_instances,
-                deployment_update_deployment=deployment_update_deployment,
-                deployment_update_nodes=deployment_update_nodes,
+                service_instance_plan=deployment_plan,
+                
service_instance_update_node_instances=service_instance_update_node_instances,
+                
service_instance_update_service_instance=service_instance_update_service_instance,
+                service_instance_update_nodes=service_instance_update_nodes,
                 modified_entity_ids=modified_entity_ids,
                 state=state,
             ))
         if is_valid:
-            assert deployment_update.deployment == 
deployment_storage.deployment.list()[0]
+            assert service_instance_update.service_instance == \
+                   service_instance_storage.service_instance.list()[0]
 
 
-class TestDeploymentUpdateStep(object):
+class TestServiceInstanceUpdateStep(object):
 
     @pytest.mark.parametrize(
         'is_valid, action, entity_id, entity_type',
         [
-            (False, m_cls, 'id', DeploymentUpdateStep.ENTITY_TYPES.NODE),
-            (False, DeploymentUpdateStep.ACTION_TYPES.ADD, m_cls,
-             DeploymentUpdateStep.ENTITY_TYPES.NODE),
-            (False, DeploymentUpdateStep.ACTION_TYPES.ADD, 'id', m_cls),
+            (False, m_cls, 'id', ServiceInstanceUpdateStep.ENTITY_TYPES.NODE),
+            (False, ServiceInstanceUpdateStep.ACTION_TYPES.ADD, m_cls,
+             ServiceInstanceUpdateStep.ENTITY_TYPES.NODE),
+            (False, ServiceInstanceUpdateStep.ACTION_TYPES.ADD, 'id', m_cls),
 
-            (True, DeploymentUpdateStep.ACTION_TYPES.ADD, 'id',
-             DeploymentUpdateStep.ENTITY_TYPES.NODE)
+            (True, ServiceInstanceUpdateStep.ACTION_TYPES.ADD, 'id',
+             ServiceInstanceUpdateStep.ENTITY_TYPES.NODE)
         ]
     )
-    def test_deployment_update_step_model_creation(self, 
deployment_update_storage, is_valid,
+    def test_deployment_update_step_model_creation(self, 
service_instance_update_storage, is_valid,
                                                    action, entity_id, 
entity_type):
-        deployment_update_step = _test_model(
+        service_instance_update_step = _test_model(
             is_valid=is_valid,
-            storage=deployment_update_storage,
-            model_name='deployment_update_step',
-            model_cls=DeploymentUpdateStep,
+            storage=service_instance_update_storage,
+            model_cls=ServiceInstanceUpdateStep,
             model_kwargs=dict(
-                
deployment_update=deployment_update_storage.deployment_update.list()[0],
+                service_instance_update=
+                
service_instance_update_storage.service_instance_update.list()[0],
                 action=action,
                 entity_id=entity_id,
                 entity_type=entity_type
             ))
         if is_valid:
-            assert deployment_update_step.deployment_update == \
-                  deployment_update_storage.deployment_update.list()[0]
+            assert service_instance_update_step.service_instance_update == \
+                   
service_instance_update_storage.service_instance_update.list()[0]
 
     def test_deployment_update_step_order(self):
-        add_node = DeploymentUpdateStep(
+        add_node = ServiceInstanceUpdateStep(
             id='add_step',
             action='add',
             entity_type='node',
             entity_id='node_id')
 
-        modify_node = DeploymentUpdateStep(
+        modify_node = ServiceInstanceUpdateStep(
             id='modify_step',
             action='modify',
             entity_type='node',
             entity_id='node_id')
 
-        remove_node = DeploymentUpdateStep(
+        remove_node = ServiceInstanceUpdateStep(
             id='remove_step',
             action='remove',
             entity_type='node',
@@ -476,13 +462,13 @@ class TestDeploymentUpdateStep(object):
         assert remove_node < modify_node < add_node
         assert not remove_node > modify_node > add_node
 
-        add_rel = DeploymentUpdateStep(
+        add_rel = ServiceInstanceUpdateStep(
             id='add_step',
             action='add',
             entity_type='relationship',
             entity_id='relationship_id')
 
-        remove_rel = DeploymentUpdateStep(
+        remove_rel = ServiceInstanceUpdateStep(
             id='remove_step',
             action='remove',
             entity_type='relationship',
@@ -494,140 +480,84 @@ class TestDeploymentUpdateStep(object):
 
 class TestDeploymentModification(object):
     @pytest.mark.parametrize(
-        'is_valid, context, created_at, ended_at, modified_nodes, 
node_instances, status',
+        'is_valid, context, created_at, ended_at, modified_node_templates, 
nodes, status',
         [
-            (False, m_cls, now, now, {}, {}, DeploymentModification.STARTED),
-            (False, {}, m_cls, now, {}, {}, DeploymentModification.STARTED),
-            (False, {}, now, m_cls, {}, {}, DeploymentModification.STARTED),
-            (False, {}, now, now, m_cls, {}, DeploymentModification.STARTED),
-            (False, {}, now, now, {}, m_cls, DeploymentModification.STARTED),
+            (False, m_cls, now, now, {}, {}, 
ServiceInstanceModification.STARTED),
+            (False, {}, m_cls, now, {}, {}, 
ServiceInstanceModification.STARTED),
+            (False, {}, now, m_cls, {}, {}, 
ServiceInstanceModification.STARTED),
+            (False, {}, now, now, m_cls, {}, 
ServiceInstanceModification.STARTED),
+            (False, {}, now, now, {}, m_cls, 
ServiceInstanceModification.STARTED),
             (False, {}, now, now, {}, {}, m_cls),
 
-            (True, {}, now, now, {}, {}, DeploymentModification.STARTED),
-            (True, {}, now, None, {}, {}, DeploymentModification.STARTED),
-            (True, {}, now, now, None, {}, DeploymentModification.STARTED),
-            (True, {}, now, now, {}, None, DeploymentModification.STARTED),
+            (True, {}, now, now, {}, {}, ServiceInstanceModification.STARTED),
+            (True, {}, now, None, {}, {}, ServiceInstanceModification.STARTED),
+            (True, {}, now, now, None, {}, 
ServiceInstanceModification.STARTED),
+            (True, {}, now, now, {}, None, 
ServiceInstanceModification.STARTED),
         ]
     )
-    def test_deployment_modification_model_creation(self, deployment_storage, 
is_valid, context,
-                                                    created_at, ended_at, 
modified_nodes,
-                                                    node_instances, status):
+    def test_deployment_modification_model_creation(
+            self, service_instance_storage, is_valid, context, created_at, 
ended_at,
+            modified_node_templates, nodes, status):
         deployment_modification = _test_model(
             is_valid=is_valid,
-            storage=deployment_storage,
-            model_name='deployment_modification',
-            model_cls=DeploymentModification,
+            storage=service_instance_storage,
+            model_cls=ServiceInstanceModification,
             model_kwargs=dict(
-                deployment=deployment_storage.deployment.list()[0],
+                
service_instance=service_instance_storage.service_instance.list()[0],
                 context=context,
                 created_at=created_at,
                 ended_at=ended_at,
-                modified_nodes=modified_nodes,
-                node_instances=node_instances,
+                modified_nodes=modified_node_templates,
+                node_instances=nodes,
                 status=status,
             ))
         if is_valid:
-            assert deployment_modification.deployment == 
deployment_storage.deployment.list()[0]
+            assert deployment_modification.service_instance == \
+                   service_instance_storage.service_instance.list()[0]
 
 
-class TestNode(object):
+class TestNodeTemplate(object):
     @pytest.mark.parametrize(
-        'is_valid, name, deploy_number_of_instances, max_number_of_instances, '
-        'min_number_of_instances, number_of_instances, 
planned_number_of_instances, plugins, '
-        'properties, operations, type, type_hierarchy',
+        'is_valid, name, default_instances, max_instances, min_instances, 
plugins, properties, '
+        'type_name, type_hierarchy',
         [
-            (False, m_cls, 1, 1, 1, 1, 1, [], {}, {}, 'type', []),
-            (False, 'name', m_cls, 1, 1, 1, 1, [], {}, {}, 'type', []),
-            (False, 'name', 1, m_cls, 1, 1, 1, [], {}, {}, 'type', []),
-            (False, 'name', 1, 1, m_cls, 1, 1, [], {}, {}, 'type', []),
-            (False, 'name', 1, 1, 1, m_cls, 1, [], {}, {}, 'type', []),
-            (False, 'name', 1, 1, 1, 1, m_cls, [], {}, {}, 'type', []),
-            (False, 'name', 1, 1, 1, 1, 1, m_cls, {}, {}, 'type', []),
-            (False, 'name', 1, 1, 1, 1, 1, [], m_cls, {}, 'type', []),
-            (False, 'name', 1, 1, 1, 1, 1, [], {}, m_cls, 'type', []),
-            (False, 'name', 1, 1, 1, 1, 1, [], {}, {}, m_cls, []),
-            (False, 'name', 1, 1, 1, 1, 1, [], {}, {}, 'type', m_cls),
-
-            (True, 'name', 1, 1, 1, 1, 1, [], {}, {}, 'type', []),
-            (True, 'name', 1, 1, 1, 1, 1, None, {}, {}, 'type', []),
-            (True, 'name', 1, 1, 1, 1, 1, [], None, {}, 'type', []),
-            (True, 'name', 1, 1, 1, 1, 1, [], {}, None, 'type', []),
-            (True, 'name', 1, 1, 1, 1, 1, [], {}, {}, 'type', None),
+            (False, m_cls, 1, 1, 1, [], [], 'type', []),
+            (False, 'name', m_cls, 1, 1, [], [], 'type', []),
+            (False, 'name', 1, m_cls, 1, [], [], 'type', []),
+            (False, 'name', 1, 1, m_cls, [], [], 'type', []),
+            (False, 'name', 1, 1, 1, m_cls, [], 'type', []),
+            (False, 'name', 1, 1, 1, [], [], m_cls, []),
+            (False, 'name', 1, 1, 1, [], [], 'type', m_cls),
+            #
+            (True, 'name', 1, 1, 1, [], [], 'type', []),
+            (True, 'name', 1, 1, 1, None, [], 'type', []),
+            (True, 'name', 1, 1, 1, [], [], 'type', None),
         ]
     )
-    def test_node_model_creation(self, deployment_storage, is_valid, name,
-                                 deploy_number_of_instances, 
max_number_of_instances,
-                                 min_number_of_instances, number_of_instances,
-                                 planned_number_of_instances, plugins,
-                                 properties, operations, type, type_hierarchy):
-        node = _test_model(
+    def test_node_model_creation(self, service_instance_storage, is_valid, 
name,
+                                 default_instances, max_instances, 
min_instances, plugins,
+                                 properties, type_name, type_hierarchy):
+        node_template = _test_model(
             is_valid=is_valid,
-            storage=deployment_storage,
-            model_name='node',
-            model_cls=Node,
+            storage=service_instance_storage,
+            model_cls=NodeTemplate,
             model_kwargs=dict(
                 name=name,
-                deploy_number_of_instances=deploy_number_of_instances,
-                max_number_of_instances=max_number_of_instances,
-                min_number_of_instances=min_number_of_instances,
-                number_of_instances=number_of_instances,
-                planned_number_of_instances=planned_number_of_instances,
+                default_instances=default_instances,
+                max_instances=max_instances,
+                min_instances=min_instances,
                 plugins=plugins,
                 properties=properties,
-                operations=operations,
-                type=type,
+                type_name=type_name,
                 type_hierarchy=type_hierarchy,
-                deployment=deployment_storage.deployment.list()[0]
+                
service_template=service_instance_storage.service_template.list()[0]
             ))
         if is_valid:
-            assert node.deployment == deployment_storage.deployment.list()[0]
+            assert node_template.service_template == \
+                   service_instance_storage.service_template.list()[0]
 
 
-class TestRelationship(object):
-    @pytest.mark.parametrize(
-        'is_valid, source_interfaces, source_operations, target_interfaces, 
target_operations, '
-        'type, type_hierarchy, properties',
-        [
-            (False, m_cls, {}, {}, {}, 'type', [], {}),
-            (False, {}, m_cls, {}, {}, 'type', [], {}),
-            (False, {}, {}, m_cls, {}, 'type', [], {}),
-            (False, {}, {}, {}, m_cls, 'type', [], {}),
-            (False, {}, {}, {}, {}, m_cls, [], {}),
-            (False, {}, {}, {}, {}, 'type', m_cls, {}),
-            (False, {}, {}, {}, {}, 'type', [], m_cls),
-
-            (True, {}, {}, {}, {}, 'type', [], {}),
-            (True, None, {}, {}, {}, 'type', [], {}),
-            (True, {}, {}, None, {}, 'type', [], {}),
-            (True, {}, {}, {}, {}, 'type', None, {}),
-            (True, {}, {}, {}, {}, 'type', [], None),
-        ]
-        )
-    def test_relationship_model_ceration(self, nodes_storage, is_valid, 
source_interfaces,
-                                         source_operations, target_interfaces, 
target_operations,
-                                         type, type_hierarchy, properties):
-        relationship = _test_model(
-            is_valid=is_valid,
-            storage=nodes_storage,
-            model_name='relationship',
-            model_cls=Relationship,
-            model_kwargs=dict(
-                source_node=nodes_storage.node.list()[1],
-                target_node=nodes_storage.node.list()[0],
-                source_interfaces=source_interfaces,
-                source_operations=source_operations,
-                target_interfaces=target_interfaces,
-                target_operations=target_operations,
-                type=type,
-                type_hierarchy=type_hierarchy,
-                properties=properties,
-            ))
-        if is_valid:
-            assert relationship.source_node == nodes_storage.node.list()[1]
-            assert relationship.target_node == nodes_storage.node.list()[0]
-
-
-class TestNodeInstance(object):
+class TestNode(object):
     @pytest.mark.parametrize(
         'is_valid, name, runtime_properties, scaling_groups, state, version',
         [
@@ -644,94 +574,90 @@ class TestNodeInstance(object):
             (True, 'name', {}, [], 'state', None),
         ]
     )
-    def test_node_instance_model_creation(self, node_storage, is_valid, name, 
runtime_properties,
-                                          scaling_groups, state, version):
+    def test_node_instance_model_creation(self, node_template_storage, 
is_valid, name,
+                                          runtime_properties, scaling_groups, 
state, version):
         node_instance = _test_model(
             is_valid=is_valid,
-            storage=node_storage,
-            model_name='node_instance',
-            model_cls=NodeInstance,
+            storage=node_template_storage,
+            model_cls=Node,
             model_kwargs=dict(
-                node=node_storage.node.list()[0],
+                node_template=node_template_storage.node_template.list()[0],
                 name=name,
                 runtime_properties=runtime_properties,
                 scaling_groups=scaling_groups,
                 state=state,
                 version=version,
+                
service_instance=node_template_storage.service_instance.list()[0]
             ))
         if is_valid:
-            assert node_instance.node == node_storage.node.list()[0]
-            assert node_instance.deployment == 
node_storage.deployment.list()[0]
+            assert node_instance.node_template == 
node_template_storage.node_template.list()[0]
+            assert node_instance.service_instance == \
+                   node_template_storage.service_instance.list()[0]
 
 
 class TestNodeInstanceIP(object):
 
     ip = '1.1.1.1'
 
-    def test_ip_on_none_hosted_node_instance(self, deployment_storage):
-        node = self._node(deployment_storage, ip='not considered')
-        node_instance = self._node_instance(deployment_storage, node,
-                                            is_host=False,
-                                            ip='not considered')
-        assert node_instance.ip is None
-
-    def test_property_ip_on_host_node_instance(self, deployment_storage):
-        node = self._node(deployment_storage, ip=self.ip)
-        node_instance = self._node_instance(deployment_storage, node,
-                                            is_host=True,
-                                            ip=None)
-        assert node_instance.ip == self.ip
-
-    def test_runtime_property_ip_on_host_node_instance(self, 
deployment_storage):
-        node = self._node(deployment_storage, ip='not considered')
-        node_instance = self._node_instance(deployment_storage, node,
-                                            is_host=True,
-                                            ip=self.ip)
-        assert node_instance.ip == self.ip
-
-    def test_no_ip_configured_on_host_node_instance(self, deployment_storage):
-        node = self._node(deployment_storage, ip=None)
-        node_instance = self._node_instance(deployment_storage, node,
-                                            is_host=True,
-                                            ip=None)
-        assert node_instance.ip is None
-
-    def test_runtime_property_on_hosted_node_instance(self, 
deployment_storage):
-        host_node = self._node(deployment_storage, ip=None)
-        host_node_instance = self._node_instance(deployment_storage, host_node,
-                                                 is_host=True,
-                                                 ip=self.ip)
-        node = self._node(deployment_storage, ip=None)
-        node_instance = self._node_instance(deployment_storage, node,
-                                            is_host=False,
-                                            ip=None,
-                                            host_fk=host_node_instance.id)
-        assert node_instance.ip == self.ip
-
-    def _node(self, storage, ip):
+    def test_ip_on_none_hosted_node_instance(self, service_instance_storage):
+        node_template = self._node_template(service_instance_storage, ip='not 
considered')
+        node = self._node(service_instance_storage,
+                          node_template,
+                          is_host=False,
+                          ip='not considered')
+        assert node.ip is None
+
+    def test_property_ip_on_host_node_instance(self, service_instance_storage):
+        node_template = self._node_template(service_instance_storage, 
ip=self.ip)
+        node = self._node(service_instance_storage, node_template, 
is_host=True, ip=None)
+        assert node.ip == self.ip
+
+    def test_runtime_property_ip_on_host_node_instance(self, 
service_instance_storage):
+        node_template = self._node_template(service_instance_storage, ip='not 
considered')
+        node = self._node(service_instance_storage, node_template, 
is_host=True, ip=self.ip)
+        assert node.ip == self.ip
+
+    def test_no_ip_configured_on_host_node_instance(self, 
service_instance_storage):
+        node_template = self._node_template(service_instance_storage, ip=None)
+        node = self._node(service_instance_storage, node_template, 
is_host=True, ip=None)
+        assert node.ip is None
+
+    def test_runtime_property_on_hosted_node_instance(self, 
service_instance_storage):
+        host_node_template = self._node_template(service_instance_storage, 
ip=None)
+        host_node = self._node(service_instance_storage,
+                               host_node_template,
+                               is_host=True,
+                               ip=self.ip)
+        node_template = self._node_template(service_instance_storage, ip=None)
+        node = self._node(service_instance_storage,
+                          node_template,
+                          is_host=False,
+                          ip=None,
+                          host_fk=host_node.id)
+        assert node.ip == self.ip
+
+    def _node_template(self, storage, ip):
         kwargs = dict(
-            name='node',
-            deploy_number_of_instances=1,
-            max_number_of_instances=1,
-            min_number_of_instances=1,
-            number_of_instances=1,
-            planned_number_of_instances=1,
-            properties={},
-            type='',
-            deployment=storage.deployment.list()[0]
+            name='node_template',
+            default_instances=1,
+            max_instances=1,
+            min_instances=1,
+            type_name='',
+            service_template=storage.service_template.list()[0]
         )
         if ip:
-            kwargs['properties']['ip'] = ip
-        node = Node(**kwargs)
-        storage.node.put(node)
+            kwargs['properties'] = [Parameter(name='ip', type='str', 
str_value=str(ip))]
+        node = NodeTemplate(**kwargs)
+        storage.node_template.put(node)
         return node
 
-    def _node_instance(self, storage, node, is_host, ip, host_fk=None):
+    def _node(self, storage, node, is_host, ip, host_fk=None):
         kwargs = dict(
-            name='node_instance',
-            node=node,
+            name='node',
+            node_template=node,
             runtime_properties={},
-            state=''
+            state='',
+            service_instance=storage.service_instance.list()[0]
         )
         if ip:
             kwargs['runtime_properties']['ip'] = ip
@@ -739,27 +665,26 @@ class TestNodeInstanceIP(object):
             kwargs['host_fk'] = 1
         elif host_fk:
             kwargs['host_fk'] = host_fk
-        node_instance = NodeInstance(**kwargs)
-        storage.node_instance.put(node_instance)
+        node_instance = Node(**kwargs)
+        storage.node.put(node_instance)
         return node_instance
 
 
+@pytest.mark.skip('Should be reworked into relationship')
 class TestRelationshipInstance(object):
-    def test_relatiship_instance_model_creation(self, node_instances_storage):
+    def test_relatiship_instance_model_creation(self, nodes_storage):
         relationship = mock.models.get_relationship(
-            
source=node_instances_storage.node.get_by_name(mock.models.DEPENDENT_NODE_NAME),
-            
target=node_instances_storage.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
+            
target=nodes_storage.node.get_by_name(mock.models.DEPENDENCY_NODE_NAME)
         )
-        node_instances_storage.relationship.put(relationship)
-        node_instances = node_instances_storage.node_instance
+        nodes_storage.relationship.put(relationship)
+        node_instances = nodes_storage.node
         source_node_instance = 
node_instances.get_by_name(mock.models.DEPENDENT_NODE_INSTANCE_NAME)
         target_node_instance = 
node_instances.get_by_name(mock.models.DEPENDENCY_NODE_INSTANCE_NAME)
 
         relationship_instance = _test_model(
             is_valid=True,
-            storage=node_instances_storage,
-            model_name='relationship_instance',
-            model_cls=RelationshipInstance,
+            storage=nodes_storage,
+            model_cls=Relationship,
             model_kwargs=dict(
                 relationship=relationship,
                 source_node_instance=source_node_instance,
@@ -827,7 +752,6 @@ class TestPlugin(object):
                                    supported_platform, supported_py_versions, 
uploaded_at, wheels):
         _test_model(is_valid=is_valid,
                     storage=empty_storage,
-                    model_name='plugin',
                     model_cls=Plugin,
                     model_kwargs=dict(
                         archive_name=archive_name,
@@ -881,7 +805,6 @@ class TestTask(object):
         task = _test_model(
             is_valid=is_valid,
             storage=execution_storage,
-            model_name='task',
             model_cls=Task,
             model_kwargs=dict(
                 status=status,
@@ -894,7 +817,7 @@ class TestTask(object):
                 retry_interval=retry_interval,
                 ignore_failure=ignore_failure,
                 name=name,
-                operation_mapping=operation_mapping,
+                implementation=operation_mapping,
                 inputs=inputs,
                 plugin_fk=plugin_id,
             ))
@@ -907,7 +830,7 @@ class TestTask(object):
         def create_task(max_attempts):
             Task(execution_fk='eid',
                  name='name',
-                 operation_mapping='',
+                 implementation='',
                  inputs={},
                  max_attempts=max_attempts)
         create_task(max_attempts=1)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/b6193359/tests/storage/test_structures.py
----------------------------------------------------------------------
diff --git a/tests/storage/test_structures.py b/tests/storage/test_structures.py
index 4127905..30f0064 100644
--- a/tests/storage/test_structures.py
+++ b/tests/storage/test_structures.py
@@ -20,23 +20,23 @@ import sqlalchemy
 from aria.storage import (
     ModelStorage,
     sql_mapi,
-    model,
+    exceptions,
     type,
-    exceptions
+    modeling,
 )
 
 from ..storage import release_sqlite_storage, structure, 
init_inmemory_model_storage
 from . import MockModel
 from ..mock import (
     models,
-    operations,
     context as mock_context
 )
 
 
 @pytest.fixture
 def storage():
-    base_storage = ModelStorage(sql_mapi.SQLAlchemyModelAPI, 
initiator=init_inmemory_model_storage)
+    base_storage = ModelStorage(sql_mapi.SQLAlchemyModelAPI,
+                                initiator=init_inmemory_model_storage)
     base_storage.register(MockModel)
     yield base_storage
     release_sqlite_storage(base_storage)
@@ -44,7 +44,7 @@ def storage():
 
 @pytest.fixture(scope='module', autouse=True)
 def module_cleanup():
-    model.DeclarativeBase.metadata.remove(MockModel.__table__)  #pylint: 
disable=no-member
+    modeling.model.aria_declarative_base.metadata.remove(MockModel.__table__)  
#pylint: disable=no-member
 
 
 @pytest.fixture
@@ -89,144 +89,87 @@ def test_inner_list_update(storage):
 
 
 def test_model_to_dict(context):
-    deployment = context.deployment
-    deployment_dict = deployment.to_dict()
+    service_instance = context.service_instance
+    service_instance = service_instance.to_dict()
 
     expected_keys = [
-        'created_at',
         'description',
-        'inputs',
-        'groups',
+        '_metadata',
+        'created_at',
         'permalink',
         'policy_triggers',
         'policy_types',
-        'outputs',
         'scaling_groups',
         'updated_at',
         'workflows',
-        'blueprint_name',
     ]
 
     for expected_key in expected_keys:
-        assert expected_key in deployment_dict
-
-    assert 'blueprint_fk' not in deployment_dict
+        assert expected_key in service_instance
 
 
 def test_relationship_model_ordering(context):
-    deployment = context.model.deployment.get_by_name(models.DEPLOYMENT_NAME)
-    source_node = context.model.node.get_by_name(models.DEPENDENT_NODE_NAME)
-    source_node_instance = context.model.node_instance.get_by_name(
-        models.DEPENDENT_NODE_INSTANCE_NAME)
-    target_node = context.model.node.get_by_name(models.DEPENDENCY_NODE_NAME)
-    target_node_instance = context.model.node_instance.get_by_name(
-        models.DEPENDENCY_NODE_INSTANCE_NAME)
-    new_node = model.Node(
+    service_instance = 
context.model.service_instance.get_by_name(models.DEPLOYMENT_NAME)
+    source_node = 
context.model.node.get_by_name(models.DEPENDENT_NODE_INSTANCE_NAME)
+    target_node = 
context.model.node.get_by_name(models.DEPENDENCY_NODE_INSTANCE_NAME)
+    new_node_template = modeling.model.NodeTemplate(
         name='new_node',
-        type='test_node_type',
-        type_hierarchy=[],
-        number_of_instances=1,
-        planned_number_of_instances=1,
-        deploy_number_of_instances=1,
-        properties={},
-        operations=dict((key, {}) for key in operations.NODE_OPERATIONS),
-        min_number_of_instances=1,
-        max_number_of_instances=1,
-        deployment=deployment
-    )
-    source_to_new_relationship = model.Relationship(
-        source_node=source_node,
-        target_node=new_node,
-        source_interfaces={},
-        source_operations=dict((key, {}) for key in 
operations.RELATIONSHIP_OPERATIONS),
-        target_interfaces={},
-        target_operations=dict((key, {}) for key in 
operations.RELATIONSHIP_OPERATIONS),
-        type='rel_type',
+        type_name='test_node_type',
         type_hierarchy=[],
-        properties={},
+        default_instances=1,
+        min_instances=1,
+        max_instances=1,
+        service_template=service_instance.service_template
     )
-    new_node_instance = model.NodeInstance(
+    new_node = modeling.model.Node(
         name='new_node_instance',
         runtime_properties={},
+        service_instance=service_instance,
         version=None,
-        node=new_node,
+        node_template=new_node_template,
         state='',
         scaling_groups=[]
     )
-    source_to_new_relationship_instance = model.RelationshipInstance(
-        relationship=source_to_new_relationship,
-        source_node_instance=source_node_instance,
-        target_node_instance=new_node_instance,
+
+    source_to_new_relationship = modeling.model.Relationship(
+        target_node=new_node,
+        source_node=source_node,
     )
 
-    new_to_target_relationship = model.Relationship(
+    new_to_target_relationship = modeling.model.Relationship(
         source_node=new_node,
         target_node=target_node,
-        source_interfaces={},
-        source_operations=dict((key, {}) for key in 
operations.RELATIONSHIP_OPERATIONS),
-        target_interfaces={},
-        target_operations=dict((key, {}) for key in 
operations.RELATIONSHIP_OPERATIONS),
-        type='rel_type',
-        type_hierarchy=[],
-        properties={},
-    )
-    new_to_target_relationship_instance = model.RelationshipInstance(
-        relationship=new_to_target_relationship,
-        source_node_instance=new_node_instance,
-        target_node_instance=target_node_instance,
     )
 
+    context.model.node_template.put(new_node_template)
     context.model.node.put(new_node)
-    context.model.node_instance.put(new_node_instance)
     context.model.relationship.put(source_to_new_relationship)
     context.model.relationship.put(new_to_target_relationship)
-    
context.model.relationship_instance.put(source_to_new_relationship_instance)
-    
context.model.relationship_instance.put(new_to_target_relationship_instance)
 
-    def flip_and_assert(node_instance, direction):
+    def flip_and_assert(node, direction):
         """
         Reversed the order of relationships and assert effects took place.
-        :param node_instance: the node instance to operatate on
+        :param node: the node instance to operatate on
         :param direction: the type of relationships to flip (inbound/outbount)
         :return:
         """
         assert direction in ('inbound', 'outbound')
 
-        relationships = getattr(node_instance.node, direction + 
'_relationships')
-        relationship_instances = getattr(node_instance, direction + 
'_relationship_instances')
+        relationships = getattr(node, direction + '_relationships').all()
         assert len(relationships) == 2
-        assert len(relationship_instances) == 2
-
-        first_rel, second_rel = relationships
-        first_rel_instance, second_rel_instance = relationship_instances
-        assert getattr(first_rel, relationships.ordering_attr) == 0
-        assert getattr(second_rel, relationships.ordering_attr) == 1
-        assert getattr(first_rel_instance, 
relationship_instances.ordering_attr) == 0
-        assert getattr(second_rel_instance, 
relationship_instances.ordering_attr) == 1
-
-        reversed_relationships = list(reversed(relationships))
-        reversed_relationship_instances = 
list(reversed(relationship_instances))
-
-        assert relationships != reversed_relationships
-        assert relationship_instances != reversed_relationship_instances
-
-        relationships[:] = reversed_relationships
-        relationship_instances[:] = reversed_relationship_instances
-        context.model.node_instance.update(node_instance)
 
-        assert relationships == reversed_relationships
-        assert relationship_instances == reversed_relationship_instances
+        reversed_relationship_instances = list(reversed(relationships))
+        assert relationships != reversed_relationship_instances
 
-        assert getattr(first_rel, relationships.ordering_attr) == 1
-        assert getattr(second_rel, relationships.ordering_attr) == 0
-        assert getattr(first_rel_instance, 
relationship_instances.ordering_attr) == 1
-        assert getattr(second_rel_instance, 
relationship_instances.ordering_attr) == 0
+        relationships[:] = reversed_relationship_instances
+        context.model.node.update(node)
+        assert relationships == reversed_relationship_instances
 
-    flip_and_assert(source_node_instance, 'outbound')
-    flip_and_assert(target_node_instance, 'inbound')
+    flip_and_assert(source_node, 'outbound')
+    flip_and_assert(target_node, 'inbound')
 
 
-class StrictClass(model.DeclarativeBase, structure.ModelMixin):
+class StrictClass(modeling.model.aria_declarative_base, structure.ModelMixin):
     __tablename__ = 'strict_class'
 
     strict_dict = sqlalchemy.Column(type.StrictDict(basestring, basestring))

Reply via email to