Repository: incubator-ariatosca Updated Branches: refs/heads/ARIA-174-Refactor-instantiation-phase 4ae0e5f99 -> 50d4c1de5
fixed alot of dump issues, and a tiny issue with execution resuming. The last place consumers are used is under the reading of the blueprint itself. Remodel the exception handling (and reporting) still remain Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/50d4c1de Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/50d4c1de Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/50d4c1de Branch: refs/heads/ARIA-174-Refactor-instantiation-phase Commit: 50d4c1de528ade07f3b64eff414d266026e66743 Parents: 4ae0e5f Author: max-orlov <[email protected]> Authored: Tue Jul 25 17:37:07 2017 +0300 Committer: max-orlov <[email protected]> Committed: Tue Jul 25 17:37:07 2017 +0300 ---------------------------------------------------------------------- aria/cli/commands/executions.py | 2 +- aria/cli/commands/service_templates.py | 5 +- aria/cli/commands/services.py | 6 +- aria/core.py | 20 ++- aria/orchestrator/topology/__init__.py | 54 +++--- aria/orchestrator/topology/common.py | 2 +- aria/orchestrator/topology/instance.py | 266 ++++++++++++++-------------- aria/orchestrator/topology/template.py | 253 +++++++++++++------------- aria/parser/consumption/modeling.py | 1 - 9 files changed, 308 insertions(+), 301 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/50d4c1de/aria/cli/commands/executions.py ---------------------------------------------------------------------- diff --git a/aria/cli/commands/executions.py b/aria/cli/commands/executions.py index 4783442..f130d95 100644 --- a/aria/cli/commands/executions.py +++ b/aria/cli/commands/executions.py @@ -181,7 +181,7 @@ def resume(execution_id, executor = DryExecutor() if dry else None # use WorkflowRunner's default executor execution = model_storage.execution.get(execution_id) - if execution.status != execution.status.CANCELLED: + if execution.status != execution.CANCELLED: logger.info("Can't resume execution {execution.id} - " "execution is in status {execution.status}. " "Can only resume executions in status {valid_status}" http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/50d4c1de/aria/cli/commands/service_templates.py ---------------------------------------------------------------------- diff --git a/aria/cli/commands/service_templates.py b/aria/cli/commands/service_templates.py index c455eb3..d1a9479 100644 --- a/aria/cli/commands/service_templates.py +++ b/aria/cli/commands/service_templates.py @@ -73,10 +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: - service_template.dump() + logger.info(topology.handler.dump(service_template)) elif mode_types: - context = consumption.ConsumptionContext() - topology.handler.dump_types(context, 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/50d4c1de/aria/cli/commands/services.py ---------------------------------------------------------------------- diff --git a/aria/cli/commands/services.py b/aria/cli/commands/services.py index a99f5b3..43faf37 100644 --- a/aria/cli/commands/services.py +++ b/aria/cli/commands/services.py @@ -20,6 +20,7 @@ CLI ``services`` sub-commands. import os from StringIO import StringIO +from aria.orchestrator import topology from . import service_templates from .. import helptexts from .. import table @@ -73,10 +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: - service.dump() + logger.info(topology.handler.dump(service)) elif mode_graph: - consumption.ConsumptionContext() - service.dump_graph() + 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/50d4c1de/aria/core.py ---------------------------------------------------------------------- diff --git a/aria/core.py b/aria/core.py index 9ae45b5..77ed3de 100644 --- a/aria/core.py +++ b/aria/core.py @@ -74,8 +74,22 @@ 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: - service = topology.Handler(self.model_storage).instantiate( - service_template, inputs=inputs) + + handler = topology.Handler(self.model_storage) + service = handler.instantiate(service_template, inputs=inputs) + handler.coerce(service) + handler.validate(service) + handler.satisfy_requirements(service) + handler.coerce(service) + handler.validate_capabilities(service) + handler.find_hosts(service) + 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)) storage_session.flush() # flushing so service.id would auto-populate service.name = service_name or '{0}_{1}'.format(service_template.name, service.id) @@ -104,6 +118,8 @@ class Core(object): def _parse_service_template(service_template_path): context = consumption.ConsumptionContext() context.presentation.location = UriLocation(service_template_path) + # TODO: this is the last place which uses the consumer chains (since read is a proper Parser + # todo..based consumer, it has no place in the topology package). consumption.ConsumerChain( context, ( http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/50d4c1de/aria/orchestrator/topology/__init__.py ---------------------------------------------------------------------- diff --git a/aria/orchestrator/topology/__init__.py b/aria/orchestrator/topology/__init__.py index 9003c1e..5c7747b 100644 --- a/aria/orchestrator/topology/__init__.py +++ b/aria/orchestrator/topology/__init__.py @@ -12,10 +12,10 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - from StringIO import StringIO from ...modeling import models +from ...utils import console from . import ( template, instance, @@ -51,12 +51,13 @@ class Handler(object): } class TopologyStylizer(object): - def __init__(self, context): - self._context = context + def __init__(self): + from aria.parser.consumption import style + self._style = style.Style() self._str = StringIO() def write(self, str_): - self._str.write(str_) + console.puts(str_, stream=self._str) def __repr__(self): return self._str.getvalue() @@ -66,7 +67,7 @@ class Handler(object): def __getattr__(self, item): try: - return getattr(self._context, item) + return getattr(self._style, item) except AttributeError: return super(Handler.TopologyStylizer, self).__getattribute__(item) @@ -113,26 +114,26 @@ class Handler(object): handler = self._handlers.get(model.__class__) return handler(self, model).validate(**kwargs) - def dump(self, model, context, **kwargs): - if not isinstance(context, self.TopologyStylizer): - # Wrap the context to contain a stringIO object - context = self.TopologyStylizer(context) + def dump(self, model, console=None, section_name=None, **kwargs): + console = console or self.TopologyStylizer() + + # if model is empty, no need to print out the section name + if model and section_name: + console.write('{0}:'.format(section_name)) if isinstance(model, dict): - return self.dump(model.values(), context, **kwargs) + return self.dump(model.values(), console=console, **kwargs) elif isinstance(model, list): - context.write('%s:' % model) - with context.style.indent: + with console.indent: for value in model: - self.dump(value, context, **kwargs) + self.dump(value, console=console, **kwargs) elif model is not None: handler = self._handlers.get(model.__class__) - handler(self, model).dump(context, **kwargs) - - return str(context) + handler(self, model).dump(console=console, **kwargs) + return str(console) def dump_graph(self, context, service, **kwargs): - context = self.TopologyStylizer(context) + context = self.TopologyStylizer(context.style) for node in service.nodes.itervalues(): if not node.inbound_relationships: self._dump_graph_node(context, node) @@ -165,14 +166,17 @@ class Handler(object): handler = self._handlers.get(model.__class__) return handler(self, model).coerce(**kwargs) - def dump_types(self, context, service_template): - self.dump(service_template.node_types, context) - self.dump(service_template.group_types, context) - self.dump(service_template.capability_types, context) - self.dump(service_template.relationship_types, context) - self.dump(service_template.policy_types, context) - self.dump(service_template.artifact_types, context) - self.dump(service_template.interface_types, context) + def dump_types(self, service_template, console=None): + console = console or self.TopologyStylizer(console.style) + console.write(self.dump(service_template.node_types, console)) + console.write(self.dump(service_template.group_types, console)) + console.write(self.dump(service_template.capability_types, console)) + console.write(self.dump(service_template.relationship_types, console)) + console.write(self.dump(service_template.policy_types, console)) + console.write(self.dump(service_template.artifact_types, console)) + console.write(self.dump(service_template.interface_types, console)) + + return str(console) def satisfy_requirements(self, model, **kwargs): if isinstance(model, dict): http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/50d4c1de/aria/orchestrator/topology/common.py ---------------------------------------------------------------------- diff --git a/aria/orchestrator/topology/common.py b/aria/orchestrator/topology/common.py index 9437d56..2be38cd 100644 --- a/aria/orchestrator/topology/common.py +++ b/aria/orchestrator/topology/common.py @@ -33,7 +33,7 @@ class _Handler(object): for template in templates: self._topology.validate(template) - def dump(self, context): + def dump(self, console): raise NotImplementedError http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/50d4c1de/aria/orchestrator/topology/instance.py ---------------------------------------------------------------------- diff --git a/aria/orchestrator/topology/instance.py b/aria/orchestrator/topology/instance.py index 3040b3b..5990792 100644 --- a/aria/orchestrator/topology/instance.py +++ b/aria/orchestrator/topology/instance.py @@ -30,24 +30,24 @@ class Artifact(common._InstanceHandler): def validate(self, **kwargs): self._topology.validate(self._model.properties) - def dump(self, context): - context.write(context.style.node(self._model.name)) + def dump(self, console): + console.write(console.node(self._model.name)) if self._model.description: - context.write(context.style.meta(self._model.description)) - with context.style.indent: - context.write('Artifact type: {0}'.format(context.style.type(self._model.type.name))) - context.write('Source path: {0}'.format( - context.style.literal(self._model.source_path))) + console.write(console.meta(self._model.description)) + with console.indent: + console.write('Artifact type: {0}'.format(console.type(self._model.type.name))) + console.write('Source path: {0}'.format( + console.literal(self._model.source_path))) if self._model.target_path is not None: - context.write('Target path: {0}'.format( - context.style.literal(self._model.target_path))) + console.write('Target path: {0}'.format( + console.literal(self._model.target_path))) if self._model.repository_url is not None: - context.write('Repository URL: {0}'.format( - context.style.literal(self._model.repository_url))) + console.write('Repository URL: {0}'.format( + console.literal(self._model.repository_url))) if self._model.repository_credential: - context.write('Repository credential: {0}'.format( - context.style.literal(self._model.repository_credential))) - self._topology.dump(self._model.properties, context, 'Properties') + console.write('Repository credential: {0}'.format( + console.literal(self._model.repository_credential))) + self._topology.dump(self._model.properties, console, 'Properties') class Capability(common._InstanceHandler): @@ -57,17 +57,17 @@ class Capability(common._InstanceHandler): def validate(self, **kwargs): self._topology.validate(self._model.properties) - def dump(self, context): - context.write(context.style.node(self._model.name)) - with context.style.indent: - context.write('Type: {0}'.format(context.style.type(self._model.type.name))) - context.write('Occurrences: {0:d} ({1:d}{2})'.format( + def dump(self, console): + console.write(console.node(self._model.name)) + with console.indent: + console.write('Type: {0}'.format(console.type(self._model.type.name))) + console.write('Occurrences: {0:d} ({1:d}{2})'.format( self._model.occurrences, self._model.min_occurrences or 0, ' to {0:d}'.format(self._model.max_occurrences) if self._model.max_occurrences is not None else ' or more')) - self._topology.dump(self._model.properties, context, 'Properties') + self._topology.dump(self._model.properties, console, 'Properties') class Group(common._OperatorHolderHandler): @@ -79,17 +79,17 @@ class Group(common._OperatorHolderHandler): self._validate(self._model.properties, self._model.interfaces) - def dump(self, context): - context.write('Group: {0}'.format(context.style.node(self._model.name))) - with context.style.indent: - context.write('Type: {0}'.format(context.style.type(self._model.type.name))) - self._topology.dump(self._model.properties, context, 'Properties') - self._topology.dump(self._model.interfaces, context, 'Interfaces') + def dump(self, console): + console.write('Group: {0}'.format(console.node(self._model.name))) + with console.indent: + console.write('Type: {0}'.format(console.type(self._model.type.name))) + self._topology.dump(self._model.properties, console, 'Properties') + self._topology.dump(self._model.interfaces, console, 'Interfaces') if self._model.nodes: - context.write('Member nodes:') - with context.style.indent: + console.write('Member nodes:') + with console.indent: for node in self._model.nodes: - context.write(context.style.node(node.name)) + console.write(console.node(node.name)) def configure_operations(self): for interface in self._model.interfaces.values(): @@ -104,14 +104,14 @@ class Interface(common._OperatorHolderHandler): self._validate(self._model.inputs, self._model.operations) - def dump(self, context): - context.write(context.style.node(self._model.name)) + def dump(self, console): + console.write(console.node(self._model.name)) if self._model.description: - context.write(context.style.meta(self._model.description)) - with context.style.indent: - context.write('Interface type: {0}'.format(context.style.type(self._model.type.name))) - self._topology.dump(self._model.inputs, context, 'Inputs') - self._topology.dump(self._model.operations, context, 'Operations') + console.write(console.meta(self._model.description)) + with console.indent: + console.write('Interface type: {0}'.format(console.type(self._model.type.name))) + self._topology.dump(self._model.inputs, console, 'Inputs') + self._topology.dump(self._model.operations, console, 'Operations') def configure_operations(self): for operation in self._model.operations.values(): @@ -147,17 +147,17 @@ class Node(common._OperatorHolderHandler): self._model.capabilities, self._model.outbound_relationships) - def dump(self, context): - context.write('Node: {0}'.format(context.style.node(self._model.name))) - with context.style.indent: - context.write('Type: {0}'.format(context.style.type(self._model.type.name))) - context.write('Template: {0}'.format(context.style.node(self._model.node_template.name))) - self._topology.dump(self._model.properties, context, 'Properties') - self._topology.dump(self._model.attributes, context, 'Attributes') - self._topology.dump(self._model.interfaces, context, 'Interfaces') - self._topology.dump(self._model.artifacts, context, 'Artifacts') - self._topology.dump(self._model.capabilities, context, 'Capabilities') - self._topology.dump(self._model.outbound_relationships, context, 'Relationships') + def dump(self, console): + console.write('Node: {0}'.format(console.node(self._model.name))) + with console.indent: + console.write('Type: {0}'.format(console.type(self._model.type.name))) + console.write('Template: {0}'.format(console.node(self._model.node_template.name))) + self._topology.dump(self._model.properties, console, 'Properties') + self._topology.dump(self._model.attributes, console, 'Attributes') + self._topology.dump(self._model.interfaces, console, 'Interfaces') + self._topology.dump(self._model.artifacts, console, 'Artifacts') + self._topology.dump(self._model.capabilities, console, 'Capabilities') + self._topology.dump(self._model.outbound_relationships, console, 'Relationships') def configure_operations(self): for interface in self._model.interfaces.values(): @@ -273,7 +273,7 @@ class Node(common._OperatorHolderHandler): else: target_node_capability = None - return self._model.node_template.target_node_template, target_node_capability + return requirement_template.target_node_template, target_node_capability # Find first node that matches the type elif requirement_template.target_node_type is not None: @@ -304,7 +304,7 @@ class Node(common._OperatorHolderHandler): # Do we match the required capability type? if (requirement_template.target_capability_type and requirement_template.target_capability_type.get_descendant( - self._model.type.name) is None): + capability_template.type.name) is None): return False # Are we in valid_source_node_types? @@ -336,33 +336,33 @@ class Operation(common._OperatorHolderHandler): self._model.configurations, self._model.arguments) - def dump(self, context): - context.write(context.style.node(self._model.name)) + def dump(self, console): + console.write(console.node(self._model.name)) if self._model.description: - context.write(context.style.meta(self._model.description)) - with context.style.indent: + console.write(console.meta(self._model.description)) + with console.indent: if self._model.implementation is not None: - context.write('Implementation: {0}'.format( - context.style.literal(self._model.implementation))) + console.write('Implementation: {0}'.format( + console.literal(self._model.implementation))) if self._model.dependencies: - context.write( + console.write( 'Dependencies: {0}'.format( - ', '.join((str(context.style.literal(v)) for v in self._model.dependencies)))) - self._topology.dump(self._model.inputs, context, 'Inputs') + ', '.join((str(console.literal(v)) for v in self._model.dependencies)))) + self._topology.dump(self._model.inputs, console, 'Inputs') if self._model.executor is not None: - context.write('Executor: {0}'.format(context.style.literal(self._model.executor))) + console.write('Executor: {0}'.format(console.literal(self._model.executor))) if self._model.max_attempts is not None: - context.write('Max attempts: {0}'.format(context.style.literal(self._model.max_attempts))) + console.write('Max attempts: {0}'.format(console.literal(self._model.max_attempts))) if self._model.retry_interval is not None: - context.write('Retry interval: {0}'.format( - context.style.literal(self._model.retry_interval))) + console.write('Retry interval: {0}'.format( + console.literal(self._model.retry_interval))) if self._model.plugin is not None: - context.write('Plugin: {0}'.format( - context.style.literal(self._model.plugin.name))) - self._topology.dump(self._model.configurations, context, 'Configuration') + console.write('Plugin: {0}'.format( + console.literal(self._model.plugin.name))) + self._topology.dump(self._model.configurations, console, 'Configuration') if self._model.function is not None: - context.write('Function: {0}'.format(context.style.literal(self._model.function))) - self._topology.dump(self._model.arguments, context, 'Arguments') + console.write('Function: {0}'.format(console.literal(self._model.function))) + self._topology.dump(self._model.arguments, console, 'Arguments') def configure_operations(self): if self._model.implementation is None and self._model.function is None: @@ -412,21 +412,21 @@ class Policy(common._InstanceHandler): def validate(self, **kwargs): self._topology.validate(self._model.properties) - def dump(self, context): - context.write('Policy: {0}'.format(context.style.node(self._model.name))) - with context.style.indent: - context.write('Type: {0}'.format(context.style.type(self._model.type.name))) - self._topology.dump(self._model.properties, context, 'Properties') + def dump(self, console): + console.write('Policy: {0}'.format(console.node(self._model.name))) + with console.indent: + console.write('Type: {0}'.format(console.type(self._model.type.name))) + self._topology.dump(self._model.properties, console, 'Properties') if self._model.nodes: - context.write('Target nodes:') - with context.style.indent: + console.write('Target nodes:') + with console.indent: for node in self._model.nodes: - context.write(context.style.node(node.name)) + console.write(console.node(node.name)) if self._model.groups: - context.write('Target groups:') - with context.style.indent: + console.write('Target groups:') + with console.indent: for group in self._model.groups: - context.write(context.style.node(group.name)) + console.write(console.node(group.name)) class Relationship(common._OperatorHolderHandler): @@ -439,25 +439,25 @@ class Relationship(common._OperatorHolderHandler): self._validate(self._model.properties, self._model.interfaces) - def dump(self, context): + def dump(self, console): if self._model.name: - context.write('{0} ->'.format(context.style.node(self._model.name))) + console.write('{0} ->'.format(console.node(self._model.name))) else: - context.write('->') - with context.style.indent: - context.write('Node: {0}'.format(context.style.node(self._model.target_node.name))) + console.write('->') + with console.indent: + console.write('Node: {0}'.format(console.node(self._model.target_node.name))) if self._model.target_capability: - context.write('Capability: {0}'.format(context.style.node( + console.write('Capability: {0}'.format(console.node( self._model.target_capability.name))) if self._model.type is not None: - context.write('Relationship type: {0}'.format( - context.style.type(self._model.type.name))) + console.write('Relationship type: {0}'.format( + console.type(self._model.type.name))) if (self._model.relationship_template is not None and self._model.relationship_template.name): - context.write('Relationship template: {0}'.format( - context.style.node(self._model.relationship_template.name))) - self._topology.dump(self._model.properties, context, 'Properties') - self._topology.dump(self._model.interfaces, context, 'Interfaces') + console.write('Relationship template: {0}'.format( + console.node(self._model.relationship_template.name))) + self._topology.dump(self._model.properties, console, 'Properties') + self._topology.dump(self._model.interfaces, console, 'Interfaces') def configure_operations(self): for interface in self._model.interfaces.values(): @@ -486,21 +486,17 @@ class Service(common._OperatorHolderHandler): self._model.outputs, self._model.workflows) - def dump(self, context): + def dump(self, console): if self._model.description is not None: - context.write(context.style.meta(self._model.description)) - self._topology.dump(self._model.meta_data, context, 'Metadata') - for node in self._model.nodes.itervalues(): - node.dump() - for group in self._model.groups.itervalues(): - group.dump() - for policy in self._model.policies.itervalues(): - policy.dump() - if self._model.substitution is not None: - self._model.substitution.dump() - self._topology.dump(self._model.inputs, context, 'Inputs') - self._topology.dump(self._model.outputs, context, 'Outputs') - self._topology.dump(self._model.workflows, context, 'Workflows') + console.write(console.meta(self._model.description)) + self._topology.dump(self._model.meta_data, console, 'Metadata') + self._topology.dump(self._model.nodes, console) + self._topology.dump(self._model.groups, console) + self._topology.dump(self._model.policies, console) + self._topology.dump(self._model.substitution, console) + self._topology.dump(self._model.inputs, console, 'Inputs') + self._topology.dump(self._model.outputs, console, 'Outputs') + self._topology.dump(self._model.workflows, console, 'Workflows') def configure_operations(self): for node in self._model.nodes.itervalues(): @@ -529,11 +525,11 @@ class Substitution(common._InstanceHandler): def validate(self, **kwargs): self._topology.validate(self._model.mappings) - def dump(self, context): - context.write('Substitution:') - with context.style.indent: - context.write('Node type: {0}'.format(context.style.type(self._model.node_type.name))) - self._topology.dump(self._model.mappings, context, 'Mappings') + def dump(self, console): + console.write('Substitution:') + with console.indent: + console.write('Node type: {0}'.format(console.type(self._model.node_type.name))) + self._topology.dump(self._model.mappings, console, 'Mappings') class SubstitutionMapping(common._InstanceHandler): @@ -549,25 +545,25 @@ class SubstitutionMapping(common._InstanceHandler): # formatting.safe_repr(self.node.name)), # level=validation.Issue.BETWEEN_TYPES) - def dump(self, context): + def dump(self, console): if self._model.capability is not None: - context.write('{0} -> {1}.{2}'.format( - context.style.node(self._model.name), - context.style.node(self._model.capability.node.name), - context.style.node(self._model.capability.name))) + console.write('{0} -> {1}.{2}'.format( + console.node(self._model.name), + console.node(self._model.capability.node.name), + console.node(self._model.capability.name))) else: - context.write('{0} -> {1}.{2}'.format( - context.style.node(self._model.name), - context.style.node(self._model.node.name), - context.style.node(self._model.requirement_template.name))) + console.write('{0} -> {1}.{2}'.format( + console.node(self._model.name), + console.node(self._model.node.name), + console.node(self._model.requirement_template.name))) class Metadata(common._InstanceHandler): - def dump(self, context): - context.write('{0}: {1}'.format( - context.style.property(self._topology.name), - context.style.literal(self._topology.value))) + def dump(self, console): + console.write('{0}: {1}'.format( + console.property(self._topology.name), + console.literal(self._topology.value))) def coerce(self): pass @@ -581,18 +577,18 @@ class Metadata(common._InstanceHandler): class _Parameter(common._InstanceHandler): - def dump(self, context): + def dump(self, console): if self._model.type_name is not None: - context.write('{0}: {1} ({2})'.format( - context.style.property(self._model.name), - context.style.literal(formatting.as_raw(self._model.value)), - context.style.type(self._model.type_name))) + console.write('{0}: {1} ({2})'.format( + console.property(self._model.name), + console.literal(formatting.as_raw(self._model.value)), + console.type(self._model.type_name))) else: - context.write('{0}: {1}'.format( - context.style.property(self._model.name), - context.style.literal(formatting.as_raw(self._model.value)))) + console.write('{0}: {1}'.format( + console.property(self._model.name), + console.literal(formatting.as_raw(self._model.value)))) if self._model.description: - context.write(context.style.meta(self._model.description)) + console.write(console.meta(self._model.description)) def instantiate(self, instance_cls, **kwargs): return instance_cls( @@ -634,9 +630,9 @@ class Type(common._InstanceHandler): def coerce(self): pass - def dump(self, context): + def dump(self, console): if self._model.name: - context.write(context.style.type(self._model.name)) - with context.style.indent: + console.write(console.type(self._model.name)) + with console.indent: for child in self._model.children: - self._topology.dump(context, child) + self._topology.dump(child, console) http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/50d4c1de/aria/orchestrator/topology/template.py ---------------------------------------------------------------------- diff --git a/aria/orchestrator/topology/template.py b/aria/orchestrator/topology/template.py index 8b78c7a..2d1319a 100644 --- a/aria/orchestrator/topology/template.py +++ b/aria/orchestrator/topology/template.py @@ -20,21 +20,17 @@ from . import utils, common class ServiceTemplate(common._TemplateHandler): - def dump(self, context): + def dump(self, console): if self._model.description is not None: - context.write(context.style.meta(self._model.description)) - self._topology.dump(self._model.meta_data, context, 'Metadata') - for node_template in self._model.node_templates.itervalues(): - node_template.dump() - for group_template in self._model.group_templates.itervalues(): - group_template.dump() - for policy_template in self._model.policy_templates.itervalues(): - policy_template.dump() - if self._model.substitution_template is not None: - self._model.substitution_template.dump() - self._topology.dump(self._model.inputs, context, 'Inputs') - self._topology.dump(self._model.outputs, context, 'Outputs') - self._topology.dump(self._model.workflow_templates, context, 'Workflow templates') + console.write(console.meta(self._model.description)) + self._topology.dump(self._model.meta_data, console, 'Metadata') + self._topology.dump(self._model.node_templates, console) + self._topology.dump(self._model.group_templates, console) + self._topology.dump(self._model.policy_templates, console) + self._topology.dump(self._model.substitution_template, console) + self._topology.dump(self._model.inputs, console, 'Inputs') + self._topology.dump(self._model.outputs, console, 'Outputs') + self._topology.dump(self._model.workflow_templates, console, 'Workflow templates') def coerce(self, **kwargs): self._coerce(self._model.meta_data, @@ -162,22 +158,22 @@ class ServiceTemplate(common._TemplateHandler): class ArtifactTemplate(common._TemplateHandler): - def dump(self, context): - context.write(context.style.node(self._model.name)) + def dump(self, console): + console.write(console.node(self._model.name)) if self._model.description: - context.write(context.style.meta(self._model.description)) - with context.style.indent: - context.write('Artifact type: {0}'.format(context.style.type(self._model.type.name))) - context.write('Source path: {0}'.format(context.style.literal(self._model.source_path))) + console.write(console.meta(self._model.description)) + with console.indent: + console.write('Artifact type: {0}'.format(console.type(self._model.type.name))) + console.write('Source path: {0}'.format(console.literal(self._model.source_path))) if self._model.target_path is not None: - context.write('Target path: {0}'.format(context.style.literal(self._model.target_path))) + console.write('Target path: {0}'.format(console.literal(self._model.target_path))) if self._model.repository_url is not None: - context.write('Repository URL: {0}'.format( - context.style.literal(self._model.repository_url))) + console.write('Repository URL: {0}'.format( + console.literal(self._model.repository_url))) if self._model.repository_credential: - context.write('Repository credential: {0}'.format( - context.style.literal(self._model.repository_credential))) - self._topology.dump(self._model.properties, context, 'Properties') + console.write('Repository credential: {0}'.format( + console.literal(self._model.repository_credential))) + self._topology.dump(self._model.properties, console, 'Properties') def coerce(self, **kwargs): self._topology.coerce(self._model.properties, **kwargs) @@ -198,23 +194,23 @@ class ArtifactTemplate(common._TemplateHandler): class CapabilityTemplate(common._TemplateHandler): - def dump(self, context): - context.write(context.style.node(self._model.name)) + def dump(self, console): + console.write(console.node(self._model.name)) if self._model.description: - context.write(context.style.meta(self._model.description)) - with context.style.indent: - context.write('Type: {0}'.format(context.style.type(self._model.type.name))) - context.write( + console.write(console.meta(self._model.description)) + with console.indent: + console.write('Type: {0}'.format(console.type(self._model.type.name))) + console.write( 'Occurrences: {0:d}{1}'.format( self._model.min_occurrences or 0, ' to {0:d}'.format(self._model.max_occurrences) if self._model.max_occurrences is not None else ' or more')) if self._model.valid_source_node_types: - context.write('Valid source node types: {0}'.format( - ', '.join((str(context.style.type(v.name)) + console.write('Valid source node types: {0}'.format( + ', '.join((str(console.type(v.name)) for v in self._model.valid_source_node_types)))) - self._topology.dump(self._model.properties, context, 'Properties') + self._topology.dump(self._model.properties, console, 'Properties') def coerce(self): self._topology.coerce(self._model.properties) @@ -232,33 +228,33 @@ class CapabilityTemplate(common._TemplateHandler): class RequirementTemplate(common._TemplateHandler): - def dump(self, context): + def dump(self, console): if self._model.name: - context.write(context.style.node(self._model.name)) + console.write(console.node(self._model.name)) else: - context.write('Requirement:') - with context.style.indent: + console.write('Requirement:') + with console.indent: if self._model.target_node_type is not None: - context.write('Target node type: {0}'.format( - context.style.type(self._model.target_node_type.name))) + console.write('Target node type: {0}'.format( + console.type(self._model.target_node_type.name))) elif self._model.target_node_template is not None: - context.write('Target node template: {0}'.format( - context.style.node(self._model.target_node_template.name))) + console.write('Target node template: {0}'.format( + console.node(self._model.target_node_template.name))) if self._model.target_capability_type is not None: - context.write('Target capability type: {0}'.format( - context.style.type(self._model.target_capability_type.name))) + console.write('Target capability type: {0}'.format( + console.type(self._model.target_capability_type.name))) elif self._model.target_capability_name is not None: - context.write('Target capability name: {0}'.format( - context.style.node(self._model.target_capability_name))) + console.write('Target capability name: {0}'.format( + console.node(self._model.target_capability_name))) if self._model.target_node_template_constraints: - context.write('Target node template constraints:') - with context.style.indent: + console.write('Target node template constraints:') + with console.indent: for constraint in self._model.target_node_template_constraints: - context.write(context.style.literal(constraint)) + console.write(console.literal(constraint)) if self._model.relationship_template: - context.write('Relationship:') - with context.style.indent: - self._model.relationship_template.dump() + console.write('Relationship:') + with console.indent: + self._topology.dump(self._model.relationship_template, console) def coerce(self, **kwargs): self._topology.coerce(self._model.relationship_template, **kwargs) @@ -276,17 +272,17 @@ class RequirementTemplate(common._TemplateHandler): class GroupTemplate(common._TemplateHandler): - def dump(self, context): - context.write('Group template: {0}'.format(context.style.node(self._model.name))) + def dump(self, console): + console.write('Group template: {0}'.format(console.node(self._model.name))) if self._model.description: - context.write(context.style.meta(self._model.description)) - with context.style.indent: - context.write('Type: {0}'.format(context.style.type(self._model.type.name))) - self._topology.dump(self._model.properties, context, 'Properties') - self._topology.dump(self._model.interface_templates, context, 'Interface Templates') + console.write(console.meta(self._model.description)) + with console.indent: + console.write('Type: {0}'.format(console.type(self._model.type.name))) + self._topology.dump(self._model.properties, console, 'Properties') + self._topology.dump(self._model.interface_templates, console, 'Interface Templates') if self._model.node_templates: - context.write('Member node templates: {0}'.format(', '.join( - (str(context.style.node(v.name)) for v in self._model.node_templates)))) + console.write('Member node templates: {0}'.format(', '.join( + (str(console.node(v.name)) for v in self._model.node_templates)))) def coerce(self, **kwargs): self._coerce(self._model.properties, @@ -312,14 +308,14 @@ class GroupTemplate(common._TemplateHandler): class InterfaceTemplate(common._TemplateHandler): - def dump(self, context): - context.write(context.style.node(self._model.name)) + def dump(self, console): + console.write(console.node(self._model.name)) if self._model.description: - context.write(context.style.meta(self._model.description)) - with context.style.indent: - context.write('Interface type: {0}'.format(context.style.type(self._model.type.name))) - self._topology.dump(self._model.inputs, context, 'Inputs') - self._topology.dump(self._model.operation_templates, context, 'Operation templates') + console.write(console.meta(self._model.description)) + with console.indent: + console.write('Interface type: {0}'.format(console.type(self._model.type.name))) + self._topology.dump(self._model.inputs, console, 'Inputs') + self._topology.dump(self._model.operation_templates, console, 'Operation templates') def coerce(self, **kwargs): self._coerce(self._model.inputs, @@ -342,18 +338,17 @@ class InterfaceTemplate(common._TemplateHandler): class NodeTemplate(common._TemplateHandler): - def dump(self, context): - context.write('Node template: {0}'.format(context.style.node(self._model.name))) + def dump(self, console): + console.write('Node template: {0}'.format(console.node(self._model.name))) if self._model.description: - context.write(context.style.meta(self._model.description)) - with context.style.indent: - context.write('Type: {0}'.format(context.style.type(self._model.type.name))) - self._topology.dump(self._model.properties, context, 'Properties') - self._topology.dump(self._model.attributes, context, 'Attributes') - self._topology.dump(self._model.interface_templates, context, 'Interface Templates') - self._topology.dump(self._model.artifact_templates, context, 'Artifact templates') - self._topology.dump(self._model.capability_templates, context, 'Capability templates') - self._topology.dump(self._model.requirement_templates, context, 'Requirement templates') + console.write(console.meta(self._model.description)) + console.write('Type: {0}'.format(console.type(self._model.type.name))) + self._topology.dump(self._model.properties, console, 'Properties') + self._topology.dump(self._model.attributes, console, 'Attributes') + self._topology.dump(self._model.interface_templates, console, 'Interface Templates') + self._topology.dump(self._model.artifact_templates, console, 'Artifact Templates') + self._topology.dump(self._model.capability_templates, console, 'Capability Templates') + self._topology.dump(self._model.requirement_templates, console, 'Requirement Templates') def coerce(self, **kwargs): self._coerce(self._model.properties, @@ -379,11 +374,9 @@ class NodeTemplate(common._TemplateHandler): node.capabilities = self._topology.instantiate(self._model.capability_templates) # Default attributes - if ('tosca_name' in node.attributes) \ - and (node.attributes['tosca_name'].type_name == 'string'): + if 'tosca_name' in node.attributes and node.attributes['tosca_name'].type_name == 'string': node.attributes['tosca_name'].value = self._model.name - if 'tosca_id' in node.attributes \ - and (node.attributes['tosca_id'].type_name == 'string'): + if 'tosca_id' in node.attributes and node.attributes['tosca_id'].type_name == 'string': node.attributes['tosca_id'].value = node.name return node @@ -398,19 +391,19 @@ class NodeTemplate(common._TemplateHandler): class PolicyTemplate(common._TemplateHandler): - def dump(self, context): - context.write('Policy template: {0}'.format(context.style.node(self._model.name))) + def dump(self, console): + console.write('Policy template: {0}'.format(console.node(self._model.name))) if self._model.description: - context.write(context.style.meta(self._model.description)) - with context.style.indent: - context.write('Type: {0}'.format(context.style.type(self._model.type.name))) - self._topology.dump(self._model.properties, context, 'Properties') + console.write(console.meta(self._model.description)) + with console.indent: + console.write('Type: {0}'.format(console.type(self._model.type.name))) + self._topology.dump(self._model.properties, console, 'Properties') if self._model.node_templates: - context.write('Target node templates: {0}'.format(', '.join( - (str(context.style.node(v.name)) for v in self._model.node_templates)))) + console.write('Target node templates: {0}'.format(', '.join( + (str(console.node(v.name)) for v in self._model.node_templates)))) if self._model.group_templates: - context.write('Target group templates: {0}'.format(', '.join( - (str(context.style.node(v.name)) for v in self._model.group_templates)))) + console.write('Target group templates: {0}'.format(', '.join( + (str(console.node(v.name)) for v in self._model.group_templates)))) def coerce(self, **kwargs): self._topology.coerce(self._model.properties, **kwargs) @@ -437,11 +430,11 @@ class PolicyTemplate(common._TemplateHandler): class SubstitutionTemplate(common._TemplateHandler): - def dump(self, context): - context.write('Substitution template:') - with context.style.indent: - context.write('Node type: {0}'.format(context.style.type(self._model.node_type.name))) - self._topology.dump(self._model.mappings, context, 'Mappings') + def dump(self, console): + console.write('Substitution template:') + with console.indent: + console.write('Node type: {0}'.format(console.type(self._model.node_type.name))) + self._topology.dump(self._model.mappings, console, 'Mappings') def coerce(self, **kwargs): self._topology.coerce(self._model.mappings, **kwargs) @@ -456,15 +449,15 @@ class SubstitutionTemplate(common._TemplateHandler): class SubstitutionTemplateMapping(common._TemplateHandler): - def dump(self, context): + def dump(self, console): if self._topology.capability_template is not None: node_template = self._topology.capability_template.node_template else: node_template = self._topology.requirement_template.node_template - context.write('{0} -> {1}.{2}'.format( - context.style.node(self._topology.name), - context.style.node(node_template.name), - context.style.node(self._topology.capability_template.name + console.write('{0} -> {1}.{2}'.format( + console.node(self._topology.name), + console.node(node_template.name), + console.node(self._topology.capability_template.name if self._topology.capability_template else self._topology.requirement_template.name))) @@ -516,17 +509,17 @@ class SubstitutionTemplateMapping(common._TemplateHandler): class RelationshipTemplate(common._TemplateHandler): - def dump(self, context): + def dump(self, console): if self._model.type is not None: - context.write('Relationship type: {0}'.format(context.style.type(self._model.type.name))) + console.write('Relationship type: {0}'.format(console.type(self._model.type.name))) else: - context.write('Relationship template: {0}'.format( - context.style.node(self._model.name))) + console.write('Relationship template: {0}'.format( + console.node(self._model.name))) if self._model.description: - context.write(context.style.meta(self._model.description)) - with context.style.indent: - self._topology.dump(self._model.properties, context, 'Properties') - self._topology.dump(self._model.interface_templates, context, 'Interface Templates') + console.write(console.meta(self._model.description)) + with console.indent: + self._topology.dump(self._model.properties, console, 'Properties') + self._topology.dump(self._model.interface_templates, console, 'Interface Templates') def coerce(self, **kwargs): self._coerce(self._model.properties, self._model.interface_templates, **kwargs) @@ -549,31 +542,31 @@ class RelationshipTemplate(common._TemplateHandler): class OperationTemplate(common._TemplateHandler): - def dump(self, context): - context.write(context.style.node(self._model.name)) + def dump(self, console): + console.write(console.node(self._model.name)) if self._model.description: - context.write(context.style.meta(self._model.description)) - with context.style.indent: + console.write(console.meta(self._model.description)) + with console.indent: if self._model.implementation is not None: - context.write('Implementation: {0}'.format( - context.style.literal(self._model.implementation))) + console.write('Implementation: {0}'.format( + console.literal(self._model.implementation))) if self._model.dependencies: - context.write('Dependencies: {0}'.format( - ', '.join((str(context.style.literal(v)) for v in self._model.dependencies)))) - self._topology.dump(self._model.inputs, context, 'Inputs') + console.write('Dependencies: {0}'.format( + ', '.join((str(console.literal(v)) for v in self._model.dependencies)))) + self._topology.dump(self._model.inputs, console, 'Inputs') if self._model.executor is not None: - context.write('Executor: {0}'.format(context.style.literal(self._model.executor))) + console.write('Executor: {0}'.format(console.literal(self._model.executor))) if self._model.max_attempts is not None: - context.write('Max attempts: {0}'.format(context.style.literal(self._model.max_attempts))) + console.write('Max attempts: {0}'.format(console.literal(self._model.max_attempts))) if self._model.retry_interval is not None: - context.write('Retry interval: {0}'.format( - context.style.literal(self._model.retry_interval))) + console.write('Retry interval: {0}'.format( + console.literal(self._model.retry_interval))) if self._model.plugin_specification is not None: - context.write('Plugin specification: {0}'.format( - context.style.literal(self._model.plugin_specification.name))) - self._topology.dump(self._model.configurations, context, 'Configuration') + console.write('Plugin specification: {0}'.format( + console.literal(self._model.plugin_specification.name))) + self._topology.dump(self._model.configurations, console, 'Configuration') if self._model.function is not None: - context.write('Function: {0}'.format(context.style.literal(self._model.function))) + console.write('Function: {0}'.format(console.literal(self._model.function))) def coerce(self, **kwargs): self._coerce(self._model.inputs, @@ -611,5 +604,5 @@ class PluginSpecification(common._TemplateHandler): def instantiate(self, **kwargs): pass - def dump(self, context): + def dump(self, console): pass http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/50d4c1de/aria/parser/consumption/modeling.py ---------------------------------------------------------------------- diff --git a/aria/parser/consumption/modeling.py b/aria/parser/consumption/modeling.py index 5774630..8216816 100644 --- a/aria/parser/consumption/modeling.py +++ b/aria/parser/consumption/modeling.py @@ -112,7 +112,6 @@ class InstantiateServiceInstance(Consumer): self.context.modeling.template, inputs=dict(self.context.modeling.inputs) ) - ConsumerChain( self.context, (
