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/08/01 08:37:30 UTC

incubator-ariatosca git commit: self fixes

Repository: incubator-ariatosca
Updated Branches:
  refs/heads/ARIA-174-Refactor-instantiation-phase 6e4495d98 -> e61b4d7c2


self fixes


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

Branch: refs/heads/ARIA-174-Refactor-instantiation-phase
Commit: e61b4d7c27ac2812545bdc3064a2a006d4d3f986
Parents: 6e4495d
Author: max-orlov <ma...@gigaspaces.com>
Authored: Tue Aug 1 11:37:25 2017 +0300
Committer: max-orlov <ma...@gigaspaces.com>
Committed: Tue Aug 1 11:37:25 2017 +0300

----------------------------------------------------------------------
 aria/cli/commands/service_templates.py          |   8 +-
 aria/cli/commands/services.py                   |   6 +-
 aria/core.py                                    |  30 ++---
 aria/modeling/functions.py                      |  10 +-
 .../execution_plugin/instantiation.py           | 117 ++++++++-----------
 aria/orchestrator/topology/instance_handler.py  |   2 +-
 aria/parser/consumption/consumer.py             |   3 +-
 aria/utils/__init__.py                          |  48 ++++++++
 8 files changed, 127 insertions(+), 97 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/e61b4d7c/aria/cli/commands/service_templates.py
----------------------------------------------------------------------
diff --git a/aria/cli/commands/service_templates.py b/aria/cli/commands/service_templates.py
index 608d178..89662a9 100644
--- a/aria/cli/commands/service_templates.py
+++ b/aria/cli/commands/service_templates.py
@@ -28,7 +28,7 @@ from ...core import Core
 from ...storage import exceptions as storage_exceptions
 from ...parser import consumption
 from ...utils import (formatting, collections, console)
-from ... orchestrator.topology import Topology
+from ... orchestrator import topology
 
 DESCRIPTION_FIELD_LENGTH_LIMIT = 20
 SERVICE_TEMPLATE_COLUMNS = \
@@ -57,7 +57,7 @@ def service_templates():
 def show(service_template_name, model_storage, mode_full, mode_types, format_json, format_yaml,
          logger):
     """
-    Show information for a stored service template
+    Show information for a stored service templates
 
     SERVICE_TEMPLATE_NAME is the unique name of the stored service template.
     """
@@ -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:
-            console.puts(Topology().dump(service_template))
+            console.puts(topology.Topology().dump(service_template))
     elif mode_types:
-        console.puts(Topology().dump_types(service_template=service_template))
+        console.puts(topology.Topology().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/e61b4d7c/aria/cli/commands/services.py
----------------------------------------------------------------------
diff --git a/aria/cli/commands/services.py b/aria/cli/commands/services.py
index 4890bb7..6752899 100644
--- a/aria/cli/commands/services.py
+++ b/aria/cli/commands/services.py
@@ -20,7 +20,6 @@ CLI ``services`` sub-commands.
 import os
 from StringIO import StringIO
 
-from aria.orchestrator.topology import Topology
 from . import service_templates
 from .. import helptexts
 from .. import table
@@ -31,6 +30,7 @@ from ...modeling import exceptions as modeling_exceptions
 from ...storage import exceptions as storage_exceptions
 from ...parser import consumption
 from ...utils import (formatting, collections, console)
+from ...orchestrator import topology
 
 
 DESCRIPTION_FIELD_LENGTH_LIMIT = 20
@@ -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:
-            console.puts(Topology().dump(service))
+            console.puts(topology.Topology().dump(service))
     elif mode_graph:
-        console.puts(Topology().dump_graph(service))
+        console.puts(topology.Topology().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/e61b4d7c/aria/core.py
----------------------------------------------------------------------
diff --git a/aria/core.py b/aria/core.py
index e726be7..7a69f24 100644
--- a/aria/core.py
+++ b/aria/core.py
@@ -20,7 +20,7 @@ ARIA core module.
 from . import exceptions
 from .parser import consumption
 from .parser.loading.location import UriLocation
-from .orchestrator.topology import Topology
+from .orchestrator import topology
 
 
 class Core(object):
@@ -74,20 +74,20 @@ class Core(object):
         # setting no autoflush for the duration of instantiation - this helps avoid dependency
         # constraints as they're being set up
         with storage_session.no_autoflush:
-            topology = Topology(self.model_storage)
-            service = topology.instantiate(service_template, inputs=inputs)
-            topology.coerce(service)
-
-            topology.validate(service)
-            topology.satisfy_requirements(service)
-            topology.coerce(service)
-
-            topology.validate_capabilities(service)
-            topology.find_hosts(service)
-            topology.configure_operations(service)
-            topology.coerce(service)
-
-            if topology.dump_issues():
+            topology_ = topology.Topology(self.model_storage)
+            service = topology_.instantiate(service_template, inputs=inputs)
+            topology_.coerce(service)
+
+            topology_.validate(service)
+            topology_.satisfy_requirements(service)
+            topology_.coerce(service)
+
+            topology_.validate_capabilities(service)
+            topology_.find_hosts(service)
+            topology_.configure_operations(service)
+            topology_.coerce(service)
+            import pydevd; pydevd.settrace('localhost', suspend=False)
+            if topology_.dump_issues():
                 raise exceptions.InstantiationError('Failed to instantiate service template `{0}`'
                                                     .format(service_template.name))
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/e61b4d7c/aria/modeling/functions.py
----------------------------------------------------------------------
diff --git a/aria/modeling/functions.py b/aria/modeling/functions.py
index 7330268..31c3839 100644
--- a/aria/modeling/functions.py
+++ b/aria/modeling/functions.py
@@ -16,8 +16,8 @@
 """
 Mechanism for evaluating intrinsic functions.
 """
-
 from ..parser.exceptions import InvalidValueError
+from ..parser.consumption import ConsumptionContext
 from ..utils.collections import OrderedDict
 from . import exceptions
 
@@ -102,12 +102,10 @@ def evaluate(value, container_holder, report_issues=False): # pylint: disable=to
                     final = False
         except exceptions.CannotEvaluateFunctionException:
             pass
-        except InvalidValueError:
+        except InvalidValueError as e:
             if report_issues:
-                # TODO: do not use the context for "reporting"
-                pass
-                # context = ConsumptionContext.get_thread_local()
-                # context.validation.report(e.issue)
+                context = ConsumptionContext.get_thread_local()
+                context.validation.report(e.issue)
 
     elif isinstance(value, list):
         evaluated_list = []

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/e61b4d7c/aria/orchestrator/execution_plugin/instantiation.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/execution_plugin/instantiation.py b/aria/orchestrator/execution_plugin/instantiation.py
index 49605b9..55f1ae6 100644
--- a/aria/orchestrator/execution_plugin/instantiation.py
+++ b/aria/orchestrator/execution_plugin/instantiation.py
@@ -18,12 +18,11 @@ Instantiation of :class:`~aria.modeling.models.Operation` models.
 """
 
 # TODO: this module will eventually be moved to a new "aria.instantiation" package
-
-from ...utils.collections import OrderedDict
 from ...modeling.functions import Function
+from ... import utils
 
 
-def configure_operation(operation):
+def configure_operation(operation, reporter):
     host = None
     interface = operation.interface
     if interface.node is not None:
@@ -34,11 +33,11 @@ def configure_operation(operation):
         else: # either False or None (None meaning that edge was not specified)
             host = interface.relationship.source_node.host
 
-    _configure_common(operation)
+    _configure_common(operation, reporter)
     if host is None:
         _configure_local(operation)
     else:
-        _configure_remote(operation)
+        _configure_remote(operation, reporter)
 
     # Any remaining un-handled configuration parameters will become extra arguments, available as
     # kwargs in either "run_script_locally" or "run_script_with_ssh"
@@ -47,7 +46,7 @@ def configure_operation(operation):
             operation.arguments[key] = value.instantiate(None)
 
 
-def _configure_common(operation):
+def _configure_common(operation, reporter):
     """
     Local and remote operations.
     """
@@ -55,7 +54,7 @@ def _configure_common(operation):
     from ...modeling.models import Argument
     operation.arguments['script_path'] = Argument.wrap('script_path', operation.implementation,
                                                        'Relative path to the executable file.')
-    operation.arguments['process'] = Argument.wrap('process', _get_process(operation),
+    operation.arguments['process'] = Argument.wrap('process', _get_process(operation, reporter),
                                                    'Sub-process configuration.')
 
 
@@ -69,7 +68,7 @@ def _configure_local(operation):
                                           operations.run_script_locally.__name__)
 
 
-def _configure_remote(operation):
+def _configure_remote(operation, reporter):
     """
     Remote SSH operation via Fabric.
     """
@@ -77,7 +76,7 @@ def _configure_remote(operation):
     from ...modeling.models import Argument
     from . import operations
 
-    ssh = _get_ssh(operation)
+    ssh = _get_ssh(operation, reporter)
 
     # Defaults
     # TODO: find a way to configure these generally in the service template
@@ -106,12 +105,8 @@ def _configure_remote(operation):
 
     # Make sure we have a user
     if fabric_env.get('user') is None:
-        # TODO: fix
-        pass
-        # context = ConsumptionContext.get_thread_local()
-        # context.validation.report('must configure "ssh.user" for "{0}"'
-        #                           .format(operation.implementation),
-        #                           level=validation.Issue.BETWEEN_TYPES)
+        reporter.report('must configure "ssh.user" for "{0}"'.format(operation.implementation),
+                        level=reporter.Issue.BETWEEN_TYPES)
 
     # Make sure we have an authentication value
     if (fabric_env.get('password') is None) and \
@@ -119,11 +114,10 @@ def _configure_remote(operation):
         (fabric_env.get('key_filename') is None):
         # TODO: fix
         pass
-        # context = ConsumptionContext.get_thread_local()
-        # context.validation.report(
-        # 'must configure "ssh.password", "ssh.key", or "ssh.key_filename" for "{0}"'.format(
-        #     operation.implementation),
-        # level=validation.Issue.BETWEEN_TYPES)
+        reporter.report(
+            'must configure "ssh.password", "ssh.key", or "ssh.key_filename" for "{0}"'
+                .format(operation.implementation),
+            level=reporter.Issue.BETWEEN_TYPES)
 
     operation.arguments['fabric_env'] = Argument.wrap('fabric_env', fabric_env,
                                                       'Fabric configuration.')
@@ -132,82 +126,73 @@ def _configure_remote(operation):
                                           operations.run_script_with_ssh.__name__)
 
 
-def _get_process(operation):
+def _get_process(operation, reporter):
     value = (operation.configurations.get('process')._value
              if 'process' in operation.configurations
              else None)
     if value is None:
         return {}
-    _validate_type(value, dict, 'process')
-    value = OrderedDict(value)
+    _validate_type(value, dict, 'process', reporter)
+    value = utils.collections.OrderedDict(value)
     for k, v in value.iteritems():
         if k == 'eval_python':
-            value[k] = _coerce_bool(v, 'process.eval_python')
+            value[k] = _coerce_bool(v, 'process.eval_python', reporter)
         elif k == 'cwd':
-            _validate_type(v, basestring, 'process.cwd')
+            _validate_type(v, basestring, 'process.cwd', reporter)
         elif k == 'command_prefix':
-            _validate_type(v, basestring, 'process.command_prefix')
+            _validate_type(v, basestring, 'process.command_prefix', reporter)
         elif k == 'args':
-            value[k] = _dict_to_list_of_strings(v, 'process.args')
+            value[k] = _dict_to_list_of_strings(v, 'process.args', reporter)
         elif k == 'env':
-            _validate_type(v, dict, 'process.env')
+            _validate_type(v, dict, 'process.env', reporter)
         else:
-            # TODO: fix
-            pass
-            # context = ConsumptionContext.get_thread_local()
-            # context.validation.report('unsupported configuration parameter: "process.{0}"'
-            #                           .format(k),
-            #                           level=validation.Issue.BETWEEN_TYPES)
+            reporter.report('unsupported configuration parameter: "process.{0}"'.format(k),
+                            level=reporter.Issue.BETWEEN_TYPES)
     return value
 
 
-def _get_ssh(operation):
+def _get_ssh(operation, reporter):
     value = (operation.configurations.get('ssh')._value
              if 'ssh' in operation.configurations
              else None)
     if value is None:
         return {}
-    _validate_type(value, dict, 'ssh')
-    value = OrderedDict(value)
+    _validate_type(value, dict, 'ssh', reporter)
+    value = utils.collections.OrderedDict(value)
     for k, v in value.iteritems():
         if k == 'use_sudo':
-            value[k] = _coerce_bool(v, 'ssh.use_sudo')
+            value[k] = _coerce_bool(v, 'ssh.use_sudo', reporter)
         elif k == 'hide_output':
-            value[k] = _dict_to_list_of_strings(v, 'ssh.hide_output')
+            value[k] = _dict_to_list_of_strings(v, 'ssh.hide_output', reporter)
         elif k == 'warn_only':
-            value[k] = _coerce_bool(v, 'ssh.warn_only')
+            value[k] = _coerce_bool(v, 'ssh.warn_only', reporter)
         elif k == 'user':
-            _validate_type(v, basestring, 'ssh.user')
+            _validate_type(v, basestring, 'ssh.user', reporter)
         elif k == 'password':
-            _validate_type(v, basestring, 'ssh.password')
+            _validate_type(v, basestring, 'ssh.password', reporter)
         elif k == 'key':
-            _validate_type(v, basestring, 'ssh.key')
+            _validate_type(v, basestring, 'ssh.key', reporter)
         elif k == 'key_filename':
-            _validate_type(v, basestring, 'ssh.key_filename')
+            _validate_type(v, basestring, 'ssh.key_filename', reporter)
         elif k == 'address':
-            _validate_type(v, basestring, 'ssh.address')
+            _validate_type(v, basestring, 'ssh.address', reporter)
         else:
-            # TODO: fix
-            pass
-            # context = ConsumptionContext.get_thread_local()
-            # context.validation.report('unsupported configuration parameter: "ssh.{0}"'.format(k),
-            #                           level=validation.Issue.BETWEEN_TYPES)
+            reporter.report('unsupported configuration parameter: "ssh.{0}"'.format(k),
+                            level=reporter.Issue.BETWEEN_TYPES)
     return value
 
 
-def _validate_type(value, the_type, name):
+def _validate_type(value, the_type, name, reporter):
     if isinstance(value, Function):
         return
     if not isinstance(value, the_type):
-        # TODO: fix
-        pass
-        # context = ConsumptionContext.get_thread_local()
-        # context.validation.report('"{0}" configuration is not a {1}: {2}'
-        #                           .format(name, full_type_name(the_type), safe_repr(value)),
-        #                           level=validation.Issue.BETWEEN_TYPES)
+        reporter.report(
+            '"{0}" configuration is not a {1}: {2}'.format(
+                name, utils.type.full_type_name(the_type), utils.formatting.safe_repr(value)),
+            level=reporter.Issue.BETWEEN_TYPES)
 
 
-def _coerce_bool(value, name):
+def _coerce_bool(value, name, reporter):
     if value is None:
         return None
     if isinstance(value, bool):
@@ -218,19 +203,17 @@ def _coerce_bool(value, name):
     elif value == 'false':
         return False
     else:
-        # TODO: fix
-        pass
-        # context = ConsumptionContext.get_thread_local()
-        # context.validation.report('"{0}" configuration is not "true" or "false": {1}'
-        #                           .format(name, safe_repr(value)),
-        #                           level=validation.Issue.BETWEEN_TYPES)
+      reporter.report(
+          '"{0}" configuration is not "true" or "false": {1}'.format(
+              name, utils.formatting.safe_repr(value)),
+          level=reporter.Issue.BETWEEN_TYPES)
 
 
-def _dict_to_list_of_strings(the_dict, name):
-    _validate_type(the_dict, dict, name)
+def _dict_to_list_of_strings(the_dict, name, reporter):
+    _validate_type(the_dict, dict, name, reporter)
     value = []
     for k in sorted(the_dict):
         v = the_dict[k]
-        _validate_type(v, basestring, '{0}.{1}'.format(name, k))
+        _validate_type(v, basestring, '{0}.{1}'.format(name, k), reporter)
         value.append(v)
     return value

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/e61b4d7c/aria/orchestrator/topology/instance_handler.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/topology/instance_handler.py b/aria/orchestrator/topology/instance_handler.py
index dbebf48..ea58d88 100644
--- a/aria/orchestrator/topology/instance_handler.py
+++ b/aria/orchestrator/topology/instance_handler.py
@@ -384,7 +384,7 @@ class Operation(common._OperatorHolderHandlerMixin):
                 self._model.function is None):
             # ("interface" is None for workflow operations, which do not currently use "plugin")
             # The default (None) plugin is the execution plugin
-            execution_plugin.instantiation.configure_operation(self._model)
+            execution_plugin.instantiation.configure_operation(self._model, self._topology)
         else:
             # In the future plugins may be able to add their own "configure_operation" hook that
             # can validate the configuration and otherwise create specially derived arguments. For

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/e61b4d7c/aria/parser/consumption/consumer.py
----------------------------------------------------------------------
diff --git a/aria/parser/consumption/consumer.py b/aria/parser/consumption/consumer.py
index fb60d66..878a161 100644
--- a/aria/parser/consumption/consumer.py
+++ b/aria/parser/consumption/consumer.py
@@ -14,7 +14,6 @@
 # limitations under the License.
 
 
-from ...orchestrator import topology
 from ...exceptions import AriaException
 from ...utils.exceptions import print_exception
 from ..validation import Issue
@@ -28,6 +27,8 @@ class Consumer(object):
     """
 
     def __init__(self, context):
+        from ...orchestrator import topology
+
         self.topology = topology.Topology()
         self.context = context
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/e61b4d7c/aria/utils/__init__.py
----------------------------------------------------------------------
diff --git a/aria/utils/__init__.py b/aria/utils/__init__.py
index 2a957a9..8667a3c 100644
--- a/aria/utils/__init__.py
+++ b/aria/utils/__init__.py
@@ -16,3 +16,51 @@
 """
 General-purpose utilities package.
 """
+
+from . import (
+    archive,
+    argparse,
+    caching,
+    collections,
+    console,
+    exceptions,
+    file,
+    formatting,
+    http,
+    imports,
+    openclose,
+    plugin,
+    process,
+    specification,
+    threading,
+    type,
+    uris,
+    uuid,
+    validation,
+    versions
+)
+
+
+__all__ = (
+    'archive',
+    'argparse',
+    'caching',
+    'collections',
+    'console',
+    'exceptions',
+    'file',
+    'formatting',
+    'http',
+    'imports',
+    'openclose',
+    'plugin',
+    'process',
+    'specification',
+    'threading',
+    'type',
+    'uris',
+    'uuid',
+    'validation',
+    'versions'
+)
+