# Copyright 2016-2017 ZTE Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # 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. import json def safe_get(key_val, key): return key_val[key] if key in key_val else "" def find_node_name(node_id, node_list): for node in node_list: if node['id'] == node_id: return node['template_name'] raise Exception('can not find node(%s).' % node_id) def find_node_type(node_id, node_list): for node in node_list: if node['id'] == node_id: return node['type_name'] raise Exception('can not find node(%s).' % node_id) def find_related_node(node_id, src_json_model, requirement_name): related_nodes = [] for model_tpl in safe_get(src_json_model, "node_templates"): for rt in safe_get(model_tpl, 'requirement_templates'): if safe_get(rt, 'name') == requirement_name and safe_get(rt, 'target_node_template_name') == node_id: related_nodes.append(model_tpl['name']) return related_nodes def convert_props(src_node, dest_node): if 'properties' in src_node and src_node['properties']: for prop_name, prop_info in list(src_node['properties'].items()): if 'value' in prop_info: dest_node['properties'][prop_name] = prop_info['value'] def convert_metadata(src_json): return src_json['metadata'] if 'metadata' in src_json else {} def convert_inputs(src_json): inputs = {} if 'inputs' in src_json: src_inputs = src_json['inputs'] for param_name, param_info in list(src_inputs.items()): input_param = {} if 'type_name' in param_info: input_param['type'] = param_info['type_name'] if 'description' in param_info: input_param['description'] = param_info['description'] if 'value' in param_info: input_param['value'] = param_info['value'] inputs[param_name] = input_param return inputs def convert_vnf_node(src_node, src_json_model): vnf_node = { 'type': src_node['type_name'], 'vnf_id': src_node['template_name'], 'description': '', 'properties': {}, 'dependencies': [], 'networks': [] } convert_props(src_node, vnf_node) for model_tpl in safe_get(src_json_model, "node_templates"): if model_tpl['name'] != vnf_node['vnf_id']: continue vnf_node['dependencies'] = [ { 'key_name': requirement['name'], 'vl_id': requirement['target_node_template_name'] } for requirement in safe_get(model_tpl, 'requirement_templates') if safe_get(requirement, 'target_capability_name') == 'virtual_linkable' ] vnf_node['networks'] = [requirement['target_node_template_name'] for requirement in safe_get(model_tpl, 'requirement_templates') if safe_get(requirement, 'name') == 'dependency'] return vnf_node def convert_pnf_node(src_node, src_json_model): pnf_node = {'pnf_id': src_node['template_name'], 'description': '', 'properties': {}} convert_props(src_node, pnf_node) pnf_node['cps'] = find_related_node(src_node['id'], src_json_model, 'virtualbinding') return pnf_node def convert_vl_node(src_node, src_node_list): vl_node = {'vl_id': src_node['template_name'], 'description': '', 'properties': {}} convert_props(src_node, vl_node) vl_node['route_id'] = '' for relation in safe_get(src_node, 'relationships'): if safe_get(relation, 'type_name').endswith('.VirtualLinksTo'): vl_node['route_id'] = find_node_name(relation['target_node_id'], src_node_list) break vl_node['route_external'] = (src_node['type_name'].find('.RouteExternalVL') > 0) return vl_node def convert_cp_node(src_node, src_node_list, model_type='NSD'): cp_node = {'cp_id': src_node['template_name'], 'description': '', 'properties': {}} convert_props(src_node, cp_node) src_relationships = src_node['relationships'] for relation in src_relationships: if safe_get(relation, 'name') == 'virtualLink': cp_node['vl_id'] = find_node_name(relation['target_node_id'], src_node_list) elif safe_get(relation, 'name') == 'virtualbinding': node_key = 'pnf_id' if model_type == 'NSD' else 'vdu_id' cp_node[node_key] = find_node_name(relation['target_node_id'], src_node_list) return cp_node def convert_router_node(src_node, src_node_list): router_node = {'router_id': src_node['template_name'], 'description': '', 'properties': {}} convert_props(src_node, router_node) for relation in src_node['relationships']: if safe_get(relation, 'name') != 'external_virtual_link': continue router_node['external_vl_id'] = find_node_name(relation['target_node_id'], src_node_list) router_node['external_ip_addresses'] = [] if 'properties' not in relation: continue for prop_name, prop_info in list(relation['properties'].items()): if prop_name == 'router_ip_address': router_node['external_ip_addresses'].append(prop_info['value']) break return router_node def convert_fp_node(src_node, src_node_list, src_json_model): fp_node = { 'fp_id': src_node['template_name'], 'description': '', 'properties': {}, 'forwarder_list': [] } convert_props(src_node, fp_node) for relation in safe_get(src_node, 'relationships'): if safe_get(relation, 'name') != 'forwarder': continue forwarder_point = {'type': 'vnf'} target_node_type = find_node_type(relation['target_node_id'], src_node_list).upper() if target_node_type.find('.CP.') >= 0 or target_node_type.endswith('.CP'): forwarder_point['type'] = 'cp' forwarder_point['node_name'] = find_node_name(relation['target_node_id'], src_node_list) forwarder_point['capability'] = '' if forwarder_point['type'] == 'vnf': for node_tpl in src_json_model["node_templates"]: if fp_node['fp_id'] != node_tpl["name"]: continue for r_tpl in safe_get(node_tpl, "requirement_templates"): if safe_get(r_tpl, "target_node_template_name") != forwarder_point['node_name']: continue forwarder_point['capability'] = safe_get(r_tpl, "target_capability_name") break break fp_node['forwarder_list'].append(forwarder_point) return fp_node def convert_vnffg_group(src_group, src_group_list, src_node_list): vnffg = { 'vnffg_id': src_group['template_name'], 'description': '', 'properties': {}, 'members': [] } convert_props(src_group, vnffg) for member_node_id in src_group['member_node_ids']: vnffg['members'].append(find_node_name(member_node_id, src_node_list)) return vnffg def convert_imagefile_node(src_node, src_node_list): image_node = { 'image_file_id': src_node['template_name'], 'description': '', 'properties': {} } convert_props(src_node, image_node) return image_node def convert_localstorage_node(src_node, src_node_list): localstorage_node = { 'local_storage_id': src_node['template_name'], 'description': '', 'properties': {} } convert_props(src_node, localstorage_node) return localstorage_node def convert_vdu_node(src_node, src_node_list, src_json_model): vdu_node = { 'vdu_id': src_node['template_name'], 'description': '', 'properties': {}, 'image_file': '', 'local_storages': [], 'dependencies': [], 'nfv_compute': {}, 'vls': [], 'artifacts': [] } convert_props(src_node, vdu_node) for relation in src_node['relationships']: r_id, r_name = safe_get(relation, 'target_node_id'), safe_get(relation, 'name') if r_name == 'guest_os': vdu_node['image_file'] = find_node_name(r_id, src_node_list) elif r_name == 'local_storage': vdu_node['local_storages'].append(find_node_name(r_id, src_node_list)) elif r_name.endswith('.AttachesTo'): nt = find_node_type(r_id, src_node_list) if nt.endswith('.BlockStorage.Local') or nt.endswith('.LocalStorage'): vdu_node['local_storages'].append(find_node_name(r_id, src_node_list)) for capability in src_node['capabilities']: if capability['name'] != 'nfv_compute': continue for prop_name, prop_info in list(capability['properties'].items()): if 'value' in prop_info: vdu_node['nfv_compute'][prop_name] = prop_info['value'] vdu_node['cps'] = find_related_node(src_node['id'], src_json_model, 'virtualbinding') for cp_node in vdu_node['cps']: for src_cp_node in src_node_list: if src_cp_node['template_name'] != cp_node: continue for relation in safe_get(src_cp_node, 'relationships'): if relation['name'] != 'virtualLink': continue vl_node_name = find_node_name(relation['target_node_id'], src_node_list) if vl_node_name not in vdu_node['vls']: vdu_node['vls'].append(vl_node_name) for item in safe_get(src_node, 'artifacts'): artifact = { 'artifact_name': item['name'], 'type': item['type_name'], 'file': item['source_path'] } vdu_node['artifacts'].append(artifact) return vdu_node def convert_exposed_node(src_json, src_nodes, exposed): for item in safe_get(safe_get(src_json, 'substitution'), 'requirements'): external_cps = { 'key_name': item['mapped_name'], "cp_id": find_node_name(item['node_id'], src_nodes) } exposed['external_cps'].append(external_cps) for item in safe_get(safe_get(src_json, 'substitution'), 'capabilities'): forward_cps = { 'key_name': item['mapped_name'], "cp_id": find_node_name(item['node_id'], src_nodes) } exposed['forward_cps'].append(forward_cps) def convert_vnffgs(src_json_inst, src_nodes): vnffgs = [] src_groups = safe_get(src_json_inst, 'groups') for group in src_groups: type_name = group['type_name'].upper() if type_name.find('.VNFFG.') >= 0 or type_name.endswith('.VNFFG'): vnffgs.append(convert_vnffg_group(group, src_groups, src_nodes)) return vnffgs def convert_common(src_json, target_json): if isinstance(src_json, str): src_json_dict = json.loads(src_json) else: src_json_dict = src_json src_json_inst = src_json_dict["instance"] src_json_model = src_json_dict["model"] if "model" in src_json_dict else {} target_json['metadata'] = convert_metadata(src_json_inst) target_json['inputs'] = convert_inputs(src_json_inst) target_json['vls'] = [] target_json['cps'] = [] target_json['routers'] = [] return src_json_inst, src_json_model def convert_policy_node(src_json): target_json = { 'name': src_json['template_name'], 'file_url': src_json['properties']['drl_file_url']['value'] } return target_json def convert_nsd_model(src_json): target_json = {'vnfs': [], 'pnfs': [], 'fps': [], 'policies': []} src_json_inst, src_json_model = convert_common(src_json, target_json) src_nodes = src_json_inst['nodes'] for node in src_nodes: type_name = node['type_name'] if type_name.find('.VNF.') > 0 or type_name.endswith('.VNF'): target_json['vnfs'].append(convert_vnf_node(node, src_json_model)) elif type_name.find('.PNF.') > 0 or type_name.endswith('.PNF'): target_json['pnfs'].append(convert_pnf_node(node, src_json_model)) elif type_name.find('.VL.') > 0 or type_name.endswith('.VL') \ or node['type_name'].find('.RouteExternalVL') > 0: target_json['vls'].append(convert_vl_node(node, src_nodes)) elif type_name.find('.CP.') > 0 or type_name.endswith('.CP'): target_json['cps'].append(convert_cp_node(node, src_nodes)) elif type_name.find('.FP.') > 0 or type_name.endswith('.FP'): target_json['fps'].append(convert_fp_node(node, src_nodes, src_json_model)) elif type_name.endswith('.Router'): target_json['routers'].append(convert_router_node(node, src_nodes)) elif type_name.endswith('tosca.policies.Drools'): target_json['policies'].append(convert_policy_node(node)) target_json['vnffgs'] = convert_vnffgs(src_json_inst, src_nodes) target_json['ns_exposed'] = {'external_cps': [], 'forward_cps': []} convert_exposed_node(src_json_inst, src_nodes, target_json['ns_exposed']) return json.dumps(target_json) def convert_vnfd_model(src_json): target_json = {'image_files': [], 'local_storages': [], 'vdus': []} src_json_inst, src_json_model = convert_common(src_json, target_json) if "vnfdVersion" in src_json_inst.get("metadata", {}): from . import toscautil_new return toscautil_new.convert_vnfd_model(src_json) src_nodes = src_json_inst['nodes'] for node in src_nodes: type_name = node['type_name'] if type_name.endswith('.ImageFile'): target_json['image_files'].append(convert_imagefile_node(node, src_nodes)) elif type_name.endswith('.BlockStorage.Local') or type_name.endswith('.LocalStorage'): target_json['local_storages'].append(convert_localstorage_node(node, src_nodes)) elif type_name.find('.VDU.') > 0 or type_name.endswith('.VDU'): target_json['vdus'].append(convert_vdu_node(node, src_nodes, src_json_model)) elif type_name.find('.VL.') > 0 or type_name.endswith('.VL') \ or node['type_name'].find('.RouteExternalVL') > 0: target_json['vls'].append(convert_vl_node(node, src_nodes)) elif type_name.find('.CP.') > 0 or type_name.endswith('.CP'): target_json['cps'].append(convert_cp_node(node, src_nodes, 'VNFD')) elif type_name.endswith('.Router'): target_json['routers'].append(convert_router_node(node, src_nodes)) target_json['vnf_exposed'] = {'external_cps': [], 'forward_cps': []} convert_exposed_node(src_json_inst, src_nodes, target_json['vnf_exposed']) return json.dumps(target_json) if __name__ == '__main__': src_json = json.dumps( { "instance": { "metadata": { "vendor": "ZTE", "name": "VCPE_NS", "csarVersion": "v1.0", "csarType": "NSAR", "csarProvider": "ZTE", "version": 1, "invariant_id": "vcpe_ns_sff_1", "id": "VCPE_NS", "description": "vcpe_ns" }, "policies:": [ { "aaa:": { "type": "tosca.policies.Drools", "properties": { "drl_file_url": "policies/abc.drl" } } } ], "nodes": [ { "id": "policies", "type_name": "tosca.policies.Drools", "template_name": "aaa", "properties": { "drl_file_url": { "type_name": "string", "value": "policies/abc.drl" } } }, { "id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "type_name": "tosca.nodes.nfv.ext.FP", "template_name": "path2", "properties": { "symmetric": { "type_name": "boolean", "value": False }, "policy": { "type_name": "tosca.datatypes.nfv.ext.FPPolicy", "value": { "type": "ACL", "criteria": { "dest_port_range": "1-100", "ip_protocol": "tcp", "source_ip_range": [ "119.1.1.1-119.1.1.10" ], "dest_ip_range": [ { "get_input": "NatIpRange" } ], "dscp": 0, "source_port_range": "1-100" } } } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" } ], "relationships": [ { "name": "forwarder", "source_requirement_index": 0, "target_node_id": "m6000_data_out_qeukdtf6g87cnparxi51fa8s6" }, { "name": "forwarder", "source_requirement_index": 1, "target_node_id": "m600_tunnel_cp_imwfk5l48ljz0g9knc6d68hv5" }, { "name": "forwarder", "source_requirement_index": 2, "target_node_id": "VNAT_cfdljtspvkp234irka59wgab0", "target_capability_name": "feature" } ] }, { "id": "path1_bv53fblv26hawr8dj4fxe2rsd", "type_name": "tosca.nodes.nfv.ext.FP", "template_name": "path1", "properties": { "symmetric": { "type_name": "boolean", "value": True }, "policy": { "type_name": "tosca.datatypes.nfv.ext.FPPolicy", "value": { "type": "ACL", "criteria": { "dest_port_range": "1-100", "ip_protocol": "tcp", "source_ip_range": [ "1-100" ], "dest_ip_range": [ "1-100" ], "dscp": 4, "source_port_range": "1-100" } } } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" } ], "relationships": [ { "name": "forwarder", "source_requirement_index": 0, "target_node_id": "m6000_data_in_eldly5txw4frny3cc349uz3nc" }, { "name": "forwarder", "source_requirement_index": 1, "target_node_id": "m600_tunnel_cp_imwfk5l48ljz0g9knc6d68hv5" }, { "name": "forwarder", "source_requirement_index": 2, "target_node_id": "VFW_57z0ua89aiyl8ncvw7h7mjf34", "target_capability_name": "feature" }, { "name": "forwarder", "source_requirement_index": 3, "target_node_id": "VNAT_cfdljtspvkp234irka59wgab0", "target_capability_name": "feature" }, { "name": "forwarder", "source_requirement_index": 4, "target_node_id": "m600_tunnel_cp_imwfk5l48ljz0g9knc6d68hv5" }, { "name": "forwarder", "source_requirement_index": 5, "target_node_id": "m6000_data_out_qeukdtf6g87cnparxi51fa8s6" } ] }, { "id": "m6000_data_out_qeukdtf6g87cnparxi51fa8s6", "type_name": "tosca.nodes.nfv.ext.zte.CP", "template_name": "m6000_data_out", "properties": { "direction": { "type_name": "string", "value": "bidirectional" }, "vnic_type": { "type_name": "string", "value": "normal" }, "bandwidth": { "type_name": "integer", "value": 0 }, "mac_address": { "type_name": "string", "value": "11-22-33-22-11-44" }, "interface_name": { "type_name": "string", "value": "xgei-0/4/1/5" }, "ip_address": { "type_name": "string", "value": "176.1.1.2" }, "order": { "type_name": "integer", "value": 0 }, "sfc_encapsulation": { "type_name": "string", "value": "mac" } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "relationships": [ { "name": "virtualbinding", "source_requirement_index": 0, "target_node_id": "m6000_s_7qtzo5nuocyfmebc6kp9raq18", "target_capability_name": "feature" }, { "name": "virtualLink", "source_requirement_index": 1, "target_node_id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "target_capability_name": "feature" }, { "name": "forwarder", "source_requirement_index": 2, "target_node_id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "target_capability_name": "feature" } ] }, { "id": "VFW_57z0ua89aiyl8ncvw7h7mjf34", "type_name": "tosca.nodes.nfv.ext.zte.VNF.VFW", "template_name": "VFW", "properties": { "is_shared": { "type_name": "boolean", "value": False }, "plugin_info": { "type_name": "string", "value": "vbrasplugin_1.0" }, "vendor": { "type_name": "string", "value": "zte" }, "request_reclassification": { "type_name": "boolean", "value": False }, "vnf_extend_type": { "type_name": "string", "value": "driver" }, "name": { "type_name": "string", "value": "VFW" }, "version": { "type_name": "string", "value": "1.0" }, "cross_dc": { "type_name": "boolean", "value": False }, "vnf_type": { "type_name": "string", "value": "VFW" }, "vnfd_version": { "type_name": "string", "value": "1.0.0" }, "id": { "type_name": "string", "value": "vcpe_vfw_zte_1_0" }, "nsh_aware": { "type_name": "boolean", "value": True }, "adjust_vnf_capacity": { "type_name": "boolean", "value": True }, "vmnumber_overquota_alarm": { "type_name": "boolean", "value": True }, "csarProvider": { "type_name": "string", "value": "ZTE" }, "csarVersion": { "type_name": "string", "value": "v1.0" }, "externalPluginManageNetworkName": { "type_name": "string", "value": "vlan_4007_plugin_net" }, "csarType": { "type_name": "string", "value": "NFAR" } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" }, { "name": "vfw_fw_inout", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "relationships": [ { "name": "vfw_ctrl_by_manager_cp", "source_requirement_index": 0, "target_node_id": "ext_mnet_net_au2otee5mcy0dnpqykj487zr3", "target_capability_name": "feature" }, { "name": "vfw_data_cp", "source_requirement_index": 1, "target_node_id": "sfc_data_network_vx3pc1oahn0k0pa5q722yafee", "target_capability_name": "feature" }, { "name": "virtualLink", "source_requirement_index": 2, "target_node_id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "target_capability_name": "feature" }, { "name": "forwarder", "source_requirement_index": 3, "target_node_id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "target_capability_name": "feature" } ] }, { "id": "m600_tunnel_cp_imwfk5l48ljz0g9knc6d68hv5", "type_name": "tosca.nodes.nfv.ext.zte.CP", "template_name": "m600_tunnel_cp", "properties": { "direction": { "type_name": "string", "value": "bidirectional" }, "vnic_type": { "type_name": "string", "value": "normal" }, "bandwidth": { "type_name": "integer", "value": 0 }, "mac_address": { "type_name": "string", "value": "00-11-00-22-33-00" }, "interface_name": { "type_name": "string", "value": "gei-0/4/0/13" }, "ip_address": { "type_name": "string", "value": "191.167.100.5" }, "order": { "type_name": "integer", "value": 0 }, "sfc_encapsulation": { "type_name": "string", "value": "mac" } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "relationships": [ { "name": "virtualLink", "source_requirement_index": 0, "target_node_id": "ext_datanet_net_qtqzlx5dsthzs883hxjn6hyhd", "target_capability_name": "feature" }, { "name": "virtualbinding", "source_requirement_index": 1, "target_node_id": "m6000_s_7qtzo5nuocyfmebc6kp9raq18", "target_capability_name": "feature" }, { "name": "forwarder", "source_requirement_index": 2, "target_node_id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "target_capability_name": "feature" } ] }, { "id": "ext_mnet_net_au2otee5mcy0dnpqykj487zr3", "type_name": "tosca.nodes.nfv.ext.VL.Vmware", "template_name": "ext_mnet_net", "properties": { "name": { "type_name": "string", "value": "vlan_4008_mng_net" }, "dhcp_enabled": { "type_name": "boolean", "value": True }, "location_info": { "type_name": "tosca.datatypes.nfv.ext.LocationInfo", "value": { "tenant": "admin", "vimid": 2, "availability_zone": "nova" } }, "ip_version": { "type_name": "integer", "value": 4 }, "mtu": { "type_name": "integer", "value": 1500 }, "network_name": { "type_name": "string", "value": "vlan_4008_mng_net" }, "network_type": { "type_name": "string", "value": "vlan" } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "virtual_linkable", "type_name": "tosca.capabilities.nfv.VirtualLinkable" } ] }, { "id": "m6000_data_in_eldly5txw4frny3cc349uz3nc", "type_name": "tosca.nodes.nfv.ext.zte.CP", "template_name": "m6000_data_in", "properties": { "direction": { "type_name": "string", "value": "bidirectional" }, "vnic_type": { "type_name": "string", "value": "normal" }, "bandwidth": { "type_name": "integer", "value": 0 }, "mac_address": { "type_name": "string", "value": "11-22-33-22-11-41" }, "interface_name": { "type_name": "string", "value": "gei-0/4/0/7" }, "ip_address": { "type_name": "string", "value": "1.1.1.1" }, "order": { "type_name": "integer", "value": 0 }, "sfc_encapsulation": { "type_name": "string", "value": "mac" }, "bond": { "type_name": "string", "value": "none" } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "relationships": [ { "name": "virtualbinding", "source_requirement_index": 0, "target_node_id": "m6000_s_7qtzo5nuocyfmebc6kp9raq18", "target_capability_name": "feature" }, { "name": "virtualLink", "source_requirement_index": 1, "target_node_id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "target_capability_name": "feature" }, { "name": "forwarder", "source_requirement_index": 2, "target_node_id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "target_capability_name": "feature" } ] }, { "id": "ext_datanet_net_qtqzlx5dsthzs883hxjn6hyhd", "type_name": "tosca.nodes.nfv.ext.VL.Vmware", "template_name": "ext_datanet_net", "properties": { "name": { "type_name": "string", "value": "vlan_4004_tunnel_net" }, "dhcp_enabled": { "type_name": "boolean", "value": True }, "location_info": { "type_name": "tosca.datatypes.nfv.ext.LocationInfo", "value": { "tenant": "admin", "vimid": 2, "availability_zone": "nova" } }, "ip_version": { "type_name": "integer", "value": 4 }, "mtu": { "type_name": "integer", "value": 1500 }, "network_name": { "type_name": "string", "value": "vlan_4004_tunnel_net" }, "network_type": { "type_name": "string", "value": "vlan" } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "virtual_linkable", "type_name": "tosca.capabilities.nfv.VirtualLinkable" } ] }, { "id": "m600_mnt_cp_l3488y2a8ilyfdn0l89ni4os7", "type_name": "tosca.nodes.nfv.ext.zte.CP", "template_name": "m600_mnt_cp", "properties": { "direction": { "type_name": "string", "value": "bidirectional" }, "vnic_type": { "type_name": "string", "value": "normal" }, "bandwidth": { "type_name": "integer", "value": 0 }, "mac_address": { "type_name": "string", "value": "00-11-00-22-33-11" }, "interface_name": { "type_name": "string", "value": "gei-0/4/0/1" }, "ip_address": { "type_name": "string", "value": "10.46.244.51" }, "order": { "type_name": "integer", "value": 0 }, "sfc_encapsulation": { "type_name": "string", "value": "mac" }, "bond": { "type_name": "string", "value": "none" } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "relationships": [ { "name": "virtualLink", "source_requirement_index": 0, "target_node_id": "ext_mnet_net_au2otee5mcy0dnpqykj487zr3", "target_capability_name": "feature" }, { "name": "virtualbinding", "source_requirement_index": 1, "target_node_id": "m6000_s_7qtzo5nuocyfmebc6kp9raq18", "target_capability_name": "feature" }, { "name": "forwarder", "source_requirement_index": 2, "target_node_id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "target_capability_name": "feature" } ] }, { "id": "sfc_data_network_vx3pc1oahn0k0pa5q722yafee", "type_name": "tosca.nodes.nfv.ext.zte.VL", "template_name": "sfc_data_network", "properties": { "name": { "type_name": "string", "value": "sfc_data_network" }, "dhcp_enabled": { "type_name": "boolean", "value": True }, "is_predefined": { "type_name": "boolean", "value": False }, "location_info": { "type_name": "tosca.datatypes.nfv.ext.LocationInfo", "value": { "tenant": "admin", "vimid": 2, "availability_zone": "nova" } }, "ip_version": { "type_name": "integer", "value": 4 }, "mtu": { "type_name": "integer", "value": 1500 }, "network_name": { "type_name": "string", "value": "sfc_data_network" }, "network_type": { "type_name": "string", "value": "vlan" } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "virtual_linkable", "type_name": "tosca.capabilities.nfv.VirtualLinkable" } ] }, { "id": "m6000_s_7qtzo5nuocyfmebc6kp9raq18", "type_name": "tosca.nodes.nfv.ext.PNF", "template_name": "m6000_s", "properties": { "vendor": { "type_name": "string", "value": "zte" }, "request_reclassification": { "type_name": "boolean", "value": False }, "pnf_type": { "type_name": "string", "value": "m6000s" }, "version": { "type_name": "string", "value": "1.0" }, "management_address": { "type_name": "string", "value": "111111" }, "id": { "type_name": "string", "value": "m6000_s" }, "nsh_aware": { "type_name": "boolean", "value": False } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "virtualBinding", "type_name": "tosca.capabilities.nfv.VirtualBindable" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "relationships": [ { "name": "forwarder", "source_requirement_index": 0, "target_node_id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "target_capability_name": "feature" } ] }, { "id": "VNAT_cfdljtspvkp234irka59wgab0", "type_name": "tosca.nodes.nfv.ext.zte.VNF.VNAT", "template_name": "VNAT", "properties": { "is_shared": { "type_name": "boolean", "value": False }, "plugin_info": { "type_name": "string", "value": "vbrasplugin_1.0" }, "vendor": { "type_name": "string", "value": "zte" }, "request_reclassification": { "type_name": "boolean", "value": False }, "name": { "type_name": "string", "value": "VNAT" }, "vnf_extend_type": { "type_name": "string", "value": "driver" }, "externalPluginManageNetworkName": { "type_name": "string", "value": "vlan_4007_plugin_net" }, "version": { "type_name": "string", "value": "1.0" }, "cross_dc": { "type_name": "boolean", "value": False }, "vnf_type": { "type_name": "string", "value": "VNAT" }, "vnfd_version": { "type_name": "string", "value": "1.0.0" }, "id": { "type_name": "string", "value": "vcpe_vnat_zte_1" }, "nsh_aware": { "type_name": "boolean", "value": True }, "adjust_vnf_capacity": { "type_name": "boolean", "value": True }, "vmnumber_overquota_alarm": { "type_name": "boolean", "value": True }, "csarProvider": { "type_name": "string", "value": "ZTE" }, "NatIpRange": { "type_name": "string", "value": "192.167.0.10-192.168.0.20" }, "csarVersion": { "type_name": "string", "value": "v1.0" }, "csarType": { "type_name": "string", "value": "NFAR" } }, "interfaces": [ { "name": "Standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "capabilities": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" }, { "name": "vnat_fw_inout", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "relationships": [ { "name": "vnat_ctrl_by_manager_cp", "source_requirement_index": 0, "target_node_id": "ext_mnet_net_au2otee5mcy0dnpqykj487zr3", "target_capability_name": "feature" }, { "name": "vnat_data_cp", "source_requirement_index": 1, "target_node_id": "sfc_data_network_vx3pc1oahn0k0pa5q722yafee", "target_capability_name": "feature" }, { "name": "virtualLink", "source_requirement_index": 2, "target_node_id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "target_capability_name": "feature" }, { "name": "forwarder", "source_requirement_index": 3, "target_node_id": "path2_kgmfqr5ldqs9lj3oscrgxqefc", "target_capability_name": "feature" } ] } ], "groups": [ { "id": "vnffg1_wk1aqhk6exoh5fmds2unu0uyc", "type_name": "tosca.groups.nfv.VNFFG", "template_name": "vnffg1", "properties": { "vendor": { "type_name": "string", "value": "zte" }, "connection_point": { "type_name": "list", "value": [ "m6000_data_in", "m600_tunnel_cp", "m6000_data_out" ] }, "version": { "type_name": "string", "value": "1.0" }, "constituent_vnfs": { "type_name": "list", "value": [ "VFW", "VNAT" ] }, "number_of_endpoints": { "type_name": "integer", "value": 3 }, "dependent_virtual_link": { "type_name": "list", "value": [ "sfc_data_network", "ext_datanet_net", "ext_mnet_net" ] } }, "interfaces": [ { "name": "standard", "description": "This lifecycle interface defines the essential, normative operations that TOSCA nodes may support.", "type_name": "tosca.interfaces.node.lifecycle.Standard", "operations": [ { "name": "create", "description": "Standard lifecycle create operation." }, { "name": "stop", "description": "Standard lifecycle stop operation." }, { "name": "start", "description": "Standard lifecycle start operation." }, { "name": "delete", "description": "Standard lifecycle delete operation." }, { "name": "configure", "description": "Standard lifecycle configure operation." } ] } ], "member_node_ids": [ "path1_bv53fblv26hawr8dj4fxe2rsd", "path2_kgmfqr5ldqs9lj3oscrgxqefc" ] } ], "substitution": { "node_type_name": "tosca.nodes.nfv.NS.VCPE_NS" }, "inputs": { "externalDataNetworkName": { "type_name": "string", "value": "vlan_4004_tunnel_net" }, "sfc_data_network": { "type_name": "string", "value": "sfc_data_network" }, "NatIpRange": { "type_name": "string", "value": "192.167.0.10-192.168.0.20" }, "externalManageNetworkName": { "type_name": "string", "value": "vlan_4008_mng_net" }, "externalPluginManageNetworkName": { "type_name": "string", "value": "vlan_4007_plugin_net" } } }, "model": { "metadata": { "vendor": "ZTE", "name": "VCPE_NS", "csarVersion": "v1.0", "csarType": "NSAR", "csarProvider": "ZTE", "version": 1, "invariant_id": "vcpe_ns_sff_1", "id": "VCPE_NS", "description": "vcpe_ns" }, "node_templates": [ { "name": "path2", "type_name": "tosca.nodes.nfv.ext.FP", "default_instances": 1, "min_instances": 0, "properties": { "symmetric": { "type_name": "boolean", "value": False }, "policy": { "type_name": "tosca.datatypes.nfv.ext.FPPolicy", "value": { "type": "ACL", "criteria": { "dest_port_range": "1-100", "ip_protocol": "tcp", "source_ip_range": [ "119.1.1.1-119.1.1.10" ], "dest_ip_range": [ { "get_input": "NatIpRange" } ], "dscp": 0, "source_port_range": "1-100" } } } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" } ], "requirement_templates": [ { "name": "forwarder", "target_node_template_name": "m6000_data_out" }, { "name": "forwarder", "target_node_template_name": "m600_tunnel_cp" }, { "name": "forwarder", "target_node_template_name": "VNAT", "target_capability_name": "vnat_fw_inout" } ] }, { "name": "path1", "type_name": "tosca.nodes.nfv.ext.FP", "default_instances": 1, "min_instances": 0, "properties": { "symmetric": { "type_name": "boolean", "value": True }, "policy": { "type_name": "tosca.datatypes.nfv.ext.FPPolicy", "value": { "type": "ACL", "criteria": { "dest_port_range": "1-100", "ip_protocol": "tcp", "source_ip_range": [ "1-100" ], "dest_ip_range": [ "1-100" ], "dscp": 4, "source_port_range": "1-100" } } } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" } ], "requirement_templates": [ { "name": "forwarder", "target_node_template_name": "m6000_data_in" }, { "name": "forwarder", "target_node_template_name": "m600_tunnel_cp" }, { "name": "forwarder", "target_node_template_name": "VFW", "target_capability_name": "vfw_fw_inout" }, { "name": "forwarder", "target_node_template_name": "VNAT", "target_capability_name": "vnat_fw_inout" }, { "name": "forwarder", "target_node_template_name": "m600_tunnel_cp" }, { "name": "forwarder", "target_node_template_name": "m6000_data_out" } ] }, { "name": "m6000_data_out", "type_name": "tosca.nodes.nfv.ext.zte.CP", "default_instances": 1, "min_instances": 0, "properties": { "direction": { "type_name": "string", "value": "bidirectional" }, "vnic_type": { "type_name": "string", "value": "normal" }, "bandwidth": { "type_name": "integer", "value": 0 }, "mac_address": { "type_name": "string", "value": "11-22-33-22-11-44" }, "interface_name": { "type_name": "string", "value": "xgei-0/4/1/5" }, "ip_address": { "type_name": "string", "value": "176.1.1.2" }, "order": { "type_name": "integer", "value": 0 }, "sfc_encapsulation": { "type_name": "string", "value": "mac" } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "requirement_templates": [ { "name": "virtualbinding", "target_node_template_name": "m6000_s", "target_capability_name": "virtualBinding" }, { "name": "virtualLink", "target_node_type_name": "tosca.nodes.Root" }, { "name": "forwarder", "target_node_type_name": "tosca.nodes.Root" } ] }, { "name": "VFW", "type_name": "tosca.nodes.nfv.ext.zte.VNF.VFW", "default_instances": 1, "min_instances": 0, "properties": { "is_shared": { "type_name": "boolean", "value": False }, "plugin_info": { "type_name": "string", "value": "vbrasplugin_1.0" }, "vendor": { "type_name": "string", "value": "zte" }, "request_reclassification": { "type_name": "boolean", "value": False }, "vnf_extend_type": { "type_name": "string", "value": "driver" }, "name": { "type_name": "string", "value": "VFW" }, "version": { "type_name": "string", "value": "1.0" }, "cross_dc": { "type_name": "boolean", "value": False }, "vnf_type": { "type_name": "string", "value": "VFW" }, "vnfd_version": { "type_name": "string", "value": "1.0.0" }, "id": { "type_name": "string", "value": "vcpe_vfw_zte_1_0" }, "nsh_aware": { "type_name": "boolean", "value": True }, "adjust_vnf_capacity": { "type_name": "boolean", "value": True }, "vmnumber_overquota_alarm": { "type_name": "boolean", "value": True }, "csarProvider": { "type_name": "string", "value": "ZTE" }, "csarVersion": { "type_name": "string", "value": "v1.0" }, "externalPluginManageNetworkName": { "type_name": "string", "value": "vlan_4007_plugin_net" }, "csarType": { "type_name": "string", "value": "NFAR" } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" }, { "name": "vfw_fw_inout", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "requirement_templates": [ { "name": "vfw_ctrl_by_manager_cp", "target_node_template_name": "ext_mnet_net", "target_capability_name": "virtual_linkable" }, { "name": "vfw_data_cp", "target_node_template_name": "sfc_data_network", "target_capability_name": "virtual_linkable" }, { "name": "virtualLink", "target_node_type_name": "tosca.nodes.Root" }, { "name": "forwarder", "target_node_type_name": "tosca.nodes.Root" } ] }, { "name": "m600_tunnel_cp", "type_name": "tosca.nodes.nfv.ext.zte.CP", "default_instances": 1, "min_instances": 0, "properties": { "direction": { "type_name": "string", "value": "bidirectional" }, "vnic_type": { "type_name": "string", "value": "normal" }, "bandwidth": { "type_name": "integer", "value": 0 }, "mac_address": { "type_name": "string", "value": "00-11-00-22-33-00" }, "interface_name": { "type_name": "string", "value": "gei-0/4/0/13" }, "ip_address": { "type_name": "string", "value": "191.167.100.5" }, "order": { "type_name": "integer", "value": 0 }, "sfc_encapsulation": { "type_name": "string", "value": "mac" } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "requirement_templates": [ { "name": "virtualLink", "target_node_template_name": "ext_datanet_net", "target_capability_name": "virtual_linkable" }, { "name": "virtualbinding", "target_node_template_name": "m6000_s", "target_capability_name": "virtualBinding" }, { "name": "forwarder", "target_node_type_name": "tosca.nodes.Root" } ] }, { "name": "ext_mnet_net", "type_name": "tosca.nodes.nfv.ext.VL.Vmware", "default_instances": 1, "min_instances": 0, "properties": { "name": { "type_name": "string", "value": "vlan_4008_mng_net" }, "dhcp_enabled": { "type_name": "boolean", "value": True }, "location_info": { "type_name": "tosca.datatypes.nfv.ext.LocationInfo", "value": { "tenant": "admin", "vimid": 2, "availability_zone": "nova" } }, "ip_version": { "type_name": "integer", "value": 4 }, "mtu": { "type_name": "integer", "value": 1500 }, "network_name": { "type_name": "string", "value": "vlan_4008_mng_net" }, "network_type": { "type_name": "string", "value": "vlan" } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "virtual_linkable", "type_name": "tosca.capabilities.nfv.VirtualLinkable" } ] }, { "name": "m6000_data_in", "type_name": "tosca.nodes.nfv.ext.zte.CP", "default_instances": 1, "min_instances": 0, "properties": { "direction": { "type_name": "string", "value": "bidirectional" }, "vnic_type": { "type_name": "string", "value": "normal" }, "bandwidth": { "type_name": "integer", "value": 0 }, "mac_address": { "type_name": "string", "value": "11-22-33-22-11-41" }, "interface_name": { "type_name": "string", "value": "gei-0/4/0/7" }, "ip_address": { "type_name": "string", "value": "1.1.1.1" }, "order": { "type_name": "integer", "value": 0 }, "sfc_encapsulation": { "type_name": "string", "value": "mac" }, "bond": { "type_name": "string", "value": "none" } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "requirement_templates": [ { "name": "virtualbinding", "target_node_template_name": "m6000_s", "target_capability_name": "virtualBinding" }, { "name": "virtualLink", "target_node_type_name": "tosca.nodes.Root" }, { "name": "forwarder", "target_node_type_name": "tosca.nodes.Root" } ] }, { "name": "ext_datanet_net", "type_name": "tosca.nodes.nfv.ext.VL.Vmware", "default_instances": 1, "min_instances": 0, "properties": { "name": { "type_name": "string", "value": "vlan_4004_tunnel_net" }, "dhcp_enabled": { "type_name": "boolean", "value": True }, "location_info": { "type_name": "tosca.datatypes.nfv.ext.LocationInfo", "value": { "tenant": "admin", "vimid": 2, "availability_zone": "nova" } }, "ip_version": { "type_name": "integer", "value": 4 }, "mtu": { "type_name": "integer", "value": 1500 }, "network_name": { "type_name": "string", "value": "vlan_4004_tunnel_net" }, "network_type": { "type_name": "string", "value": "vlan" } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "virtual_linkable", "type_name": "tosca.capabilities.nfv.VirtualLinkable" } ] }, { "name": "m600_mnt_cp", "type_name": "tosca.nodes.nfv.ext.zte.CP", "default_instances": 1, "min_instances": 0, "properties": { "direction": { "type_name": "string", "value": "bidirectional" }, "vnic_type": { "type_name": "string", "value": "normal" }, "bandwidth": { "type_name": "integer", "value": 0 }, "mac_address": { "type_name": "string", "value": "00-11-00-22-33-11" }, "interface_name": { "type_name": "string", "value": "gei-0/4/0/1" }, "ip_address": { "type_name": "string", "value": "10.46.244.51" }, "order": { "type_name": "integer", "value": 0 }, "sfc_encapsulation": { "type_name": "string", "value": "mac" }, "bond": { "type_name": "string", "value": "none" } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "requirement_templates": [ { "name": "virtualLink", "target_node_template_name": "ext_mnet_net", "target_capability_name": "virtual_linkable" }, { "name": "virtualbinding", "target_node_template_name": "m6000_s", "target_capability_name": "virtualBinding" }, { "name": "forwarder", "target_node_type_name": "tosca.nodes.Root" } ] }, { "name": "sfc_data_network", "type_name": "tosca.nodes.nfv.ext.zte.VL", "default_instances": 1, "min_instances": 0, "properties": { "name": { "type_name": "string", "value": "sfc_data_network" }, "dhcp_enabled": { "type_name": "boolean", "value": True }, "is_predefined": { "type_name": "boolean", "value": False }, "location_info": { "type_name": "tosca.datatypes.nfv.ext.LocationInfo", "value": { "tenant": "admin", "vimid": 2, "availability_zone": "nova" } }, "ip_version": { "type_name": "integer", "value": 4 }, "mtu": { "type_name": "integer", "value": 1500 }, "network_name": { "type_name": "string", "value": "sfc_data_network" }, "network_type": { "type_name": "string", "value": "vlan" } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "virtual_linkable", "type_name": "tosca.capabilities.nfv.VirtualLinkable" } ] }, { "name": "m6000_s", "type_name": "tosca.nodes.nfv.ext.PNF", "default_instances": 1, "min_instances": 0, "properties": { "vendor": { "type_name": "string", "value": "zte" }, "request_reclassification": { "type_name": "boolean", "value": False }, "pnf_type": { "type_name": "string", "value": "m6000s" }, "version": { "type_name": "string", "value": "1.0" }, "management_address": { "type_name": "string", "value": "111111" }, "id": { "type_name": "string", "value": "m6000_s" }, "nsh_aware": { "type_name": "boolean", "value": False } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "virtualBinding", "type_name": "tosca.capabilities.nfv.VirtualBindable" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "requirement_templates": [ { "name": "forwarder", "target_node_type_name": "tosca.nodes.Root" } ] }, { "name": "VNAT", "type_name": "tosca.nodes.nfv.ext.zte.VNF.VNAT", "default_instances": 1, "min_instances": 0, "properties": { "is_shared": { "type_name": "boolean", "value": False }, "plugin_info": { "type_name": "string", "value": "vbrasplugin_1.0" }, "vendor": { "type_name": "string", "value": "zte" }, "request_reclassification": { "type_name": "boolean", "value": False }, "name": { "type_name": "string", "value": "VNAT" }, "vnf_extend_type": { "type_name": "string", "value": "driver" }, "externalPluginManageNetworkName": { "type_name": "string", "value": "vlan_4007_plugin_net" }, "version": { "type_name": "string", "value": "1.0" }, "cross_dc": { "type_name": "boolean", "value": False }, "vnf_type": { "type_name": "string", "value": "VNAT" }, "vnfd_version": { "type_name": "string", "value": "1.0.0" }, "id": { "type_name": "string", "value": "vcpe_vnat_zte_1" }, "nsh_aware": { "type_name": "boolean", "value": True }, "adjust_vnf_capacity": { "type_name": "boolean", "value": True }, "vmnumber_overquota_alarm": { "type_name": "boolean", "value": True }, "csarProvider": { "type_name": "string", "value": "ZTE" }, "NatIpRange": { "type_name": "string", "value": "192.167.0.10-192.168.0.20" }, "csarVersion": { "type_name": "string", "value": "v1.0" }, "csarType": { "type_name": "string", "value": "NFAR" } }, "interface_templates": [ "" ], "capability_templates": [ { "name": "feature", "type_name": "tosca.capabilities.Node" }, { "name": "forwarder", "type_name": "tosca.capabilities.nfv.Forwarder" }, { "name": "vnat_fw_inout", "type_name": "tosca.capabilities.nfv.Forwarder" } ], "requirement_templates": [ { "name": "vnat_ctrl_by_manager_cp", "target_node_template_name": "ext_mnet_net", "target_capability_name": "virtual_linkable" }, { "name": "vnat_data_cp", "target_node_template_name": "sfc_data_network", "target_capability_name": "virtual_linkable" }, { "name": "virtualLink", "target_node_type_name": "tosca.nodes.Root" }, { "name": "forwarder", "target_node_type_name": "tosca.nodes.Root" } ] } ], "group_templates": [ { "name": "vnffg1", "type_name": "tosca.groups.nfv.VNFFG", "properties": { "vendor": { "type_name": "string", "value": "zte" }, "connection_point": { "type_name": "list", "value": [ "m6000_data_in", "m600_tunnel_cp", "m6000_data_out" ] }, "version": { "type_name": "string", "value": "1.0" }, "constituent_vnfs": { "type_name": "list", "value": [ "VFW", "VNAT" ] }, "number_of_endpoints": { "type_name": "integer", "value": 3 }, "dependent_virtual_link": { "type_name": "list", "value": [ "sfc_data_network", "ext_datanet_net", "ext_mnet_net" ] } }, "interface_templates": [ "" ], "member_node_template_names": [ "path1", "path2" ] } ], "substitution_template": { "node_type_name": "tosca.nodes.nfv.NS.VCPE_NS" }, "inputs": { "externalDataNetworkName": { "type_name": "string", "value": "vlan_4004_tunnel_net" }, "sfc_data_network": { "type_name": "string", "value": "sfc_data_network" }, "NatIpRange": { "type_name": "string", "value": "192.167.0.10-192.168.0.20" }, "externalManageNetworkName": { "type_name": "string", "value": "vlan_4008_mng_net" }, "externalPluginManageNetworkName": { "type_name": "string", "value": "vlan_4007_plugin_net" } } } } ) print(convert_nsd_model(src_json))