1 # Copyright 2016-2017 ZTE Corporation.
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
7 # http://www.apache.org/licenses/LICENSE-2.0
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.
18 from django.test import TestCase, Client
19 from rest_framework import status
21 from lcm.ns.vnfs import create_vnfs
22 from lcm.ns.vnfs.const import VNF_STATUS, INST_TYPE
23 from lcm.ns.vnfs.create_vnfs import CreateVnfs
24 from lcm.ns.vnfs.heal_vnfs import NFHealService
25 from lcm.ns.vnfs.scale_vnfs import NFManualScaleService
26 from lcm.ns.vnfs.terminate_nfs import TerminateVnfs
27 from lcm.pub.database.models import NfInstModel, JobModel, NfPackageModel, NSInstModel, VmInstModel
28 from lcm.pub.exceptions import NSLCMException
29 from lcm.pub.utils import restcall
30 from lcm.pub.utils.jobutil import JOB_MODEL_STATUS
31 from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE
32 from lcm.pub.utils.timeutil import now_time
33 from lcm.pub.utils.values import ignore_case_get
36 class TestGetVnfViews(TestCase):
38 self.client = Client()
39 self.nf_inst_id = str(uuid.uuid4())
40 NfInstModel(nfinstid=self.nf_inst_id, nf_name='vnf1', vnfm_inst_id='1', vnf_id='vnf_id1',
41 status=VNF_STATUS.ACTIVE, create_time=now_time(), lastuptime=now_time()).save()
44 NfInstModel.objects.all().delete()
46 def test_get_vnf(self):
47 response = self.client.get("/api/nslcm/v1/ns/vnfs/%s" % self.nf_inst_id)
48 self.failUnlessEqual(status.HTTP_200_OK, response.status_code)
49 context = json.loads(response.content)
50 self.failUnlessEqual(self.nf_inst_id, context['vnfInstId'])
53 class TestCreateVnfViews(TestCase):
55 self.ns_inst_id = str(uuid.uuid4())
56 self.job_id = str(uuid.uuid4())
58 "nsInstanceId": self.ns_inst_id,
59 "additionalParamForNs": {
60 "inputs": json.dumps({
64 "additionalParamForVnf": [
66 "vnfprofileid": "VBras",
68 "inputs": json.dumps({
72 "vnfminstanceid": "1",
79 self.client = Client()
80 NfPackageModel(uuid=str(uuid.uuid4()), nfpackageid='package_id1', vnfdid='zte_vbras', vendor='zte',
81 vnfdversion='1.0.0', vnfversion='1.0.0', vnfdmodel=json.dumps(vnfd_model_dict)).save()
82 NSInstModel(id=self.ns_inst_id, name='ns', nspackage_id='1', nsd_id='nsd_id', description='description',
83 status='instantiating', nsd_model=json.dumps(nsd_model_dict), create_time=now_time(),
84 lastuptime=now_time()).save()
87 NfInstModel.objects.all().delete()
88 JobModel.objects.all().delete()
90 @mock.patch.object(CreateVnfs, 'run')
91 def test_create_vnf(self, mock_run):
92 response = self.client.post("/api/nslcm/v1/ns/vnfs", data=self.data)
93 self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code)
94 context = json.loads(response.content)
95 self.assertTrue(NfInstModel.objects.filter(nfinstid=context['vnfInstId']).exists())
97 @mock.patch.object(restcall, 'call_req')
98 def test_create_vnf_thread(self, mock_call_req):
99 nf_inst_id, job_id = create_vnfs.prepare_create_params()
101 "csarId": "zte_vbras",
104 "vnfPackageId": "zte_vbras",
109 "vnfdModel": vnfd_model_dict,
115 "/api/ztevmanagerdriver/v1/1/vnfs":
116 [0, json.JSONEncoder().encode({"jobId": self.job_id, "vnfInstanceId": 3}), '200'],
117 "/api/catalog/v1/vnfpackages/zte_vbras":
118 [0, json.JSONEncoder().encode(nf_package_info), '200'],
119 "/external-system/esr-vnfm-list/esr-vnfm/1?depth=all":
120 [0, json.JSONEncoder().encode(vnfm_info), '200'],
121 "/api/resmgr/v1/vnf":
122 [0, json.JSONEncoder().encode({}), '200'],
123 "/api/resmgr/v1/vnfinfo":
124 [0, json.JSONEncoder().encode({}), '200'],
125 "/network/generic-vnfs/generic-vnf/%s" % nf_inst_id:
126 [0, json.JSONEncoder().encode({}), '201'],
127 "/cloud-infrastructure/cloud-regions/cloud-region/zte/test?depth=all":
128 [0, json.JSONEncoder().encode(vim_info), '201'],
129 "/cloud-infrastructure/cloud-regions/cloud-region/zte/test/tenants/tenant/admin/vservers/vserver/1":
130 [0, json.JSONEncoder().encode({}), '201'],
131 "/api/ztevmanagerdriver/v1/1/jobs/" + self.job_id + "?responseId=0":
132 [0, json.JSONEncoder().encode({"jobid": self.job_id,
133 "responsedescriptor": {"progress": "100",
134 "status": JOB_MODEL_STATUS.FINISHED,
136 "statusdescription": "creating",
138 "responsehistorylist": [
140 "status": JOB_MODEL_STATUS.PROCESSING,
142 "statusdescription": "creating",
143 "errorcode": "0"}]}}), '200']}
145 def side_effect(*args):
146 return mock_vals[args[4]]
147 mock_call_req.side_effect = side_effect
149 'ns_instance_id': ignore_case_get(self.data, 'nsInstanceId'),
150 'additional_param_for_ns': ignore_case_get(self.data, 'additionalParamForNs'),
151 'additional_param_for_vnf': ignore_case_get(self.data, 'additionalParamForVnf'),
152 'vnf_index': ignore_case_get(self.data, 'vnfIndex')
154 CreateVnfs(data, nf_inst_id, job_id).run()
155 self.assertTrue(NfInstModel.objects.get(nfinstid=nf_inst_id).status, VNF_STATUS.ACTIVE)
158 class TestTerminateVnfViews(TestCase):
160 self.client = Client()
161 self.ns_inst_id = str(uuid.uuid4())
162 self.nf_inst_id = '1'
163 self.vnffg_id = str(uuid.uuid4())
164 self.vim_id = str(uuid.uuid4())
165 self.job_id = str(uuid.uuid4())
167 self.tenant = "tenantname"
171 "vnfdName": "PGW001",
172 "vnfProvider": "zte",
173 "vnfdVersion": "V00001",
174 "vnfVersion": "V5.10.20",
177 "description": "PGW VNFD description",
179 "vnfExtendType": "driver"
182 NSInstModel.objects.all().delete()
183 NfInstModel.objects.all().delete()
184 VmInstModel.objects.all().delete()
185 NSInstModel(id=self.ns_inst_id, name="ns_name").save()
186 NfInstModel.objects.create(nfinstid=self.nf_inst_id,
190 ns_inst_id='111,2-2-2',
197 mnfinstid=self.nf_uuid,
199 vnfd_model=self.vnfd_model)
200 VmInstModel.objects.create(vmid="1",
203 insttype=INST_TYPE.VNF,
204 instid=self.nf_inst_id,
209 NSInstModel.objects.all().delete()
210 NfInstModel.objects.all().delete()
212 @mock.patch.object(TerminateVnfs, 'run')
213 def test_terminate_vnf_url(self, mock_run):
215 "terminationType": "forceful",
216 "gracefulTerminationTimeout": "600"}
218 response = self.client.post("/api/nslcm/v1/ns/vnfs/%s" % self.nf_inst_id, data=req_data)
219 self.failUnlessEqual(status.HTTP_201_CREATED, response.status_code)
221 @mock.patch.object(restcall, 'call_req')
222 def test_terminate_vnf(self, mock_call_req):
223 job_id = JobUtil.create_job("VNF", JOB_TYPE.TERMINATE_VNF, self.nf_inst_id)
225 nfinst = NfInstModel.objects.filter(nfinstid=self.nf_inst_id)
227 self.failUnlessEqual(1, 1)
229 self.failUnlessEqual(1, 0)
232 "vnf-id": "vnf-id-test111",
233 "vnf-name": "vnf-name-test111",
234 "vnf-type": "vnf-type-test111",
236 "is-closed-loop-disabled": False,
237 "resource-version": "1505465356262"
241 "responsedescriptor": {
243 "status": JOB_MODEL_STATUS.FINISHED,
245 "statusdescription": "creating",
247 "responsehistorylist": [
250 "status": JOB_MODEL_STATUS.PROCESSING,
252 "statusdescription": "creating",
260 "/external-system/esr-vnfm-list/esr-vnfm/1?depth=all":
261 [0, json.JSONEncoder().encode(vnfm_info), '200'],
262 "/api/ztevmanagerdriver/v1/1/vnfs/111/terminate":
263 [0, json.JSONEncoder().encode({"jobId": job_id}), '200'],
264 "/api/resmgr/v1/vnf/1":
265 [0, json.JSONEncoder().encode({"jobId": job_id}), '200'],
266 "/cloud-infrastructure/cloud-regions/cloud-region/zte/test?depth=all":
267 [0, json.JSONEncoder().encode(vim_info), '201'],
268 "/cloud-infrastructure/cloud-regions/cloud-region/zte/test/tenants/tenant/admin/vservers/vserver/1?depth=all":
269 [0, json.JSONEncoder().encode(vserver_info), '201'],
270 "/cloud-infrastructure/cloud-regions/cloud-region/zte/test/tenants/tenant/admin/vservers/vserver/1?resource-version=1505465356263":
271 [0, json.JSONEncoder().encode({}), '200'],
272 "/api/ztevmanagerdriver/v1/1/jobs/" + job_id + "?responseId=0":
273 [0, json.JSONEncoder().encode(job_info), '200'],
274 "/network/generic-vnfs/generic-vnf/1?depth=all":
275 [0, json.JSONEncoder().encode(vnf_info), '200'],
276 "/network/generic-vnfs/generic-vnf/1?resource-version=1505465356262":
277 [0, json.JSONEncoder().encode({}), '200']
280 def side_effect(*args):
281 return mock_vals[args[4]]
282 mock_call_req.side_effect = side_effect
285 "terminationType": "forceful",
286 "gracefulTerminationTimeout": "600"
289 TerminateVnfs(req_data, self.nf_inst_id, job_id).run()
290 nfinst = NfInstModel.objects.filter(nfinstid=self.nf_inst_id)
292 self.failUnlessEqual(1, 0)
294 self.failUnlessEqual(1, 1)
297 class TestScaleVnfViews(TestCase):
299 self.client = Client()
300 self.ns_inst_id = str(uuid.uuid4())
301 self.nf_inst_id = str(uuid.uuid4())
302 self.vnffg_id = str(uuid.uuid4())
303 self.vim_id = str(uuid.uuid4())
304 self.job_id = str(uuid.uuid4())
306 self.tenant = "tenantname"
307 NSInstModel(id=self.ns_inst_id, name="ns_name").save()
308 NfInstModel.objects.create(nfinstid=self.nf_inst_id, nf_name='name_1', vnf_id='1',
309 vnfm_inst_id='1', ns_inst_id='111,2-2-2',
310 max_cpu='14', max_ram='12296', max_hd='101', max_shd="20", max_net=10,
311 status='active', mnfinstid=self.nf_uuid, package_id='pkg1',
312 vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
313 '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
314 '"productType": "CN","vnfType": "PGW",'
315 '"description": "PGW VNFD description",'
316 '"isShared":true,"vnfExtendType":"driver"}}')
319 NSInstModel.objects.all().delete()
320 NfInstModel.objects.all().delete()
322 @mock.patch.object(restcall, "call_req")
323 def test_scale_vnf(self, mock_call_req):
324 job_id = JobUtil.create_job("VNF", JOB_TYPE.TERMINATE_VNF, self.nf_inst_id)
328 "flavour_id": "flavour1",
333 "instances_minimum_number": 1,
334 "instances_maximum_number": 4,
335 "local_affinity_antiaffinity_rule": [
337 "affinity_antiaffinity": "affinity",
346 "name": "demo_aspect",
347 "description": "demo_aspect",
348 "associated_group": "elementGroup1",
354 "group_id": "elementGroup1",
357 "name": "elementGroup1",
359 "members": ["gsu_vm","pfu_vm"]
367 "aspectId":"demo_aspect1",
369 "additionalParam":vnfd_info
373 "aspectId":"demo_aspect2",
375 "additionalParam":vnfd_info
381 "/api/ztevmanagerdriver/v1/1/vnfs/111/terminate":
382 [0, json.JSONEncoder().encode({"jobId": job_id}), '200']
385 def side_effect(*args):
386 return mock_vals[args[4]]
388 mock_call_req.side_effect = side_effect
390 NFManualScaleService(self.nf_inst_id, req_data).run()
391 nsIns = NfInstModel.objects.filter(nfinstid=self.nf_inst_id)
393 self.failUnlessEqual(1, 1)
395 self.failUnlessEqual(1, 0)
398 class TestHealVnfViews(TestCase):
400 self.client = Client()
401 self.ns_inst_id = str(uuid.uuid4())
402 self.nf_inst_id = str(uuid.uuid4())
405 self.job_id = JobUtil.create_job("VNF", JOB_TYPE.HEAL_VNF, self.nf_inst_id)
407 NSInstModel(id=self.ns_inst_id, name="ns_name").save()
408 NfInstModel.objects.create(nfinstid=self.nf_inst_id, nf_name='name_1', vnf_id='1',
409 vnfm_inst_id='1', ns_inst_id='111,2-2-2',
410 max_cpu='14', max_ram='12296', max_hd='101', max_shd="20", max_net=10,
411 status='active', mnfinstid=self.nf_uuid, package_id='pkg1',
412 vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
413 '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
414 '"productType": "CN","vnfType": "PGW",'
415 '"description": "PGW VNFD description",'
416 '"isShared":true,"vnfExtendType":"driver"}}')
419 NSInstModel.objects.all().delete()
420 NfInstModel.objects.all().delete()
422 @mock.patch.object(restcall, "call_req")
423 def test_heal_vnf(self, mock_call_req):
426 "/api/ztevmanagerdriver/v1/1/vnfs/111/heal":
427 [0, json.JSONEncoder().encode({"jobId": self.job_id}), '200'],
428 "/external-system/esr-vnfm-list/esr-vnfm/1":
429 [0, json.JSONEncoder().encode(vnfm_info), '200'],
430 "/api/resmgr/v1/vnf/1":
431 [0, json.JSONEncoder().encode({"jobId": self.job_id}), '200'],
432 "/api/ztevmanagerdriver/v1/1/jobs/" + self.job_id + "?responseId=0":
433 [0, json.JSONEncoder().encode({"jobId": self.job_id,
434 "responsedescriptor": {"progress": "100",
435 "status": JOB_MODEL_STATUS.FINISHED,
437 "statusdescription": "creating",
439 "responsehistorylist": [
441 "status": JOB_MODEL_STATUS.PROCESSING,
443 "statusdescription": "creating",
444 "errorcode": "0"}]}}), '200']}
446 def side_effect(*args):
447 return mock_vals[args[4]]
449 mock_call_req.side_effect = side_effect
460 NFHealService(self.nf_inst_id, req_data).run()
462 self.assertEqual(NfInstModel.objects.get(nfinstid=self.nf_inst_id).status, VNF_STATUS.ACTIVE)
464 @mock.patch.object(NFHealService, "run")
465 def test_heal_vnf_non_existing_vnf(self, mock_biz):
466 mock_biz.side_effect = NSLCMException("VNF Not Found")
479 self.assertRaises(NSLCMException, NFHealService(nf_inst_id, req_data).run)
480 self.assertEqual(len(NfInstModel.objects.filter(nfinstid=nf_inst_id)), 0)
483 class TestGetVnfmInfoViews(TestCase):
485 self.client = Client()
486 self.vnfm_id = str(uuid.uuid4())
491 @mock.patch.object(restcall, "call_req")
492 def test_get_vnfm_info(self, mock_call_req):
494 "vnfm-id": "example-vnfm-id-val-62576",
495 "vim-id": "example-vim-id-val-35114",
496 "certificate-url": "example-certificate-url-val-90242",
497 "esr-system-info-list": {
500 "esr-system-info-id": "example-esr-system-info-id-val-78484",
501 "system-name": "example-system-name-val-23790",
502 "type": "example-type-val-52596",
503 "vendor": "example-vendor-val-47399",
504 "version": "example-version-val-42051",
505 "service-url": "example-service-url-val-10731",
506 "user-name": "example-user-name-val-65946",
507 "password": "example-password-val-22505",
508 "system-type": "example-system-type-val-27221",
509 "protocal": "example-protocal-val-54632",
510 "ssl-cacert": "example-ssl-cacert-val-45965",
511 "ssl-insecure": True,
512 "ip-address": "example-ip-address-val-19212",
513 "port": "example-port-val-57641",
514 "cloud-domain": "example-cloud-domain-val-26296",
515 "default-tenant": "example-default-tenant-val-87724"
520 r1 = [0, json.JSONEncoder().encode(vnfm_info_aai), '200']
521 mock_call_req.side_effect = [r1]
522 esr_system_info = ignore_case_get(ignore_case_get(vnfm_info_aai, "esr-system-info-list"), "esr-system-info")
524 "vnfmId": vnfm_info_aai["vnfm-id"],
525 "name": vnfm_info_aai["vnfm-id"],
526 "type": ignore_case_get(esr_system_info[0], "type"),
527 "vimId": vnfm_info_aai["vim-id"],
528 "vendor": ignore_case_get(esr_system_info[0], "vendor"),
529 "version": ignore_case_get(esr_system_info[0], "version"),
530 "description": "vnfm",
531 "certificateUrl": vnfm_info_aai["certificate-url"],
532 "url": ignore_case_get(esr_system_info[0], "service-url"),
533 "userName": ignore_case_get(esr_system_info[0], "user-name"),
534 "password": ignore_case_get(esr_system_info[0], "password"),
535 "createTime": "2016-07-06 15:33:18"
538 response = self.client.get("/api/nslcm/v1/vnfms/%s" % self.vnfm_id)
539 self.failUnlessEqual(status.HTTP_200_OK, response.status_code)
540 context = json.loads(response.content)
541 self.assertEqual(expect_data, context)
544 class TestGetVimInfoViews(TestCase):
546 self.client = Client()
547 self.vim_id = "zte_test"
552 @mock.patch.object(restcall, "call_req")
553 def test_get_vim_info(self, mock_call_req):
554 r1 = [0, json.JSONEncoder().encode(vim_info), '200']
555 mock_call_req.side_effect = [r1]
556 esr_system_info = ignore_case_get(ignore_case_get(vim_info, "esr-system-info-list"), "esr-system-info")
558 "vimId": self.vim_id,
560 "url": ignore_case_get(esr_system_info[0], "service-url"),
561 "userName": ignore_case_get(esr_system_info[0], "user-name"),
562 "password": ignore_case_get(esr_system_info[0], "password"),
563 # "tenant": ignore_case_get(tenants[0], "tenant-id"),
564 "tenant": ignore_case_get(esr_system_info[0], "default-tenant"),
565 "vendor": ignore_case_get(esr_system_info[0], "vendor"),
566 "version": ignore_case_get(esr_system_info[0], "version"),
567 "description": "vim",
569 "type": ignore_case_get(esr_system_info[0], "type"),
570 "createTime": "2016-07-18 12:22:53"
573 response = self.client.get("/api/nslcm/v1/vims/%s" % self.vim_id)
574 self.failUnlessEqual(status.HTTP_200_OK, response.status_code)
575 context = json.loads(response.content)
576 self.assertEqual(expect_data["url"], context["url"])
580 'local_storages': [],
593 'vdu_id': u'vdu_omm.001',
594 'image_file': u'opencos_sss_omm_img_release_20150723-1-disk1',
606 'support_scaling': False,
609 'storage_policy': '',
612 'availability_zone': '',
618 'inject_data_list': [
625 'local_affinity_antiaffinity_rule': {
628 'template_id': u'omm.001',
629 'manual_scale_select_vim': False
631 'description': u'singleommvm'
645 'image_file': u'sss',
657 'support_scaling': False,
660 'storage_policy': '',
663 'availability_zone': '',
669 'inject_data_list': [
676 'local_affinity_antiaffinity_rule': {
680 'manual_scale_select_vim': False
682 'description': u'ompvm'
696 'image_file': u'sss',
708 'support_scaling': False,
711 'storage_policy': '',
714 'availability_zone': '',
720 'inject_data_list': [
727 'local_affinity_antiaffinity_rule': {
731 'manual_scale_select_vim': False
733 'description': u'ompvm'
747 'image_file': u'sss',
759 'support_scaling': False,
762 'storage_policy': '',
765 'availability_zone': '',
771 'inject_data_list': [
778 'local_affinity_antiaffinity_rule': {
782 'manual_scale_select_vim': False
784 'description': u'ompvm'
798 'image_file': u'sss',
810 'support_scaling': False,
813 'storage_policy': '',
816 'availability_zone': '',
822 'inject_data_list': [
829 'local_affinity_antiaffinity_rule': {
832 'template_id': u'10',
833 'manual_scale_select_vim': False
835 'description': u'ppvm'
849 'image_file': u'sss',
861 'support_scaling': False,
864 'storage_policy': '',
867 'availability_zone': '',
873 'inject_data_list': [
880 'local_affinity_antiaffinity_rule': {
883 'template_id': u'11',
884 'manual_scale_select_vim': False
886 'description': u'ppvm'
900 'image_file': u'sss',
912 'support_scaling': False,
915 'storage_policy': '',
918 'availability_zone': '',
924 'inject_data_list': [
931 'local_affinity_antiaffinity_rule': {
934 'template_id': u'12',
935 'manual_scale_select_vim': False
937 'description': u'ppvm'
948 'policy_id': u'policy_scale_sss-vnf-template',
950 'policy_file': '*-vnfd.zip/*-vnf-policy.xml'
959 'name': u'opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
961 'disk_format': u'VMDK',
962 'file_url': u'./zte-cn-sss-main-image/OMM/opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
963 'container_type': 'vm',
965 'hypervisor_type': 'kvm'
967 'image_file_id': u'opencos_sss_omm_img_release_20150723-1-disk1'
974 'disk_format': u'VMDK',
975 'file_url': u'./zte-cn-sss-main-image/NE/sss.vmdk',
976 'container_type': 'vm',
978 'hypervisor_type': 'kvm'
980 'image_file_id': u'sss'
993 'domain_type': u'CN',
994 'version': u'v4.14.10',
995 'vmnumber_overquota_alarm': False,
998 'vnfd_version': u'V00000001',
999 'id': u'sss-vnf-template',
1000 'name': u'sss-vnf-template'
1009 "externalDataNetworkName": {
1033 "plugin_info": "vbrasplugin_1.0",
1035 "is_shared": "False",
1036 "request_reclassification": "False",
1037 "vnfd_version": "1.0.0",
1039 "nsh_aware": "True",
1040 "cross_dc": "False",
1041 "externalDataNetworkName": {
1042 "get_input": "externalDataNetworkName"
1064 "vl_id": "ext_mnet_network",
1067 "network_type": "vlan",
1068 "name": "externalMNetworkName",
1069 "dhcp_enabled": False,
1077 "end_ip": "190.168.100.100",
1078 "gateway_ip": "190.168.100.1",
1079 "start_ip": "190.168.100.2",
1080 "cidr": "190.168.100.0/24",
1082 "network_name": "sub_mnet",
1094 "invariant_id": "vbras_ns",
1095 "description": "vbras_ns",
1104 "vserver-id": "example-vserver-id-val-70924",
1105 "vserver-name": "example-vserver-name-val-61674",
1106 "vserver-name2": "example-vserver-name2-val-19234",
1107 "prov-status": "example-prov-status-val-94916",
1108 "vserver-selflink": "example-vserver-selflink-val-26562",
1110 "is-closed-loop-disabled": True,
1111 "resource-version": "1505465356263",
1115 "volume-id": "example-volume-id-val-71854",
1116 "volume-selflink": "example-volume-selflink-val-22433"
1123 "interface-name": "example-interface-name-val-24351",
1124 "interface-role": "example-interface-role-val-43242",
1125 "v6-wan-link-ip": "example-v6-wan-link-ip-val-4196",
1126 "selflink": "example-selflink-val-61295",
1127 "interface-id": "example-interface-id-val-95879",
1128 "macaddr": "example-macaddr-val-37302",
1129 "network-name": "example-network-name-val-44254",
1130 "management-option": "example-management-option-val-49009",
1131 "interface-description": "example-interface-description-val-99923",
1132 "is-port-mirrored": True,
1134 "prov-status": "example-prov-status-val-4698",
1135 "is-ip-unnumbered": True,
1136 "allowed-address-pairs": "example-allowed-address-pairs-val-5762",
1140 "vlan-interface": "example-vlan-interface-val-58193",
1141 "vlan-id-inner": 54452151,
1142 "vlan-id-outer": 70239293,
1143 "speed-value": "example-speed-value-val-18677",
1144 "speed-units": "example-speed-units-val-46185",
1145 "vlan-description": "example-vlan-description-val-81675",
1146 "backdoor-connection": "example-backdoor-connection-val-44608",
1147 "vpn-key": "example-vpn-key-val-7946",
1148 "orchestration-status": "example-orchestration-status-val-33611",
1150 "prov-status": "example-prov-status-val-8288",
1151 "is-ip-unnumbered": True,
1152 "l3-interface-ipv4-address-list": [
1154 "l3-interface-ipv4-address": "example-l3-interface-ipv4-address-val-25520",
1155 "l3-interface-ipv4-prefix-length": 69931928,
1156 "vlan-id-inner": 86628520,
1157 "vlan-id-outer": 62729236,
1158 "is-floating": True,
1159 "neutron-network-id": "example-neutron-network-id-val-64021",
1160 "neutron-subnet-id": "example-neutron-subnet-id-val-95049"
1163 "l3-interface-ipv6-address-list": [
1165 "l3-interface-ipv6-address": "example-l3-interface-ipv6-address-val-64310",
1166 "l3-interface-ipv6-prefix-length": 57919834,
1167 "vlan-id-inner": 79150122,
1168 "vlan-id-outer": 59789973,
1169 "is-floating": True,
1170 "neutron-network-id": "example-neutron-network-id-val-31713",
1171 "neutron-subnet-id": "example-neutron-subnet-id-val-89568"
1180 "pci-id": "example-pci-id-val-16747",
1181 "vf-vlan-filter": "example-vf-vlan-filter-val-4613",
1182 "vf-mac-filter": "example-vf-mac-filter-val-68168",
1183 "vf-vlan-strip": True,
1184 "vf-vlan-anti-spoof-check": True,
1185 "vf-mac-anti-spoof-check": True,
1186 "vf-mirrors": "example-vf-mirrors-val-6270",
1187 "vf-broadcast-allow": True,
1188 "vf-unknown-multicast-allow": True,
1189 "vf-unknown-unicast-allow": True,
1190 "vf-insert-stag": True,
1191 "vf-link-status": "example-vf-link-status-val-49266",
1192 "neutron-network-id": "example-neutron-network-id-val-29493"
1199 "interface-name": "example-interface-name-val-98222",
1200 "interface-role": "example-interface-role-val-78360",
1201 "v6-wan-link-ip": "example-v6-wan-link-ip-val-76921",
1202 "selflink": "example-selflink-val-27117",
1203 "interface-id": "example-interface-id-val-11260",
1204 "macaddr": "example-macaddr-val-60378",
1205 "network-name": "example-network-name-val-16258",
1206 "management-option": "example-management-option-val-35097",
1207 "interface-description": "example-interface-description-val-10475",
1208 "is-port-mirrored": True,
1210 "prov-status": "example-prov-status-val-65203",
1211 "is-ip-unnumbered": True,
1212 "allowed-address-pairs": "example-allowed-address-pairs-val-65028"
1216 "l3-interface-ipv4-address-list": [
1218 "l3-interface-ipv4-address": "example-l3-interface-ipv4-address-val-72779",
1219 "l3-interface-ipv4-prefix-length": 55956636,
1220 "vlan-id-inner": 98174431,
1221 "vlan-id-outer": 20372128,
1222 "is-floating": True,
1223 "neutron-network-id": "example-neutron-network-id-val-39596",
1224 "neutron-subnet-id": "example-neutron-subnet-id-val-51109"
1227 "l3-interface-ipv6-address-list": [
1229 "l3-interface-ipv6-address": "example-l3-interface-ipv6-address-val-95203",
1230 "l3-interface-ipv6-prefix-length": 57454747,
1231 "vlan-id-inner": 53421060,
1232 "vlan-id-outer": 16006050,
1233 "is-floating": True,
1234 "neutron-network-id": "example-neutron-network-id-val-54216",
1235 "neutron-subnet-id": "example-neutron-subnet-id-val-1841"
1245 "vnfm-id": "example-vnfm-id-val-97336",
1246 "vim-id": "zte_test",
1247 "certificate-url": "example-certificate-url-val-18046",
1248 "resource-version": "example-resource-version-val-42094",
1249 "esr-system-info-list": {
1250 "esr-system-info": [
1252 "esr-system-info-id": "example-esr-system-info-id-val-7713",
1253 "system-name": "example-system-name-val-19801",
1254 "type": "ztevmanagerdriver",
1255 "vendor": "example-vendor-val-50079",
1256 "version": "example-version-val-93146",
1257 "service-url": "example-service-url-val-68090",
1258 "user-name": "example-user-name-val-14470",
1259 "password": "example-password-val-84190",
1260 "system-type": "example-system-type-val-42773",
1261 "protocal": "example-protocal-val-85736",
1262 "ssl-cacert": "example-ssl-cacert-val-33989",
1263 "ssl-insecure": True,
1264 "ip-address": "example-ip-address-val-99038",
1265 "port": "example-port-val-27323",
1266 "cloud-domain": "example-cloud-domain-val-55163",
1267 "default-tenant": "example-default-tenant-val-99383",
1268 "resource-version": "example-resource-version-val-15424"
1275 "cloud-owner": "example-cloud-owner-val-97336",
1276 "cloud-region-id": "example-cloud-region-id-val-35532",
1277 "cloud-type": "example-cloud-type-val-18046",
1278 "owner-defined-type": "example-owner-defined-type-val-9413",
1279 "cloud-region-version": "example-cloud-region-version-val-85706",
1280 "identity-url": "example-identity-url-val-71252",
1281 "cloud-zone": "example-cloud-zone-val-27112",
1282 "complex-name": "example-complex-name-val-85283",
1283 "sriov-automation": True,
1284 "cloud-extra-info": "example-cloud-extra-info-val-90854",
1285 "cloud-epa-caps": "example-cloud-epa-caps-val-2409",
1286 "resource-version": "example-resource-version-val-42094",
1287 "esr-system-info-list": {
1288 "esr-system-info": [
1290 "esr-system-info-id": "example-esr-system-info-id-val-7713",
1291 "system-name": "example-system-name-val-19801",
1292 "type": "example-type-val-24477",
1293 "vendor": "example-vendor-val-50079",
1294 "version": "example-version-val-93146",
1295 "service-url": "example-service-url-val-68090",
1296 "user-name": "example-user-name-val-14470",
1297 "password": "example-password-val-84190",
1298 "system-type": "example-system-type-val-42773",
1299 "protocal": "example-protocal-val-85736",
1300 "ssl-cacert": "example-ssl-cacert-val-33989",
1301 "ssl-insecure": True,
1302 "ip-address": "example-ip-address-val-99038",
1303 "port": "example-port-val-27323",
1304 "cloud-domain": "example-cloud-domain-val-55163",
1305 "default-tenant": "admin",
1306 "resource-version": "example-resource-version-val-15424"