def _parse_template_input(self, context, nsd): nsd_dict = nsd['nsd'] nsd_yaml = nsd_dict['attributes'].get('nsd') inner_nsd_dict = yaml.safe_load(nsd_yaml) nsd['vnfds'] = dict() LOG.debug('nsd_dict: %s', inner_nsd_dict) vnfm_plugin = manager.TackerManager.get_service_plugins()['VNFM'] vnfd_imports = inner_nsd_dict.get('imports') if not vnfd_imports: LOG.error('VNFD import section is missing') raise nfvo.ToscaParserFailed( error_msg_details='VNFD import section is missing') inner_nsd_dict['imports'] = [] new_files = [] for vnfd_name in vnfd_imports: vnfd = vnfm_plugin.get_vnfd(context, vnfd_name) # Copy VNF types and VNF names sm_dict = yaml.safe_load(vnfd['attributes']['vnfd'])[ 'topology_template'][ 'substitution_mappings'] nsd['vnfds'][sm_dict['node_type']] = vnfd['name'] # Ugly Hack to validate the child templates # TODO(tbh): add support in tosca-parser to pass child # templates as dict fd, temp_path = mkstemp() with open(temp_path, 'w') as fp: fp.write(vnfd['attributes']['vnfd']) os.close(fd) new_files.append(temp_path) inner_nsd_dict['imports'].append(temp_path) # Prepend the tacker_defs.yaml import file with the full # path to the file toscautils.updateimports(inner_nsd_dict) try: ToscaTemplate(a_file=False, yaml_dict_tpl=inner_nsd_dict) except Exception as e: LOG.exception("tosca-parser error: %s", str(e)) raise nfvo.ToscaParserFailed(error_msg_details=str(e)) finally: for file_path in new_files: os.remove(file_path) inner_nsd_dict['imports'] = vnfd_imports if ('description' not in nsd_dict or nsd_dict['description'] == ''): nsd_dict['description'] = inner_nsd_dict.get( 'description', '') if (('name' not in nsd_dict or not len(nsd_dict['name'])) and 'metadata' in inner_nsd_dict): nsd_dict['name'] = inner_nsd_dict['metadata'].get( 'template_name', '') LOG.debug('nsd %s', nsd)
def validate_tosca(self, template): if "tosca_definitions_version" not in template: raise nfvo.ToscaParserFailed( error_msg_details='tosca_definitions_version missing in ' 'template') LOG.debug('template yaml: %s', template) toscautils.updateimports(template) try: tosca_template.ToscaTemplate(a_file=False, yaml_dict_tpl=template) except Exception as e: LOG.exception("tosca-parser error: %s", str(e)) raise nfvo.ToscaParserFailed(error_msg_details=str(e))