Fix vfc-vnflcm query vnfd bug
[vfc/gvnfm/vnflcm.git] / lcm / lcm / nf / const.py
1 # Copyright 2017 ZTE Corporation.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #         http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 import json
15
16 from lcm.pub.utils.jobutil import enum
17
18 VNF_STATUS = enum(NULL='null', INSTANTIATING="instantiating", INACTIVE='inactive', ACTIVE="active",
19                   FAILED="failed", TERMINATING="terminating", SCALING="scaling", OPERATING="operating",
20                   UPDATING="updating", HEALING="healing")
21
22 inst_req_data = {
23     "flavourId": "flavour_1",
24     "instantiationLevelId": "instantiationLevel_1",
25     "vnfmId": "vnfm_1",
26     "extVirtualLinks": [
27         {
28             "vlInstanceId": "1",
29             "vim": {
30                 "vimInfoId": "1",
31                 "vimId": "1",
32                 "interfaceInfo": {
33                     "vimType": "vim",
34                     "apiVersion": "v2",
35                     "protocolType": "http"
36                 },
37                 "accessInfo": {
38                     "tenant": "tenant_vCPE",
39                     "username": "vCPE",
40                     "password": "vCPE_321"
41                 },
42                 "interfaceEndpoint": "http://10.43.21.105:80/"
43             },
44             "resourceId": "1246",
45             "extCps": [
46                 {
47                     "cpdId": "11",
48                     "addresses": [
49                         {
50                             "addressType": "MAC",
51                             "l2AddressData": "00:f3:43:20:a2:a3"
52                         },
53                         {
54                             "addressType": "IP",
55                             "l3AddressData": {
56                                 "iPAddressType": "IPv4",
57                                 "iPAddress": "192.168.104.2"
58                             }
59                         }
60                     ],
61                     "numDynamicAddresses": 0
62                 }
63             ]
64         },
65         {
66             "vlInstanceId": '55',
67             "resourceId": '55_network',
68             "resourceSubnetId": '55_subnet',
69             "cpdId": 'cpId1',
70             "vim": {
71                 "vimId": '55_vimid'
72             }
73         }
74     ],
75     "localizationLanguage": "en_US",
76     "additionalParams": {
77         "vimId": "vim_1",
78         "inputs": {
79             "key1": "test1",
80             "key2": "test2"
81         },
82         "extVirtualLinks": [
83             {
84                 "vlInstanceId": '55',
85                 "resourceId": '55_network',
86                 "resourceSubnetId": '55_subnet',
87                 "cpdId": 'cpId1',
88                 "vim": {
89                     "vimId": '55_vimid'
90                 }
91             }
92         ]
93     }
94 }
95
96
97 vnfd_model_dict = {
98     'metadata': {
99         'vendor': u'zte',
100         'is_shared': False,
101         'description': '',
102         'domain_type': u'CN',
103         'version': u'v4.14.10',
104         'vmnumber_overquota_alarm': False,
105         'cross_dc': False,
106         'vnf_type': u'SSS',
107         'vnfd_version': u'V00000001',
108         'id': u'sss-vnf-template',
109         'name': u'sss-vnf-template'
110     },
111     'vdus': [
112         {
113             "vdu_id": "vdu1Id",
114             "description": "vdu description",
115             "properties": {
116                 "name": "vduinstname",
117                 "vdu_type": "OMP",
118                 "key_vdu": True,
119                 "support_scaling": True,
120                 "location_info": {
121                     "vimid": "vimid",
122                     "tenant": "tenantname",
123                     "availability_zone": "zone1",
124                     "host": "host1"
125                 },
126                 "local_affinity_antiaffinity_rule": [
127                     {
128                         "affinity_antiaffinity": "anti-affinity",
129                         "scope": "node"
130                     },
131                     {
132                         "affinity_antiaffinity": "affinity",
133                         "scope": "zone"
134                     }
135                 ],
136                 "inject_data_list": [
137                     {
138                         "file_name": "abc.xml",
139                         "file_data": "<a>xxx</a><b>ssss</b>"
140                     }
141                 ],
142                 "storage_policy": "HIGH",
143                 "template_id": "26",
144                 "manual_scale_select_vim": False,
145                 "watchdog": {
146                     "enabledelay": 600000,
147                     "action": "reset"
148                 },
149                 "is_predefined": False,
150                 "allow_scale_updown": False,
151                 "inject_network_address": True,
152                 "inner_hugepage_num": 100,
153                 "inner_hugepage_size": "2048",
154                 "action": "add"
155             },
156             "image_file": u'sss',
157             "local_storages": [
158                 "local_storage_id1",
159                 "local_storage_id2"
160             ],
161             "volume_storages": [
162                 {
163                     "volume_storage_id": "volume_storage1",
164                     "location": "/usr/data",
165                     "device": "/dev/hda1"
166                 }
167             ],
168             "dependencies": [
169                 "vdu1Id",
170                 "vduNId"
171             ],
172             "nfv_compute": {
173                 "num_cpus": 4,
174                 "mem_size": "1 GB",
175                 "cpu_frequency": "1GHz",
176                 "flavor_extra_specs": {
177                     "hw: cpu_policy": "shared",
178                     "hw: cpu_max_threads": 50,
179                     "hw: cpu_sockets": 10,
180                     "hw: cpu_max_sockets": 20,
181                     "hw: cpu_max_cores": 8,
182                     "hw: cpu_threads": 30,
183                     "hw: numa_mem.0": 12288,
184                     "hw: hugepage_num": 100,
185                     "hw: high_performance": "dvs_high",
186                     "hw: numa_nodes": 1,
187                     "hw: numa_cpus.0": "2,4,8",
188                     "hw: numa_pci": True,
189                     "hw: cpu_cores": 4,
190                     "pci_passthrough: alias": "ColetoCreek: 1",
191                     "hw: mem_page_size": "large",
192                     "hw: mem_paging_mechanism": "EPT"
193                 }
194             },
195             "vls": [
196                 "vlId1",
197             ],
198             "cps": [
199                 "cpId1",
200             ],
201             "scalable": {
202                 "min_instances": 1,
203                 "max_instances": 2,
204                 "default_instances": 1
205             },
206             "interfaces": {
207                 "Standard": {
208                     "create": {
209                         "implementation": "<implementationScript>",
210                         "inputs": {
211                             "param1Name": "value1",
212                             "paramNName": "valueN"
213                         }
214                     },
215                     "configure": {
216                         "implementation": "<implementationScript>",
217                         "inputs": {
218                             "param1Name": "value1",
219                             "paramNName": "valueN"
220                         }
221                     },
222                     "start": {
223                         "implementation": "<implementationScript>",
224                         "inputs": {
225                             "param1Name": "value1",
226                             "paramNName": "valueN"
227                         }
228                     },
229                     "stop": {
230                         "implementation": "<implementationScript>",
231                         "inputs": {
232                             "param1Name": "value1",
233                             "paramNName": "valueN"
234                         }
235                     },
236                     "delete": {
237                         "implementation": "<implementationScript>",
238                         "inputs": {
239                             "param1Name": "value1",
240                             "paramNName": "valueN"
241                         }
242                     }
243                 }
244             },
245             "artifacts": [
246                 {
247                     "artifact_name": "software_version_file",
248                     "type": "tosca.artifacts.Deployment",
249                     "file": "AppSoftwares/zte-cn-xgw-V5.16.11_NFV-version.zip",
250                     "repository": "",
251                     "deploy_path": ""
252                 }
253             ]
254         }
255     ],
256     'volume_storages': [
257         {
258             "volume_storage_id": "volume_storage1",
259             "description": "",
260             "properties": {
261                 "size": "100 GB",
262                 "volume_id": "",
263                 "volume_name": "volumeStorage1",
264                 "custom_volume_type": "type1",
265                 "disk_type": "data",
266                 "delete_on_termination_vm": True,
267                 "location_info": {
268                     "vimid": "vimid_1",
269                     "tenant": "tenantname_1",
270                     "availability_zone": "zone1"
271                 },
272                 "is_predefined": False,
273                 "is_shared": False
274             },
275             "image_file": [
276                 "volume_image"
277             ]
278         }
279     ],
280     'policies': {
281         'scaling': {
282             'targets': {
283
284             },
285             'policy_id': u'policy_scale_sss-vnf-template',
286             'properties': {
287                 'policy_file': '*-vnfd.zip/*-vnf-policy.xml'
288             },
289             'description': ''
290         }
291     },
292     'image_files': [
293         {
294             'description': '',
295             'properties': {
296                 'name': u'opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
297                 'checksum': '',
298                 'disk_format': u'VMDK',
299                 'file_url': u'./zte-cn-sss-main-image/OMM/opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
300                 'container_type': 'vm',
301                 'version': '',
302                 'hypervisor_type': 'kvm'
303             },
304             'image_file_id': u'opencos_sss_omm_img_release_20150723-1-disk1'
305         },
306         {
307             'description': '',
308             'properties': {
309                 'name': u'sss.vmdk',
310                 'checksum': '',
311                 'disk_format': u'VMDK',
312                 'file_url': u'./zte-cn-sss-main-image/NE/sss.vmdk',
313                 'container_type': 'vm',
314                 'version': '',
315                 'hypervisor_type': 'kvm'
316             },
317             'image_file_id': u'sss'
318         }
319     ],
320     'vls': [
321         {
322             "vl_id": "vldId1",
323             "description": "",
324             "properties": {
325                 "name": "umac_241_control",
326                 "network_name": "umac_control",
327                 "is_predefined": False,
328                 "vendor": "zte",
329                 "netmask": "255.255.255.0",
330                 "mtu": 1500,
331                 "network_type": "vlan",
332                 "physical_network": "phynet01",
333                 "segmentation_id": "30",
334                 "vlan_transparent": False,
335                 "vds_name": "vds1",
336                 "cidr": "192.168.199.0/24",
337                 "ip_version": 4,
338                 "gateway_ip": "192.168.199.1",
339                 "dhcp_enabled": False,
340                 "dns_nameservers": [
341                     "192.168.0.4",
342                     "192.168.0.10"
343                 ],
344                 "start_ip": "192.168.199.2",
345                 "end_ip": "192.168.199.254",
346                 "host_routes": [
347                     {
348                         "destination": "10.43.26.0/24",
349                         "nexthop": "10.41.23.1"
350                     }
351                 ],
352                 "location_info": {
353                     "vimid": "vimid_1",
354                     "tenant": "tenantname_1"
355                 },
356                 "cloud_type": "IaaS"
357             },
358             "route_id": "router01",
359             "route_external": False
360         }
361     ],
362     'cps': [
363         {
364             "cp_id": "cpId1",
365             "description": "",
366             "properties": {
367                 "name": "",
368                 "mac_address": "00:d9:00:82:11:e1",
369                 "ip_address:": "192.168.1.21",
370                 "ip_range_start": "192.168.1.20",
371                 "ip_range_end": "192.168.1.29",
372                 "floating_ip_address": {
373                     "external_network": "extnet01",
374                     "ip_address": "10.43.53.23"
375                 },
376                 "service_ip_address": "192.168.1.23",
377                 "order": 1,
378                 "bandwidth": 1000,
379                 "vnic_type": "normal",
380                 "allowed_address_pairs": [
381                     {
382                         "ip": "192.168.1.13",
383                         "mac": "00:f3:43:20:a2:a3"
384                     }
385                 ],
386                 "bond": "none",
387                 "bond_index": 1,
388                 "macbond": "00:d9:00:82:11:d1",
389                 "sfc_encapsulation": "",
390                 "direction": "",
391                 "gateway_ip": "192.168.199.1",
392                 "netmask": "255.255.255.0",
393                 "interface_name": "fe-01-02",
394                 "is_virtual": False,
395                 "function": "control"
396             },
397             "vl_id": "vldId1",
398             "vdu_id": "vdu1Id"
399         }
400     ],
401     'local_storages': [
402
403     ],
404 }
405
406 # get_tenant_id
407 c1_data_get_tenant_id = {
408     "tenants": [
409         {
410             "id": "1",
411             "name": "tenantname_1"
412         }
413     ]
414 }
415
416 # create_volume
417 c2_data_create_volume = {
418     "id": "4bd3e9eb-cd8b-456a-8589-910836a0ab31",
419     "name": "volume1",
420     "returnCode": 1,
421     "vimId": "vim_volume_1",
422     "vimName": "vim_volume_1",
423     "tenantId": "vim_volume_1",
424     "volumeType": "123",
425     "availabilityZone": "availabilityZone",
426     "status": "availuable",
427     "createTime": "2015-12-02T06:39:40.000000",
428     "type": None,
429     "size": 40
430 }
431
432 # get_volume
433 c3_data_get_volume = {
434     "status": "available",
435     "name": "wangsong",
436     "attachments": [
437         {
438             "device": "/dev/vdc",
439             "serverId": "3030e666-528e-4954-88f5-cc21dab1262b",
440             "volumeId": "4bd3e9eb-cd8b-456a-8589-910836a0ab31",
441             "hostName": None,
442             "id": "4bd3e9eb-cd8b-456a-8589-910836a0ab31"
443         }
444     ],
445     "createTime": "2015-12-02T06:39:40.000000",
446     "type": None,
447     "id": "4bd3e9eb-cd8b-456a-8589-910836a0ab31",
448     "size": 40
449 }
450
451 # create_network
452 c4_data_create_network = {
453     "returnCode": 0,
454     "vimId": "11111",
455     "vimName": "11111",
456     "status": "ACTIVE",
457     "id": "3c9eebdbbfd345658269340b9ea6fb73",
458     "name": "net1",
459     "tenantId": "tenant1",
460     "networkName": "ommnet",
461     "shared": True,
462     "vlanTransparent": True,
463     "networkType": "vlan",
464     "segmentationId": 202,
465     "physicalNetwork": "ctrl",
466     "routerExternal": False
467 }
468
469 # create_subnet
470 c5_data_create_subnet = {
471     "returnCode": 0,
472     "vimId": "11111",
473     "vimName": "11111",
474     "status": " ACTIVE",
475     "id": "d62019d3-bc6e-4319-9c1d-6722fc136a23",
476     "tenantId": "tenant1",
477     "networkId": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
478     "networkName": "networkName",
479     "name": "subnet1",
480     "cidr": "10.43.35.0/24",
481     "ipVersion": 4,
482     "enableDhcp": 1,
483     "gatewayIp": "10.43.35.1",
484     "dnsNameservers": [],
485     "allocationPools": [
486         {
487             "start": "192.168.199.2",
488             "end": "192.168.199.254"
489         }
490     ],
491     "hostRoutes": []
492 }
493
494 # create_ports
495 c6_data_create_port = {
496     "returnCode": 0,
497     "vimId": "11111",
498     "vimName": "11111",
499     "status": " ACTIVE",
500     "id": " 872019d3-bc6e-4319-9c1d-6722fc136afg",
501     "tenantId": "tenant1",
502     "name": "subnet1",
503     "networkId": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
504     "networkName": "networkName",
505     "subnetId": "d62019d3-bc6e-4319-9c1d-6722fc136a23",
506     "subnetName": "subnet1",
507     "macAddress": "212.12.61.23",
508     "ip": "10.43.38.11",
509     "vnicType": "normal",
510     "securityGroups": ""
511 }
512
513 # create_flavor
514 c7_data_create_flavor = {
515     "returnCode": 0,
516     "vimId": "11111",
517     "vimName": "11111",
518     "id": "142019d3-bc6e-4319-9c1d-6722fc136afg",
519     "tenantId": "tenant1",
520     "name": "subnet1",
521     "vcpu": 5,
522     "memory": 2,
523     "disk": 40,
524     "ephemeral": 40,
525     "swap": 20,
526     "isPublic": True,
527     "extraSpecs": "testtt"
528 }
529
530 # list_image
531 c8_data_list_image = {
532     "vimid": "",
533     "vimname": "",
534     "images": [
535         {
536             "status": "active",
537             "id": "5e2757c1-f846-4727-915c-9a872553ed75",
538             "size": 862016,
539             "name": u'sss.vmdk'
540         }
541     ]
542 }
543
544 # create_vm
545 c9_data_create_vm = {
546     "returnCode": 1,
547     "id": "3c9eebdbbfd345658269340b9ea6fb73",
548     "name": "vm1",
549     "vimId": "11111",
550     "vimName": "11111",
551     "tenantId": "tenant1",
552     "boot": "boot_1",
553     "nicArray": "dfdf",
554     "volumeArray": "dfdf",
555     "availabilityZone": "fdvfdv",
556     "flavorId": "fdvfdv",
557     "metadata": "fdvfdv",
558     "securityGroups": "fdvfdv",
559     "serverGroup": "fdvfdv",
560     "status": "ACTIVE"
561 }
562
563 # get_vm
564 c10_data_get_vm = {
565     "returnCode": 1,
566     "id": "3c9eebdbbfd345658269340b9ea6fb73",
567     "name": "vm1",
568     "vimId": "11111",
569     "vimName": "11111",
570     "tenantId": "tenant1",
571     "status": "ACTIVE"
572 }
573
574 vnfdModel = {
575     "volume_storages": [],
576     "inputs": {
577         "pe1_id": {
578             "type": "string",
579             "description": "pe1_idofunderlayvpn"
580         },
581         "pe2_id": {
582             "type": "string",
583             "description": "pe2_idofunderlayvpn"
584         },
585         "serviceType": {
586             "type": "string",
587             "description": "serviceTypeofunderlayvpn"
588         },
589         "description": {
590             "type": "string",
591             "description": "descriptionofunderlayvpn"
592         },
593         "ac2_route": {
594             "type": "string",
595             "description": "ac2_routeofunderlayvpn"
596         },
597         "ac1_route": {
598             "type": "string",
599             "description": "ac1_routeofunderlayvpn"
600         },
601         "ac1_svlan": {
602             "type": "integer",
603             "description": "ac1_svlanofunderlayvpn"
604         },
605         "ac2_ip": {
606             "type": "string",
607             "description": "ac2_ipofunderlayvpn"
608         },
609         "ac1_ip": {
610             "type": "string",
611             "description": "ac1_ipofunderlayvpn"
612         },
613         "ac2_port": {
614             "type": "string",
615             "description": "ac2_portofunderlayvpn"
616         },
617         "topology": {
618             "type": "string",
619             "description": "topologyofunderlayvpn"
620         },
621         "technology": {
622             "type": "string",
623             "description": "technologyofunderlayvpn"
624         },
625         "ac1_port": {
626             "type": "string",
627             "description": "ac1_portofunderlayvpn"
628         },
629         "ac2_svlan": {
630             "type": "integer",
631             "description": "ac2_svlanofunderlayvpn"
632         },
633         "name": {
634             "type": "string",
635             "description": "Nameofunderlayervpn"
636         }
637     },
638     "vdus": [],
639     "image_files": [],
640     "routers": [],
641     "local_storages": [],
642     "vnf_exposed": {
643         "external_cps": [],
644         "forward_cps": []
645     },
646     "vls": [],
647     "cps": [],
648     "metadata": {
649         "designer": "sdno",
650         "name": "underlayervpn",
651         "csarVersion": "1.0",
652         "csarType": "SSAR",
653         "csarProvider": "huawei",
654         "version": "1.0",
655         "type": "SSAR",
656         "id": "ns_underlayervpn_1_0"
657     }
658 }
659
660 vnfpackage_info = {
661     "imageInfo": [],
662     "csarId": "vOpenNAT",
663     "packageInfo": {
664         "csarName": "vOpenNAT.csar",
665         "vnfdModel": json.dumps(vnfdModel),
666         "vnfdProvider": "Intel",
667         "vnfdId": "openNAT_1.0",
668         "downloadUrl": "http://10.96.33.39:8806/static/catalog/vOpenNAT/vOpenNAT.csar",
669         "vnfVersion": "v1.0",
670         "vnfdVersion": "v1.0",
671         "vnfPackageId": "vOpenNAT"
672     }
673 }
674
675 # # vnfd_rawdata
676 # vnfd_rawdata = {
677 #     "rawData": {
678 #         "instance": {
679 #             "metadata": {
680 #                 "designer": "sdno",
681 #                 "name": "underlayervpn",
682 #                 "csarVersion": "1.0",
683 #                 "csarType": "SSAR",
684 #                 "csarProvider": "huawei",
685 #                 "version": "1.0",
686 #                 "type": "SSAR",
687 #                 "id": "ns_underlayervpn_1_0"
688 #             },
689 #             "nodes": [
690 #                 {
691 #                     "id": "ac2_fdhrbk3dvan8hl5wifm9lp1e9",
692 #                     "type_name": "tosca.nodes.sdn.l3ac",
693 #                     "template_name": "ac2",
694 #                     "properties": {
695 #                         "ip": {
696 #                             "type_name": "string"
697 #                         },
698 #                         "route": {
699 #                             "type_name": "string"
700 #                         },
701 #                         "port": {
702 #                             "type_name": "string"
703 #                         },
704 #                         "svlan": {
705 #                             "type_name": "string"
706 #                         }
707 #                     },
708 #                     "interfaces": [
709 #                         {
710 #                             "name": "Standard",
711 #                             "type_name": "tosca.interfaces.node.lifecycle.Standard"
712 #                         }
713 #                     ],
714 #                     "capabilities": [
715 #                         {
716 #                             "name": "feature",
717 #                             "type_name": "tosca.capabilities.Node"
718 #                         },
719 #                         {
720 #                             "name": "ac",
721 #                             "type_name": "tosca.capabilities.sdn.ac"
722 #                         }
723 #                     ],
724 #                     "relationships": [
725 #                         {
726 #                             "target_node_id": "pe2_go3vo1ctxr1vlbl0ij8stbtj6",
727 #                             "target_capability_name": "feature"
728 #                         },
729 #                         {
730 #                             "target_node_id": "ac2_fdhrbk3dvan8hl5wifm9lp1e9",
731 #                             "target_capability_name": "feature"
732 #                         }
733 #                     ]
734 #                 },
735 #                 {
736 #                     "id": "ac1_jqows1ai0j0cmwk9jdvuknt97",
737 #                     "type_name": "tosca.nodes.sdn.l3ac",
738 #                     "template_name": "ac1",
739 #                     "properties": {
740 #                         "ip": {
741 #                             "type_name": "string"
742 #                         },
743 #                         "route": {
744 #                             "type_name": "string"
745 #                         },
746 #                         "port": {
747 #                             "type_name": "string"
748 #                         },
749 #                         "svlan": {
750 #                             "type_name": "string"
751 #                         }
752 #                     },
753 #                     "interfaces": [
754 #                         {
755 #                             "name": "Standard",
756 #                             "type_name": "tosca.interfaces.node.lifecycle.Standard"
757 #                         }
758 #                     ],
759 #                     "capabilities": [
760 #                         {
761 #                             "name": "feature",
762 #                             "type_name": "tosca.capabilities.Node"
763 #                         },
764 #                         {
765 #                             "name": "ac",
766 #                             "type_name": "tosca.capabilities.sdn.ac"
767 #                         }
768 #                     ],
769 #                     "relationships": [
770 #                         {
771 #                             "target_node_id": "pe1_e58ekps6m45g6w9egs9lue2j7",
772 #                             "target_capability_name": "feature"
773 #                         },
774 #                         {
775 #                             "target_node_id": "ac2_fdhrbk3dvan8hl5wifm9lp1e9",
776 #                             "target_capability_name": "feature"
777 #                         }
778 #                     ]
779 #                 },
780 #                 {
781 #                     "id": "vpn_ie0xim076f7cje67fvrrq9tg1",
782 #                     "type_name": "tosca.nodes.sdn.underlayVPN",
783 #                     "template_name": "vpn",
784 #                     "properties": {
785 #                         "serviceType": {
786 #                             "type_name": "string"
787 #                         },
788 #                         "description": {
789 #                             "type_name": "string"
790 #                         },
791 #                         "name": {
792 #                             "type_name": "string"
793 #                         },
794 #                         "topology": {
795 #                             "type_name": "string"
796 #                         }
797 #                     },
798 #                     "interfaces": [
799 #                         {
800 #                             "name": "Standard",
801 #                             "type_name": "tosca.interfaces.node.lifecycle.Standard"
802 #                         }
803 #                     ],
804 #                     "capabilities": [
805 #                         {
806 #                             "name": "feature",
807 #                             "type_name": "tosca.capabilities.Node"
808 #                         }
809 #                     ],
810 #                     "relationships": [
811 #                         {
812 #                             "target_node_id": "ac1_jqows1ai0j0cmwk9jdvuknt97",
813 #                             "target_capability_name": "feature"
814 #                         },
815 #                         {
816 #                             "target_node_id": "ac2_fdhrbk3dvan8hl5wifm9lp1e9",
817 #                             "target_capability_name": "feature"
818 #                         }
819 #                     ]
820 #                 },
821 #                 {
822 #                     "id": "pe1_e58ekps6m45g6w9egs9lue2j7",
823 #                     "type_name": "tosca.nodes.sdn.l3pe",
824 #                     "template_name": "pe1",
825 #                     "properties": {
826 #                         "id": {
827 #                             "type_name": "string"
828 #                         }
829 #                     },
830 #                     "interfaces": [
831 #                         {
832 #                             "name": "Standard",
833 #                             "type_name": "tosca.interfaces.node.lifecycle.Standard"
834 #                         }
835 #                     ],
836 #                     "capabilities": [
837 #                         {
838 #                             "name": "feature",
839 #                             "type_name": "tosca.capabilities.Node"
840 #                         },
841 #                         {
842 #                             "name": "pe",
843 #                             "type_name": "tosca.capabilities.sdn.pe"
844 #                         }
845 #                     ]
846 #                 },
847 #                 {
848 #                     "id": "pe2_go3vo1ctxr1vlbl0ij8stbtj6",
849 #                     "type_name": "tosca.nodes.sdn.l3pe",
850 #                     "template_name": "pe2",
851 #                     "properties": {
852 #                         "id": {
853 #                             "type_name": "string"
854 #                         }
855 #                     },
856 #                     "interfaces": [
857 #                         {
858 #                             "name": "Standard",
859 #                             "type_name": "tosca.interfaces.node.lifecycle.Standard"
860 #                         }
861 #                     ],
862 #                     "capabilities": [
863 #                         {
864 #                             "name": "feature",
865 #                             "type_name": "tosca.capabilities.Node"
866 #                         },
867 #                         {
868 #                             "name": "pe",
869 #                             "type_name": "tosca.capabilities.sdn.pe"
870 #                         }
871 #                     ]
872 #                 }
873 #             ],
874 #             "substitution": {
875 #                 "node_type_name": "tosca.nodes.sdn.ext.NS.ns_underlayervpn"
876 #             },
877 #             "inputs": {
878 #                 "ac2_ip": {
879 #                     "type_name": "string",
880 #                     "description": "ac2_ipofunderlayvpn"
881 #                 },
882 #                 "ac2_route": {
883 #                     "type_name": "string",
884 #                     "description": "ac2_routeofunderlayvpn"
885 #                 },
886 #                 "serviceType": {
887 #                     "type_name": "string",
888 #                     "description": "serviceTypeofunderlayvpn"
889 #                 },
890 #                 "description": {
891 #                     "type_name": "string",
892 #                     "description": "descriptionofunderlayvpn"
893 #                 },
894 #                 "pe2_id": {
895 #                     "type_name": "string",
896 #                     "description": "pe2_idofunderlayvpn"
897 #                 },
898 #                 "ac1_route": {
899 #                     "type_name": "string",
900 #                     "description": "ac1_routeofunderlayvpn"
901 #                 },
902 #                 "ac1_svlan": {
903 #                     "type_name": "integer",
904 #                     "description": "ac1_svlanofunderlayvpn"
905 #                 },
906 #                 "name": {
907 #                     "type_name": "string",
908 #                     "description": "Nameofunderlayervpn"
909 #                 },
910 #                 "ac1_ip": {
911 #                     "type_name": "string",
912 #                     "description": "ac1_ipofunderlayvpn"
913 #                 },
914 #                 "ac2_port": {
915 #                     "type_name": "string",
916 #                     "description": "ac2_portofunderlayvpn"
917 #                 },
918 #                 "pe1_id": {
919 #                     "type_name": "string",
920 #                     "description": "pe1_idofunderlayvpn"
921 #                 },
922 #                 "technology": {
923 #                     "type_name": "string",
924 #                     "description": "technologyofunderlayvpn"
925 #                 },
926 #                 "ac1_port": {
927 #                     "type_name": "string",
928 #                     "description": "ac1_portofunderlayvpn"
929 #                 },
930 #                 "ac2_svlan": {
931 #                     "type_name": "integer",
932 #                     "description": "ac2_svlanofunderlayvpn"
933 #                 },
934 #                 "topology": {
935 #                     "type_name": "string",
936 #                     "description": "topologyofunderlayvpn"
937 #                 }
938 #             }
939 #         }
940 #     }
941 # }