From eb5eb37bbbe0e97ddc8a0f2943943e1cabaa0cd1 Mon Sep 17 00:00:00 2001 From: shangxdy Date: Thu, 4 Aug 2016 03:05:47 +0800 Subject: [PATCH] Service template with substitution mapping definition can deployed standalone MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit According to specification of http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.0/TOSCA-Simple-Profile-YAML-v1.0.html,the two main use cases: 1. No matter whether or not the service template has substitution mapping definition,it can be deployed standalone; 2. Also can be imported and used as nested service template substituted a node template with substitution mapping definition; 3. substitution mapping will expose node_type,may expose capabilities and requirements. JIRA:PARSER-78 Change-Id: I81ac940545f946925f6aa96a1b2ca0ccc9bbb076 Signed-off-by: shangxdy --- tosca2heat/tosca-parser/toscaparser/substitution_mappings.py | 12 ++++++++---- tosca2heat/tosca-parser/toscaparser/topology_template.py | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/tosca2heat/tosca-parser/toscaparser/substitution_mappings.py b/tosca2heat/tosca-parser/toscaparser/substitution_mappings.py index 20ec947..7fdce24 100644 --- a/tosca2heat/tosca-parser/toscaparser/substitution_mappings.py +++ b/tosca2heat/tosca-parser/toscaparser/substitution_mappings.py @@ -106,7 +106,8 @@ class Substitution_mappings(object): # The inputs in service template which defines substutition mappings # must be in properties of node template wchich be mapped. inputs_names = list(self.sub_mapped_node_template - .get_properties().keys()) + .get_properties().keys() + if self.sub_mapped_node_template else []) for name in inputs_names: if name not in [input.name for input in self.inputs]: ExceptionCollector.appendException( @@ -118,7 +119,8 @@ class Substitution_mappings(object): # The capabilites must be in node template wchich be mapped. tpls_capabilities = self.sub_mapping_def.get(self.CAPABILITIES) - node_capabiliteys = self.sub_mapped_node_template.get_capabilities() + node_capabiliteys = self.sub_mapped_node_template.get_capabilities() \ + if self.sub_mapped_node_template else None for cap in node_capabiliteys.keys() if node_capabiliteys else []: if (tpls_capabilities and cap not in list(tpls_capabilities.keys())): @@ -132,7 +134,8 @@ class Substitution_mappings(object): # The requirements must be in node template wchich be mapped. tpls_requirements = self.sub_mapping_def.get(self.REQUIREMENTS) - node_requirements = self.sub_mapped_node_template.requirements + node_requirements = self.sub_mapped_node_template.requirements \ + if self.sub_mapped_node_template else None for req in node_requirements if node_requirements else []: if (tpls_requirements and req not in list(tpls_requirements.keys())): @@ -146,7 +149,8 @@ class Substitution_mappings(object): pass # The outputs in service template which defines substutition mappings # must be in atrributes of node template wchich be mapped. - # outputs_names = self.sub_mapped_node_template.get_properties().keys() + # outputs_names = self.sub_mapped_node_template.get_properties(). + # keys() if self.sub_mapped_node_template else None # for name in outputs_names: # if name not in [output.name for input in self.outputs]: # ExceptionCollector.appendException( diff --git a/tosca2heat/tosca-parser/toscaparser/topology_template.py b/tosca2heat/tosca-parser/toscaparser/topology_template.py index 4039257..0407653 100644 --- a/tosca2heat/tosca-parser/toscaparser/topology_template.py +++ b/tosca2heat/tosca-parser/toscaparser/topology_template.py @@ -110,7 +110,7 @@ class TopologyTemplate(object): def _substitution_mappings(self): tpl_substitution_mapping = self._tpl_substitution_mappings() - if tpl_substitution_mapping and self.sub_mapped_node_template: + if tpl_substitution_mapping: return Substitution_mappings(tpl_substitution_mapping, self.nodetemplates, self.inputs, -- 2.16.6