You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ariatosca.apache.org by mx...@apache.org on 2017/07/27 11:28:54 UTC

incubator-ariatosca git commit: removed singleton, added ability to extend the issue list, and fixed issue relating the cpability/requirement instantiation

Repository: incubator-ariatosca
Updated Branches:
  refs/heads/ARIA-174-Refactor-instantiation-phase 4bdf57c7b -> fcc6b9c6e


removed singleton, added ability to extend the issue list, and fixed issue relating the cpability/requirement instantiation


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

Branch: refs/heads/ARIA-174-Refactor-instantiation-phase
Commit: fcc6b9c6e42b083dff90cf36f521eabfd5272abe
Parents: 4bdf57c
Author: max-orlov <ma...@gigaspaces.com>
Authored: Thu Jul 27 14:28:49 2017 +0300
Committer: max-orlov <ma...@gigaspaces.com>
Committed: Thu Jul 27 14:28:49 2017 +0300

----------------------------------------------------------------------
 aria/cli/commands/service_templates.py    |  4 ++--
 aria/cli/commands/services.py             |  4 ++--
 aria/core.py                              |  7 +++----
 aria/orchestrator/topology/__init__.py    |  3 ---
 aria/orchestrator/topology/instance.py    | 12 ++++++++++--
 aria/orchestrator/topology/template.py    | 14 ++++----------
 aria/parser/consumption/consumer.py       |  6 +++++-
 aria/parser/consumption/modeling.py       |  2 +-
 aria/parser/validation/issue.py           |  4 ++++
 tests/instantiation/test_configuration.py | 15 ++++++++-------
 10 files changed, 39 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fcc6b9c6/aria/cli/commands/service_templates.py
----------------------------------------------------------------------
diff --git a/aria/cli/commands/service_templates.py b/aria/cli/commands/service_templates.py
index d1a9479..6eef97a 100644
--- a/aria/cli/commands/service_templates.py
+++ b/aria/cli/commands/service_templates.py
@@ -73,9 +73,9 @@ def show(service_template_name, model_storage, mode_full, mode_types, format_jso
         elif format_yaml:
             console.puts(formatting.yaml_dumps(collections.prune(service_template.as_raw)))
         else:
-            logger.info(topology.handler.dump(service_template))
+            logger.info(topology.Handler().dump(service_template))
     elif mode_types:
-        logger.info(topology.handler.dump_types(service_template=service_template))
+        logger.info(topology.Handler().dump_types(service_template=service_template))
     else:
         logger.info('Showing service template {0}...'.format(service_template_name))
         service_template_dict = service_template.to_dict()

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fcc6b9c6/aria/cli/commands/services.py
----------------------------------------------------------------------
diff --git a/aria/cli/commands/services.py b/aria/cli/commands/services.py
index 43faf37..93bea7f 100644
--- a/aria/cli/commands/services.py
+++ b/aria/cli/commands/services.py
@@ -74,9 +74,9 @@ def show(service_name, model_storage, mode_full, mode_graph, format_json, format
         elif format_yaml:
             console.puts(formatting.yaml_dumps(collections.prune(service.as_raw)))
         else:
-            logger.info(topology.handler.dump(service))
+            logger.info(topology.Handler().dump(service))
     elif mode_graph:
-        logger.info(topology.handler.dump_graph(service))
+        logger.info(topology.Handler().dump_graph(service))
     else:
         logger.info('Showing service {0}...'.format(service_name))
         service_dict = service.to_dict()

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fcc6b9c6/aria/core.py
----------------------------------------------------------------------
diff --git a/aria/core.py b/aria/core.py
index 0870bac..444bcb9 100644
--- a/aria/core.py
+++ b/aria/core.py
@@ -87,10 +87,9 @@ class Core(object):
             handler.configure_operations(service)
             handler.coerce(service)
 
-            # TODO: fix this
-            # if context.validation.dump_issues():
-            #     raise exceptions.InstantiationError('Failed to instantiate service template `{0}`'
-            #                                         .format(service_template.name))
+            if handler.dump_issues():
+                raise exceptions.InstantiationError('Failed to instantiate service template `{0}`'
+                                                    .format(service_template.name))
 
         storage_session.flush()  # flushing so service.id would auto-populate
         service.name = service_name or '{0}_{1}'.format(service_template.name, service.id)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fcc6b9c6/aria/orchestrator/topology/__init__.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/topology/__init__.py b/aria/orchestrator/topology/__init__.py
index afb7d22..1ba12aa 100644
--- a/aria/orchestrator/topology/__init__.py
+++ b/aria/orchestrator/topology/__init__.py
@@ -228,6 +228,3 @@ class Handler(issue.Reporter):
         elif model is not None:
             _handler = self._handlers.get(model.__class__)
             return _handler(self, model).configure_operations(**kwargs)
-
-
-handler = Handler()

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fcc6b9c6/aria/orchestrator/topology/instance.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/topology/instance.py b/aria/orchestrator/topology/instance.py
index 9dea932..dc204fe 100644
--- a/aria/orchestrator/topology/instance.py
+++ b/aria/orchestrator/topology/instance.py
@@ -176,6 +176,15 @@ class Node(common._OperatorHolderHandlerMixin):
     def satisfy_requirements(self):
         satisfied = True
         for requirement_template in self._model.node_template.requirement_templates:
+
+            # Since we try and satisfy requirements, which are node template bound, and use that
+            # information in the creation of the relationship, Some requirements may have been
+            # satisfied by a previous run on that node template.
+            # The entire mechanism of satisfying requirements needs to be refactored.
+            if any(r.requirement_template == requirement_template
+                   for r in self._model.outbound_relationships):
+                return satisfied
+
             # Find target template
             target_node_template, target_node_capability = self._find_target(requirement_template)
             if target_node_template is not None:
@@ -210,8 +219,7 @@ class Node(common._OperatorHolderHandlerMixin):
 
             if target_node is not None:
                 if requirement_template.relationship_template is not None:
-                    from aria.orchestrator import topology
-                    relationship_model = topology.handler.instantiate(
+                    relationship_model = self._topology.instantiate(
                         requirement_template.relationship_template)
                 else:
                     relationship_model = models.Relationship()

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fcc6b9c6/aria/orchestrator/topology/template.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/topology/template.py b/aria/orchestrator/topology/template.py
index 29a2397..51be788 100644
--- a/aria/orchestrator/topology/template.py
+++ b/aria/orchestrator/topology/template.py
@@ -73,9 +73,7 @@ class ServiceTemplate(common._TemplateHandlerMixin):
         service.groups = self._topology.instantiate(self._model.group_templates)
         service.policies = self._topology.instantiate(self._model.policy_templates)
         service.workflows = self._topology.instantiate(self._model.workflow_templates)
-
-        if self._model.substitution_template is not None:
-            service.substitution = self._topology.instantiate(self._model.substitution_template)
+        service.substitution = self._topology.instantiate(self._model.substitution_template)
         service.outputs = self._topology.instantiate(self._model.outputs)
 
         return service
@@ -95,10 +93,6 @@ class ServiceTemplate(common._TemplateHandlerMixin):
             extract_property(properties, 'max_instances')
             extract_property(properties, 'default_instances')
 
-        def default_property(name, value):
-            if name not in scaling:
-                scaling[name] = value
-
         # From our scaling capabilities
         for capability_template in node_template.capability_templates.itervalues():
             if capability_template.type.role == 'scaling':
@@ -111,9 +105,9 @@ class ServiceTemplate(common._TemplateHandlerMixin):
                     extract_properties(policy_template.properties)
 
         # Defaults
-        default_property('min_instances', 0)
-        default_property('max_instances', 1)
-        default_property('default_instances', 1)
+        scaling.setdefault('min_instances', 0)
+        scaling.setdefault('max_instances', 1)
+        scaling.setdefault('default_instances', 1)
 
         # Validate
         # pylint: disable=too-many-boolean-expressions

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fcc6b9c6/aria/parser/consumption/consumer.py
----------------------------------------------------------------------
diff --git a/aria/parser/consumption/consumer.py b/aria/parser/consumption/consumer.py
index 8acbf31..ea63643 100644
--- a/aria/parser/consumption/consumer.py
+++ b/aria/parser/consumption/consumer.py
@@ -29,7 +29,7 @@ class Consumer(object):
     def __init__(self, context):
         from aria.orchestrator import topology
 
-        self.handler = topology.handler
+        self.handler = topology.Handler()
         self.context = context
 
     def consume(self):
@@ -76,6 +76,10 @@ class ConsumerChain(Consumer):
                     handle_exception(consumer, e)
                 else:
                     raise e
+
+            if consumer.handler.has_issues:
+                self.context.validation.extend_issues(consumer.handler.issues)
+
             if self.context.validation.has_issues:
                 break
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fcc6b9c6/aria/parser/consumption/modeling.py
----------------------------------------------------------------------
diff --git a/aria/parser/consumption/modeling.py b/aria/parser/consumption/modeling.py
index 828cc30..1338c03 100644
--- a/aria/parser/consumption/modeling.py
+++ b/aria/parser/consumption/modeling.py
@@ -123,7 +123,7 @@ class InstantiateServiceInstance(Consumer):
                 CoerceServiceInstanceValues
             )).consume()
 
-        if self.handler.dump_issues():
+        if self.context.validation.dump_issues():
             raise exceptions.InstantiationError('Failed to instantiate service template `{0}`'
                                                 .format(self.context.modeling.template.name))
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fcc6b9c6/aria/parser/validation/issue.py
----------------------------------------------------------------------
diff --git a/aria/parser/validation/issue.py b/aria/parser/validation/issue.py
index 17e488f..11ea7f9 100644
--- a/aria/parser/validation/issue.py
+++ b/aria/parser/validation/issue.py
@@ -168,6 +168,10 @@ class Reporter(object):
     def issues_as_raw(self):
         return [formatting.as_raw(i) for i in self.issues]
 
+    def extend_issues(self, *issues):
+        with self._issues:
+            self._issues.extend(*issues)
+
     def dump_issues(self):
         issues = self.issues
         if issues:

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/fcc6b9c6/tests/instantiation/test_configuration.py
----------------------------------------------------------------------
diff --git a/tests/instantiation/test_configuration.py b/tests/instantiation/test_configuration.py
index d4d91da..a41f0a8 100644
--- a/tests/instantiation/test_configuration.py
+++ b/tests/instantiation/test_configuration.py
@@ -17,7 +17,6 @@ import pytest
 
 from tests.parser.service_templates import consume_literal
 from aria.modeling.utils import parameters_as_values
-from aria.orchestrator.topology import handler
 
 
 TEMPLATE = """
@@ -166,9 +165,11 @@ def test_remote(service):
 
 
 def test_reserved_arguments(broken_service_issues):
-    assert len(broken_service_issues) == 1
-    assert len(handler.issues) == 1
-    issue = handler.issues[0].message
-    assert all([issue.startswith('using reserved arguments in operation "operation": '),
-                'ctx' in issue,
-                'toolbelt' in issue])
+    assert len(broken_service_issues) == 2
+
+    assert any(
+        all([issue.message.startswith('using reserved arguments in operation "operation": '),
+             'ctx' in issue.message,
+             'toolbelt' in issue.message])
+        for issue in broken_service_issues
+    )