Repository: incubator-ariatosca Updated Branches: refs/heads/ARIA-48-aria-cli 0833c0d39 -> 2811e1ec1
fixed service-inputs; service now has a default name Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/2811e1ec Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/2811e1ec Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/2811e1ec Branch: refs/heads/ARIA-48-aria-cli Commit: 2811e1ec1311c244d676969877e37477bef008d6 Parents: 0833c0d Author: Ran Ziv <[email protected]> Authored: Thu Mar 30 14:30:01 2017 +0300 Committer: Ran Ziv <[email protected]> Committed: Thu Mar 30 14:30:01 2017 +0300 ---------------------------------------------------------------------- aria/cli/commands/services.py | 15 +++++++++------ aria/core.py | 18 ++++++++++-------- aria/modeling/service_template.py | 11 ++--------- aria/modeling/utils.py | 14 +++++++------- aria/orchestrator/workflow_runner.py | 5 +++-- aria/utils/conversion.py | 8 +++++--- 6 files changed, 36 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/2811e1ec/aria/cli/commands/services.py ---------------------------------------------------------------------- diff --git a/aria/cli/commands/services.py b/aria/cli/commands/services.py index 0352ff0..9ddb272 100644 --- a/aria/cli/commands/services.py +++ b/aria/cli/commands/services.py @@ -93,7 +93,6 @@ def create(service_template_name, """ logger.info('Creating new service from service template {0}...'.format( service_template_name)) - service_name = service_name or service_template_name try: core = Core(model_storage, resource_storage, plugin_manager) @@ -165,8 +164,12 @@ def inputs(service_name, model_storage, logger): """ logger.info('Showing inputs for service {0}...'.format(service_name)) service = model_storage.service.get_by_name(service_name) - inputs_ = StringIO() - for input_name, input in service.inputs.iteritems(): - inputs_.write(' - "{0}":{1}'.format(input_name, os.linesep)) - inputs_.write(' Value: {0}{1}'.format(input.value, os.linesep)) - logger.info(inputs_.getvalue()) + if service.inputs: + inputs_ = StringIO() + for input_name, input in service.inputs.iteritems(): + inputs_.write(' - "{0}":{1}'.format(input_name, os.linesep)) + inputs_.write(' Value: {0}{1}'.format(input.value, os.linesep)) + logger.info(inputs_.getvalue()) + else: + logger.info('\tNo inputs') + logger.info('') http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/2811e1ec/aria/core.py ---------------------------------------------------------------------- diff --git a/aria/core.py b/aria/core.py index dc8eba5..50487b6 100644 --- a/aria/core.py +++ b/aria/core.py @@ -14,7 +14,7 @@ # limitations under the License. from .modeling import models -from .modeling import utils as storage_utils +from .modeling import utils as modeling_utils from .exceptions import AriaException from .parser.consumption import ( ConsumptionContext, @@ -68,21 +68,23 @@ class Core(object): self.model_storage.service_template.delete(service_template) self.resource_storage.service_template.delete(entry_id=str(service_template.id)) - def create_service(self, service_template_name, inputs, service_name): + def create_service(self, service_template_name, inputs, service_name=None): service_template = self.model_storage.service_template.get_by_name(service_template_name) - context = ConsumptionContext() + # creating an empty ConsumptionContext, initiating a threadlocal context + ConsumptionContext() with self.model_storage._all_api_kwargs['session'].no_autoflush: service = service_template.instantiate(None) - # template_inputs = self.model_storage.service_template.inputs - # input_models = storage_utils.create_inputs(inputs, template_inputs) - # service.inputs = input_models - + template_inputs = service_template.inputs + input_models = modeling_utils.create_inputs(inputs, template_inputs) + service.inputs = {input.name: input for input in input_models} # TODO: now that we have inputs, we should scan properties and inputs and evaluate functions - service.name = service_name + # first put the service model so it could have an id, as fallback for setting its name self.model_storage.service.put(service) + service.name = service_name or '{0}_{1}'.format(service_template_name, service.id) + self.model_storage.service.update(service) return service def delete_service(self, service_name, force=False): http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/2811e1ec/aria/modeling/service_template.py ---------------------------------------------------------------------- diff --git a/aria/modeling/service_template.py b/aria/modeling/service_template.py index 20c24b6..fd13c7f 100644 --- a/aria/modeling/service_template.py +++ b/aria/modeling/service_template.py @@ -258,7 +258,6 @@ class ServiceTemplateBase(TemplateModelMixin): # pylint: disable=too-many-public updated_at=now, description=deepcopy_with_locators(self.description), service_template=self) - #service.name = '{0}_{1}'.format(self.name, service.id) context.modeling.instance = service @@ -274,18 +273,12 @@ class ServiceTemplateBase(TemplateModelMixin): # pylint: disable=too-many-public utils.instantiate_dict(self, service.workflows, self.workflow_templates) utils.instantiate_dict(self, service.plugin_specifications, self.plugin_specifications) - # if self.substitution_template is not None: - # service.substitution = self.substitution_template.instantiate(container) + if self.substitution_template is not None: + service.substitution = self.substitution_template.instantiate(container) utils.instantiate_dict(self, service.inputs, self.inputs) utils.instantiate_dict(self, service.outputs, self.outputs) - for name, the_input in context.modeling.inputs.iteritems(): - if name not in service.inputs: - context.validation.report('input "{0}" is not supported'.format(name)) - else: - service.inputs[name].value = the_input - return service def validate(self): http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/2811e1ec/aria/modeling/utils.py ---------------------------------------------------------------------- diff --git a/aria/modeling/utils.py b/aria/modeling/utils.py index faf4186..250df6d 100644 --- a/aria/modeling/utils.py +++ b/aria/modeling/utils.py @@ -37,9 +37,9 @@ def create_inputs(inputs, template_inputs): for input_name, input_val in inputs.iteritems(): parameter = models.Parameter( name=input_name, - type=template_inputs[input_name].type, + type_name=template_inputs[input_name].type_name, description=template_inputs[input_name].description, - str_value=str(input_val)) + value=input_val) input_models.append(parameter) return input_models @@ -64,9 +64,9 @@ def _merge_and_validate_inputs(inputs, template_inputs): else: # Validate type of inputs try: - convert_value_to_type(str(inputs[input_name]), input_template.type) + convert_value_to_type(str(inputs[input_name]), input_template.type_name) except ValueError: - wrong_type_inputs[input_name] = input_template.type + wrong_type_inputs[input_name] = input_template.type_name if missing_inputs: raise exceptions.MissingRequiredInputsException( @@ -80,12 +80,12 @@ def _merge_and_validate_inputs(inputs, template_inputs): format(param_name, param_type)) raise exceptions.InputOfWrongTypeException(error_message.getvalue()) - unknown_inputs = [input_name for input_name in inputs.keys() + undeclared_inputs = [input_name for input_name in inputs.keys() if input_name not in template_inputs] - if unknown_inputs: + if undeclared_inputs: raise exceptions.UndeclaredInputsException( 'Undeclared inputs have been specified: {0}; Expected inputs: {1}' - .format(unknown_inputs, template_inputs.keys())) + .format(undeclared_inputs, template_inputs.keys())) return merged_inputs http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/2811e1ec/aria/orchestrator/workflow_runner.py ---------------------------------------------------------------------- diff --git a/aria/orchestrator/workflow_runner.py b/aria/orchestrator/workflow_runner.py index d6b3b5c..a529a84 100644 --- a/aria/orchestrator/workflow_runner.py +++ b/aria/orchestrator/workflow_runner.py @@ -25,7 +25,7 @@ from .workflows.builtin import BUILTIN_WORKFLOWS, BUILTIN_WORKFLOWS_PATH_PREFIX from .workflows.core.engine import Engine from .workflows.executor.process import ProcessExecutor from ..exceptions import AriaException -from ..modeling import utils as storage_utils +from ..modeling import utils as modeling_utils from ..modeling import models from ..utils.imports import import_fullname @@ -85,6 +85,7 @@ class WorkflowRunner(object): return self._model_storage.service.get(self._service_id) def execute(self): + #TODO uncomment, commented for testing purposes # self._validate_no_active_executions() self._engine.execute() @@ -101,7 +102,7 @@ class WorkflowRunner(object): # self.service.workflows[self._workflow_name].properties # if k not in WORKFLOW_POLICY_INTERNAL_PROPERTIES} - # input_models = storage_utils.create_inputs(inputs, workflow_inputs) + # input_models = modeling_utils.create_inputs(inputs, workflow_inputs) # execution.parameters = input_models self._model_storage.execution.put(execution) http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/2811e1ec/aria/utils/conversion.py ---------------------------------------------------------------------- diff --git a/aria/utils/conversion.py b/aria/utils/conversion.py index fa99ece..7136a90 100644 --- a/aria/utils/conversion.py +++ b/aria/utils/conversion.py @@ -15,12 +15,14 @@ def convert_value_to_type(str_value, type_name): + """Supports both python and yaml type names""" + #TODO add timestamp type? try: - if type_name.lower() in ['str', 'unicode']: + if type_name.lower() in ['str', 'unicode', 'string']: return str_value.decode('utf-8') - elif type_name.lower() == 'int': + elif type_name.lower() in ['int', 'integer']: return int(str_value) - elif type_name.lower() == 'bool': + elif type_name.lower() in ['bool', 'boolean']: return bool(str_value) elif type_name.lower() == 'float': return float(str_value)
