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
23 from lcm.ns.vnfs.create_vnfs import CreateVnfs
24 from lcm.pub.database.models import NfInstModel, JobModel, NfPackageModel, NSInstModel
25 from lcm.pub.utils import restcall
26 from lcm.pub.utils.jobutil import JOB_MODEL_STATUS
27 from lcm.pub.utils.timeutil import now_time
28 from lcm.pub.utils.values import ignore_case_get
29 from lcm.ns.vnfs.terminate_nfs import TerminateVnfs
30 from lcm.ns.vnfs.scale_vnfs import NFManualScaleService
31 from lcm.ns.vnfs.heal_vnfs import NFHealService
32 from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE
33 from lcm.pub.exceptions import NSLCMException
36 "vnfm-id": "example-vnfm-id-val-97336",
37 "vim-id": "example-vim-id-val-35532",
38 "certificate-url": "example-certificate-url-val-18046",
39 "resource-version": "example-resource-version-val-42094",
40 "esr-system-info-list": {
43 "esr-system-info-id": "example-esr-system-info-id-val-7713",
44 "system-name": "example-system-name-val-19801",
45 "type": "ztevmanagerdriver",
46 "vendor": "example-vendor-val-50079",
47 "version": "example-version-val-93146",
48 "service-url": "example-service-url-val-68090",
49 "user-name": "example-user-name-val-14470",
50 "password": "example-password-val-84190",
51 "system-type": "example-system-type-val-42773",
52 "protocal": "example-protocal-val-85736",
53 "ssl-cacert": "example-ssl-cacert-val-33989",
55 "ip-address": "example-ip-address-val-99038",
56 "port": "example-port-val-27323",
57 "cloud-domain": "example-cloud-domain-val-55163",
58 "default-tenant": "example-default-tenant-val-99383",
59 "resource-version": "example-resource-version-val-15424"
65 class TestGetVnfViews(TestCase):
67 self.client = Client()
68 self.nf_inst_id = str(uuid.uuid4())
69 NfInstModel(nfinstid=self.nf_inst_id, nf_name='vnf1', vnfm_inst_id='1', vnf_id='vnf_id1',
70 status=VNF_STATUS.ACTIVE, create_time=now_time(), lastuptime=now_time()).save()
73 NfInstModel.objects.all().delete()
75 def test_get_vnf(self):
76 response = self.client.get("/api/nslcm/v1/ns/vnfs/%s" % self.nf_inst_id)
77 self.failUnlessEqual(status.HTTP_200_OK, response.status_code)
78 context = json.loads(response.content)
79 self.failUnlessEqual(self.nf_inst_id, context['vnfInstId'])
82 class TestCreateVnfViews(TestCase):
84 self.ns_inst_id = str(uuid.uuid4())
85 self.job_id = str(uuid.uuid4())
87 'nsInstanceId': self.ns_inst_id,
88 'additionalParamForNs': {"inputs": json.dumps({})},
89 'additionalParamForVnf': [{
90 'vnfprofileid': 'VBras',
92 'inputs': json.dumps({'vnf_param1': '11', 'vnf_param2': '22'}),
93 'vnfminstanceid': "1"}}],
95 self.client = Client()
96 NfPackageModel(uuid=str(uuid.uuid4()), nfpackageid='package_id1', vnfdid='zte_vbras', vendor='zte',
97 vnfdversion='1.0.0', vnfversion='1.0.0', vnfdmodel=json.dumps(vnfd_model_dict)).save()
98 NSInstModel(id=self.ns_inst_id, name='ns', nspackage_id='1', nsd_id='nsd_id', description='description',
99 status='instantiating', nsd_model=json.dumps(nsd_model_dict), create_time=now_time(),
100 lastuptime=now_time()).save()
103 NfInstModel.objects.all().delete()
104 JobModel.objects.all().delete()
106 @mock.patch.object(CreateVnfs, 'run')
107 def test_create_vnf(self, mock_run):
108 response = self.client.post("/api/nslcm/v1/ns/vnfs", data=self.data)
109 self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code)
110 context = json.loads(response.content)
111 self.assertTrue(NfInstModel.objects.filter(nfinstid=context['vnfInstId']).exists())
113 @mock.patch.object(restcall, 'call_req')
114 def test_create_vnf_thread(self, mock_call_req):
116 "/api/ztevmanagerdriver/v1/1/vnfs":
117 [0, json.JSONEncoder().encode({"jobId": self.job_id, "vnfInstanceId": 3}), '200'],
118 "/external-system/esr-vnfm-list/esr-vnfm/1":
119 [0, json.JSONEncoder().encode(vnfm_info), '200'],
120 "/api/resmgr/v1/vnf":
121 [0, json.JSONEncoder().encode({}), '200'],
122 "/api/resmgr/v1/vnfinfo":
123 [0, json.JSONEncoder().encode({}), '200'],
124 "/api/ztevmanagerdriver/v1/jobs/" + self.job_id + "&responseId=0":
125 [0, json.JSONEncoder().encode({"jobid": self.job_id,
126 "responsedescriptor": {"progress": "100",
127 "status": JOB_MODEL_STATUS.FINISHED,
129 "statusdescription": "creating",
131 "responsehistorylist": [
133 "status": JOB_MODEL_STATUS.PROCESSING,
135 "statusdescription": "creating",
136 "errorcode": "0"}]}}), '200']}
138 def side_effect(*args):
139 return mock_vals[args[4]]
140 mock_call_req.side_effect = side_effect
141 data = {'ns_instance_id': ignore_case_get(self.data, 'nsInstanceId'),
142 'additional_param_for_ns': ignore_case_get(self.data, 'additionalParamForNs'),
143 'additional_param_for_vnf': ignore_case_get(self.data, 'additionalParamForVnf'),
144 'vnf_index': ignore_case_get(self.data, 'vnfIndex')}
145 nf_inst_id, job_id = create_vnfs.prepare_create_params()
146 CreateVnfs(data, nf_inst_id, job_id).run()
147 self.assertTrue(NfInstModel.objects.get(nfinstid=nf_inst_id).status, VNF_STATUS.ACTIVE)
150 class TestTerminateVnfViews(TestCase):
152 self.client = Client()
153 self.ns_inst_id = str(uuid.uuid4())
154 self.nf_inst_id = '1'
155 self.vnffg_id = str(uuid.uuid4())
156 self.vim_id = str(uuid.uuid4())
157 self.job_id = str(uuid.uuid4())
159 self.tenant = "tenantname"
160 NSInstModel.objects.all().delete()
161 NfInstModel.objects.all().delete()
162 NSInstModel(id=self.ns_inst_id, name="ns_name").save()
163 NfInstModel.objects.create(nfinstid=self.nf_inst_id, nf_name='name_1', vnf_id='1',
164 vnfm_inst_id='1', ns_inst_id='111,2-2-2',
165 max_cpu='14', max_ram='12296', max_hd='101', max_shd="20", max_net=10,
166 status='active', mnfinstid=self.nf_uuid, package_id='pkg1',
167 vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
168 '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
169 '"productType": "CN","vnfType": "PGW",'
170 '"description": "PGW VNFD description",'
171 '"isShared":true,"vnfExtendType":"driver"}}')
174 NSInstModel.objects.all().delete()
175 NfInstModel.objects.all().delete()
177 @mock.patch.object(TerminateVnfs, 'run')
178 def test_terminate_vnf_url(self, mock_run):
180 "terminationType": "forceful",
181 "gracefulTerminationTimeout": "600"}
183 response = self.client.post("/api/nslcm/v1/ns/vnfs/%s" % self.nf_inst_id, data=req_data)
184 self.failUnlessEqual(status.HTTP_201_CREATED, response.status_code)
187 @mock.patch.object(restcall, 'call_req')
188 def test_terminate_vnf(self, mock_call_req):
189 job_id = JobUtil.create_job("VNF", JOB_TYPE.TERMINATE_VNF, self.nf_inst_id)
191 nfinst = NfInstModel.objects.filter(nfinstid=self.nf_inst_id)
193 self.failUnlessEqual(1, 1)
195 self.failUnlessEqual(1, 0)
198 "vnf-id": "vnf-id-test111",
199 "vnf-name": "vnf-name-test111",
200 "vnf-type": "vnf-type-test111",
202 "is-closed-loop-disabled": False,
203 "resource-version": "1505465356262"
207 "responsedescriptor": {
209 "status": JOB_MODEL_STATUS.FINISHED,
211 "statusdescription": "creating",
213 "responsehistorylist": [
216 "status": JOB_MODEL_STATUS.PROCESSING,
218 "statusdescription": "creating",
226 "/external-system/esr-vnfm-list/esr-vnfm/1?depth=all":
227 [0, json.JSONEncoder().encode(vnfm_info), '200'],
228 "/api/ztevmanagerdriver/v1/1/vnfs/111/terminate":
229 [0, json.JSONEncoder().encode({"jobId": job_id}), '200'],
230 "/api/resmgr/v1/vnf/1":
231 [0, json.JSONEncoder().encode({"jobId": job_id}), '200'],
232 "/api/ztevmanagerdriver/v1/1/jobs/" + job_id + "?responseId=0":
233 [0, json.JSONEncoder().encode(job_info), '200'],
234 "/network/generic-vnfs/generic-vnf/111?depth=all":
235 [0, json.JSONEncoder().encode(vnf_info), '200'],
236 "/network/generic-vnfs/generic-vnf/111?resource-version=1505465356262":
237 [0, json.JSONEncoder().encode({}), '200']
240 def side_effect(*args):
241 return mock_vals[args[4]]
242 mock_call_req.side_effect = side_effect
245 "terminationType": "forceful",
246 "gracefulTerminationTimeout": "600"}
248 TerminateVnfs(req_data, self.nf_inst_id, job_id).run()
249 nfinst = NfInstModel.objects.filter(nfinstid=self.nf_inst_id)
251 self.failUnlessEqual(1, 0)
253 self.failUnlessEqual(1, 1)
255 class TestScaleVnfViews(TestCase):
257 self.client = Client()
258 self.ns_inst_id = str(uuid.uuid4())
259 self.nf_inst_id = str(uuid.uuid4())
260 self.vnffg_id = str(uuid.uuid4())
261 self.vim_id = str(uuid.uuid4())
262 self.job_id = str(uuid.uuid4())
264 self.tenant = "tenantname"
265 NSInstModel(id=self.ns_inst_id, name="ns_name").save()
266 NfInstModel.objects.create(nfinstid=self.nf_inst_id, nf_name='name_1', vnf_id='1',
267 vnfm_inst_id='1', ns_inst_id='111,2-2-2',
268 max_cpu='14', max_ram='12296', max_hd='101', max_shd="20", max_net=10,
269 status='active', mnfinstid=self.nf_uuid, package_id='pkg1',
270 vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
271 '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
272 '"productType": "CN","vnfType": "PGW",'
273 '"description": "PGW VNFD description",'
274 '"isShared":true,"vnfExtendType":"driver"}}')
277 NSInstModel.objects.all().delete()
278 NfInstModel.objects.all().delete()
280 @mock.patch.object(restcall, "call_req")
281 def test_scale_vnf(self, mock_call_req):
282 job_id = JobUtil.create_job("VNF", JOB_TYPE.TERMINATE_VNF, self.nf_inst_id)
287 "flavour_id":"flavour1",
292 "instances_minimum_number": 1,
293 "instances_maximum_number": 4,
294 "local_affinity_antiaffinity_rule":[
296 "affinity_antiaffinity":"affinity",
305 "name": "demo_aspect",
306 "description": "demo_aspect",
307 "associated_group": "elementGroup1",
315 "group_id": "elementGroup1",
318 "name": "elementGroup1",
320 "members": ["gsu_vm","pfu_vm"],
329 "aspectId":"demo_aspect1",
331 "additionalParam":vnfd_info
335 "aspectId":"demo_aspect2",
337 "additionalParam":vnfd_info
344 "/api/ztevmanagerdriver/v1/1/vnfs/111/terminate":
345 [0, json.JSONEncoder().encode({"jobId": job_id}), '200'],
346 "/api/ztevmanagerdriver/v1/1/vnfs/111/terminate":
347 [0, json.JSONEncoder().encode({"jobId": job_id}), '200']
349 def side_effect(*args):
350 return mock_vals[args[4]]
351 mock_call_req.side_effect = side_effect
353 NFManualScaleService(self.nf_inst_id, req_data).run()
354 nsIns = NfInstModel.objects.filter(nfinstid=self.nf_inst_id)
356 self.failUnlessEqual(1, 1)
358 self.failUnlessEqual(1, 0)
361 class TestHealVnfViews(TestCase):
363 self.client = Client()
364 self.ns_inst_id = str(uuid.uuid4())
365 self.nf_inst_id = str(uuid.uuid4())
368 self.job_id = JobUtil.create_job("VNF", JOB_TYPE.HEAL_VNF, self.nf_inst_id)
370 NSInstModel(id=self.ns_inst_id, name="ns_name").save()
371 NfInstModel.objects.create(nfinstid=self.nf_inst_id, nf_name='name_1', vnf_id='1',
372 vnfm_inst_id='1', ns_inst_id='111,2-2-2',
373 max_cpu='14', max_ram='12296', max_hd='101', max_shd="20", max_net=10,
374 status='active', mnfinstid=self.nf_uuid, package_id='pkg1',
375 vnfd_model='{"metadata": {"vnfdId": "1","vnfdName": "PGW001",'
376 '"vnfProvider": "zte","vnfdVersion": "V00001","vnfVersion": "V5.10.20",'
377 '"productType": "CN","vnfType": "PGW",'
378 '"description": "PGW VNFD description",'
379 '"isShared":true,"vnfExtendType":"driver"}}')
382 NSInstModel.objects.all().delete()
383 NfInstModel.objects.all().delete()
385 @mock.patch.object(restcall, "call_req")
386 def test_heal_vnf(self, mock_call_req):
390 "/api/ztevmanagerdriver/v1/1/vnfs/111/heal":
391 [0, json.JSONEncoder().encode({"jobId": self.job_id}), '200'],
392 "/external-system/esr-vnfm-list/esr-vnfm/1":
393 [0, json.JSONEncoder().encode(vnfm_info), '200'],
394 "/api/resmgr/v1/vnf/1":
395 [0, json.JSONEncoder().encode({"jobId": self.job_id}), '200'],
396 "/api/ztevmanagerdriver/v1/1/jobs/" + self.job_id + "?responseId=0":
397 [0, json.JSONEncoder().encode({"jobId": self.job_id,
398 "responsedescriptor": {"progress": "100",
399 "status": JOB_MODEL_STATUS.FINISHED,
401 "statusdescription": "creating",
403 "responsehistorylist": [
405 "status": JOB_MODEL_STATUS.PROCESSING,
407 "statusdescription": "creating",
408 "errorcode": "0"}]}}), '200']}
410 def side_effect(*args):
411 return mock_vals[args[4]]
413 mock_call_req.side_effect = side_effect
424 NFHealService(self.nf_inst_id, req_data).run()
426 self.assertEqual(NfInstModel.objects.get(nfinstid=self.nf_inst_id).status, VNF_STATUS.ACTIVE)
428 @mock.patch.object(NFHealService, "run")
429 def test_heal_vnf_non_existing_vnf(self, mock_biz):
430 mock_biz.side_effect = NSLCMException("VNF Not Found")
443 self.assertRaises(NSLCMException, NFHealService(nf_inst_id, req_data).run)
444 self.assertEqual(len(NfInstModel.objects.filter(nfinstid=nf_inst_id)), 0)
446 class TestGetVnfmInfoViews(TestCase):
448 self.client = Client()
449 self.vnfm_id = str(uuid.uuid4())
454 @mock.patch.object(restcall, "call_req")
455 def test_get_vnfm_info(self, mock_call_req):
458 "vnfm-id": "example-vnfm-id-val-62576",
459 "vim-id": "example-vim-id-val-35114",
460 "certificate-url": "example-certificate-url-val-90242",
461 "esr-system-info-list": {
464 "esr-system-info-id": "example-esr-system-info-id-val-78484",
465 "system-name": "example-system-name-val-23790",
466 "type": "example-type-val-52596",
467 "vendor": "example-vendor-val-47399",
468 "version": "example-version-val-42051",
469 "service-url": "example-service-url-val-10731",
470 "user-name": "example-user-name-val-65946",
471 "password": "example-password-val-22505",
472 "system-type": "example-system-type-val-27221",
473 "protocal": "example-protocal-val-54632",
474 "ssl-cacert": "example-ssl-cacert-val-45965",
475 "ssl-insecure": True,
476 "ip-address": "example-ip-address-val-19212",
477 "port": "example-port-val-57641",
478 "cloud-domain": "example-cloud-domain-val-26296",
479 "default-tenant": "example-default-tenant-val-87724"
484 r1 = [0, json.JSONEncoder().encode(vnfm_info_aai), '200']
485 mock_call_req.side_effect = [r1]
486 esr_system_info = ignore_case_get(ignore_case_get(vnfm_info_aai, "esr-system-info-list"), "esr-system-info")
489 "vnfmId": vnfm_info_aai["vnfm-id"],
490 "name": vnfm_info_aai["vnfm-id"],
491 "type": ignore_case_get(esr_system_info[0], "type"),
492 "vimId": vnfm_info_aai["vim-id"],
493 "vendor": ignore_case_get(esr_system_info[0], "vendor"),
494 "version": ignore_case_get(esr_system_info[0], "version"),
495 "description": "vnfm",
496 "certificateUrl": vnfm_info_aai["certificate-url"],
497 "url": ignore_case_get(esr_system_info[0], "service-url"),
498 "userName": ignore_case_get(esr_system_info[0], "user-name"),
499 "password": ignore_case_get(esr_system_info[0], "password"),
500 "createTime": "2016-07-06 15:33:18"
503 response = self.client.get("/api/nslcm/v1/vnfms/%s" % self.vnfm_id)
504 self.failUnlessEqual(status.HTTP_200_OK, response.status_code)
505 context = json.loads(response.content)
506 self.assertEqual(expect_data, context)
508 class TestGetVimInfoViews(TestCase):
510 self.client = Client()
511 self.vim_id = "zte_test"
516 @mock.patch.object(restcall, "call_req")
517 def test_get_vim_info(self, mock_call_req):
518 r1 = [0, json.JSONEncoder().encode(vim_info_aai), '200']
519 mock_call_req.side_effect = [r1]
520 esr_system_info = ignore_case_get(ignore_case_get(vim_info_aai, "esr-system-info-list"), "esr-system-info")
523 "vimId": self.vim_id,
525 "url": ignore_case_get(esr_system_info[0], "service-url"),
526 "userName": ignore_case_get(esr_system_info[0], "user-name"),
527 "password": ignore_case_get(esr_system_info[0], "password"),
528 # "tenant": ignore_case_get(tenants[0], "tenant-id"),
529 "tenant": ignore_case_get(esr_system_info[0], "default-tenant"),
530 "vendor": ignore_case_get(esr_system_info[0], "vendor"),
531 "version": ignore_case_get(esr_system_info[0], "version"),
532 "description": "vim",
534 "type": ignore_case_get(esr_system_info[0], "type"),
535 "createTime": "2016-07-18 12:22:53"
538 response = self.client.get("/api/nslcm/v1/vims/%s" % self.vim_id)
539 self.failUnlessEqual(status.HTTP_200_OK, response.status_code)
540 context = json.loads(response.content)
541 self.assertEqual(expect_data["url"], context["url"])
544 'local_storages': [],
547 'volumn_storages': [],
551 'local_storages': [],
552 'vdu_id': u'vdu_omm.001',
553 'image_file': u'opencos_sss_omm_img_release_20150723-1-disk1',
559 'support_scaling': False,
562 'storage_policy': '',
565 'availability_zone': '',
570 'inject_data_list': [],
574 'local_affinity_antiaffinity_rule': {},
575 'template_id': u'omm.001',
576 'manual_scale_select_vim': False},
577 'description': u'singleommvm'},
579 'volumn_storages': [],
583 'local_storages': [],
585 'image_file': u'sss',
591 'support_scaling': False,
594 'storage_policy': '',
597 'availability_zone': '',
602 'inject_data_list': [],
606 'local_affinity_antiaffinity_rule': {},
608 'manual_scale_select_vim': False},
609 'description': u'ompvm'},
611 'volumn_storages': [],
615 'local_storages': [],
617 'image_file': u'sss',
623 'support_scaling': False,
626 'storage_policy': '',
629 'availability_zone': '',
634 'inject_data_list': [],
638 'local_affinity_antiaffinity_rule': {},
640 'manual_scale_select_vim': False},
641 'description': u'ompvm'},
643 'volumn_storages': [],
647 'local_storages': [],
649 'image_file': u'sss',
655 'support_scaling': False,
658 'storage_policy': '',
661 'availability_zone': '',
666 'inject_data_list': [],
670 'local_affinity_antiaffinity_rule': {},
672 'manual_scale_select_vim': False},
673 'description': u'ompvm'},
675 'volumn_storages': [],
679 'local_storages': [],
681 'image_file': u'sss',
687 'support_scaling': False,
690 'storage_policy': '',
693 'availability_zone': '',
698 'inject_data_list': [],
702 'local_affinity_antiaffinity_rule': {},
703 'template_id': u'10',
704 'manual_scale_select_vim': False},
705 'description': u'ppvm'},
707 'volumn_storages': [],
711 'local_storages': [],
713 'image_file': u'sss',
719 'support_scaling': False,
722 'storage_policy': '',
725 'availability_zone': '',
730 'inject_data_list': [],
734 'local_affinity_antiaffinity_rule': {},
735 'template_id': u'11',
736 'manual_scale_select_vim': False},
737 'description': u'ppvm'},
739 'volumn_storages': [],
743 'local_storages': [],
745 'image_file': u'sss',
751 'support_scaling': False,
754 'storage_policy': '',
757 'availability_zone': '',
762 'inject_data_list': [],
766 'local_affinity_antiaffinity_rule': {},
767 'template_id': u'12',
768 'manual_scale_select_vim': False},
769 'description': u'ppvm'}],
770 'volumn_storages': [],
774 'policy_id': u'policy_scale_sss-vnf-template',
776 'policy_file': '*-vnfd.zip/*-vnf-policy.xml'},
782 'name': u'opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
784 'disk_format': u'VMDK',
785 'file_url': u'./zte-cn-sss-main-image/OMM/opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
786 'container_type': 'vm',
788 'hypervisor_type': 'kvm'},
789 'image_file_id': u'opencos_sss_omm_img_release_20150723-1-disk1'},
795 'disk_format': u'VMDK',
796 'file_url': u'./zte-cn-sss-main-image/NE/sss.vmdk',
797 'container_type': 'vm',
799 'hypervisor_type': 'kvm'},
800 'image_file_id': u'sss'}],
807 'domain_type': u'CN',
808 'version': u'v4.14.10',
809 'vmnumber_overquota_alarm': False,
812 'vnfd_version': u'V00000001',
813 'id': u'sss-vnf-template',
814 'name': u'sss-vnf-template'}}
819 "externalDataNetworkName": {
831 "plugin_info": "vbrasplugin_1.0",
833 "is_shared": "False",
834 "request_reclassification": "False",
835 "vnfd_version": "1.0.0",
839 "externalDataNetworkName": {
840 "get_input": "externalDataNetworkName"},
851 "vl_id": "ext_mnet_network",
854 "network_type": "vlan",
855 "name": "externalMNetworkName",
856 "dhcp_enabled": False,
863 "end_ip": "190.168.100.100",
864 "gateway_ip": "190.168.100.1",
865 "start_ip": "190.168.100.2",
866 "cidr": "190.168.100.0/24",
868 "network_name": "sub_mnet",
873 "invariant_id": "vbras_ns",
874 "description": "vbras_ns",
882 "cloud-owner": "example-cloud-owner-val-1140",
883 "cloud-region-id": "example-cloud-region-id-val-73665",
884 "cloud-type": "example-cloud-type-val-14605",
885 "owner-defined-type": "example-owner-defined-type-val-84308",
886 "cloud-region-version": "example-cloud-region-version-val-67581",
887 "identity-url": "example-identity-url-val-98779",
888 "cloud-zone": "example-cloud-zone-val-67799",
889 "complex-name": "example-complex-name-val-62313",
890 "sriov-automation": True,
891 "cloud-extra-info": "example-cloud-extra-info-val-72366",
892 "cloud-epa-caps": "example-cloud-epa-caps-val-6090",
896 "volume-group-id": "example-volume-group-id-val-22419",
897 "volume-group-name": "example-volume-group-name-val-41986",
898 "heat-stack-id": "example-heat-stack-id-val-53241",
899 "vnf-type": "example-vnf-type-val-19402",
900 "orchestration-status": "example-orchestration-status-val-61478",
901 "model-customization-id": "example-model-customization-id-val-82523",
902 "vf-module-model-customization-id": "example-vf-module-model-customization-id-val-49214"
909 "tenant-id": "example-tenant-id-val-28032",
910 "tenant-name": "example-tenant-name-val-65072",
911 "tenant-context": "example-tenant-context-val-81984",
915 "vserver-id": "example-vserver-id-val-25067",
916 "vserver-name": "example-vserver-name-val-16505",
917 "vserver-name2": "example-vserver-name2-val-84664",
918 "prov-status": "example-prov-status-val-1789",
919 "vserver-selflink": "example-vserver-selflink-val-6858",
921 "is-closed-loop-disabled": True,
925 "volume-id": "example-volume-id-val-69135",
926 "volume-selflink": "example-volume-selflink-val-96457"
933 "interface-name": "example-interface-name-val-57532",
934 "interface-role": "example-interface-role-val-10218",
935 "v6-wan-link-ip": "example-v6-wan-link-ip-val-64941",
936 "selflink": "example-selflink-val-80427",
937 "interface-id": "example-interface-id-val-53136",
938 "macaddr": "example-macaddr-val-35417",
939 "network-name": "example-network-name-val-77107",
940 "management-option": "example-management-option-val-19752",
941 "interface-description": "example-interface-description-val-34461",
942 "is-port-mirrored": True,
944 "prov-status": "example-prov-status-val-39824",
945 "is-ip-unnumbered": True,
946 "allowed-address-pairs": "example-allowed-address-pairs-val-76052",
950 "vlan-interface": "example-vlan-interface-val-81272",
951 "vlan-id-inner": 70939085,
952 "vlan-id-outer": 80445097,
953 "speed-value": "example-speed-value-val-47939",
954 "speed-units": "example-speed-units-val-90989",
955 "vlan-description": "example-vlan-description-val-96792",
956 "backdoor-connection": "example-backdoor-connection-val-74707",
957 "vpn-key": "example-vpn-key-val-73677",
958 "orchestration-status": "example-orchestration-status-val-93544",
960 "prov-status": "example-prov-status-val-18854",
961 "is-ip-unnumbered": True,
962 "l3-interface-ipv4-address-list": [
964 "l3-interface-ipv4-address": "example-l3-interface-ipv4-address-val-46993",
965 "l3-interface-ipv4-prefix-length": 28216731,
966 "vlan-id-inner": 8589169,
967 "vlan-id-outer": 22167953,
969 "neutron-network-id": "example-neutron-network-id-val-45028",
970 "neutron-subnet-id": "example-neutron-subnet-id-val-99844"
973 "l3-interface-ipv6-address-list": [
975 "l3-interface-ipv6-address": "example-l3-interface-ipv6-address-val-8414",
976 "l3-interface-ipv6-prefix-length": 6761190,
977 "vlan-id-inner": 88349266,
978 "vlan-id-outer": 87459050,
980 "neutron-network-id": "example-neutron-network-id-val-23050",
981 "neutron-subnet-id": "example-neutron-subnet-id-val-49448"
990 "pci-id": "example-pci-id-val-9702",
991 "vf-vlan-filter": "example-vf-vlan-filter-val-94893",
992 "vf-mac-filter": "example-vf-mac-filter-val-40257",
993 "vf-vlan-strip": True,
994 "vf-vlan-anti-spoof-check": True,
995 "vf-mac-anti-spoof-check": True,
996 "vf-mirrors": "example-vf-mirrors-val-86932",
997 "vf-broadcast-allow": True,
998 "vf-unknown-multicast-allow": True,
999 "vf-unknown-unicast-allow": True,
1000 "vf-insert-stag": True,
1001 "vf-link-status": "example-vf-link-status-val-94678",
1002 "neutron-network-id": "example-neutron-network-id-val-18823"
1009 "interface-name": "example-interface-name-val-42153",
1010 "interface-role": "example-interface-role-val-38539",
1011 "v6-wan-link-ip": "example-v6-wan-link-ip-val-12452",
1012 "selflink": "example-selflink-val-38250",
1013 "interface-id": "example-interface-id-val-68366",
1014 "macaddr": "example-macaddr-val-76392",
1015 "network-name": "example-network-name-val-58136",
1016 "management-option": "example-management-option-val-88555",
1017 "interface-description": "example-interface-description-val-66875",
1018 "is-port-mirrored": True,
1020 "prov-status": "example-prov-status-val-9493",
1021 "is-ip-unnumbered": True,
1022 "allowed-address-pairs": "example-allowed-address-pairs-val-80407"
1026 "l3-interface-ipv4-address-list": [
1028 "l3-interface-ipv4-address": "example-l3-interface-ipv4-address-val-57596",
1029 "l3-interface-ipv4-prefix-length": 90030728,
1030 "vlan-id-inner": 43361064,
1031 "vlan-id-outer": 18962103,
1032 "is-floating": True,
1033 "neutron-network-id": "example-neutron-network-id-val-55667",
1034 "neutron-subnet-id": "example-neutron-subnet-id-val-46585"
1037 "l3-interface-ipv6-address-list": [
1039 "l3-interface-ipv6-address": "example-l3-interface-ipv6-address-val-74591",
1040 "l3-interface-ipv6-prefix-length": 38739444,
1041 "vlan-id-inner": 65048885,
1042 "vlan-id-outer": 94802338,
1043 "is-floating": True,
1044 "neutron-network-id": "example-neutron-network-id-val-64105",
1045 "neutron-subnet-id": "example-neutron-subnet-id-val-65190"
1060 "flavor-id": "example-flavor-id-val-92555",
1061 "flavor-name": "example-flavor-name-val-35938",
1062 "flavor-vcpus": 88056,
1063 "flavor-ram": 18804,
1064 "flavor-disk": 2575,
1065 "flavor-ephemeral": 28190,
1066 "flavor-swap": "example-flavor-swap-val-76888",
1067 "flavor-is-public": True,
1068 "flavor-selflink": "example-flavor-selflink-val-33816",
1069 "flavor-disabled": True
1073 "group-assignments": {
1074 "group-assignment": [
1076 "group-id": "example-group-id-val-6872",
1077 "group-type": "example-group-type-val-64490",
1078 "group-name": "example-group-name-val-67702",
1079 "group-description": "example-group-description-val-99149"
1086 "snapshot-id": "example-snapshot-id-val-32009",
1087 "snapshot-name": "example-snapshot-name-val-47165",
1088 "snapshot-architecture": "example-snapshot-architecture-val-84769",
1089 "snapshot-os-distro": "example-snapshot-os-distro-val-70763",
1090 "snapshot-os-version": "example-snapshot-os-version-val-4220",
1091 "application": "example-application-val-12453",
1092 "application-vendor": "example-application-vendor-val-95617",
1093 "application-version": "example-application-version-val-77699",
1094 "snapshot-selflink": "example-snapshot-selflink-val-90202",
1095 "prev-snapshot-id": "example-prev-snapshot-id-val-10951"
1102 "image-id": "example-image-id-val-17245",
1103 "image-name": "example-image-name-val-93251",
1104 "image-architecture": "example-image-architecture-val-21934",
1105 "image-os-distro": "example-image-os-distro-val-51699",
1106 "image-os-version": "example-image-os-version-val-92745",
1107 "application": "example-application-val-47760",
1108 "application-vendor": "example-application-vendor-val-67650",
1109 "application-version": "example-application-version-val-4499",
1110 "image-selflink": "example-image-selflink-val-70348",
1114 "metaname": "example-metaname-val-57218",
1115 "metaval": "example-metaval-val-39269"
1125 "switch-name": "example-switch-name-val-31508",
1126 "vcenter-url": "example-vcenter-url-val-57139"
1133 "network-uuid": "example-network-uuid-val-93435",
1134 "network-name": "example-network-name-val-66722",
1135 "cvlan-tag": 54019733,
1136 "ipv4-oam-gateway-address": "example-ipv4-oam-gateway-address-val-3261",
1137 "ipv4-oam-gateway-address-prefix-length": 53725
1141 "availability-zones": {
1142 "availability-zone": [
1144 "availability-zone-name": "example-availability-zone-name-val-71842",
1145 "hypervisor-type": "example-hypervisor-type-val-21339",
1146 "operational-status": "example-operational-status-val-18872"
1150 "esr-system-info-list": {
1151 "esr-system-info": [
1153 "esr-system-info-id": "example-esr-system-info-id-val-42986",
1154 "system-name": "example-system-name-val-1117",
1155 "type": "example-type-val-28567",
1156 "vendor": "example-vendor-val-99666",
1157 "version": "example-version-val-9880",
1158 "service-url": "example-service-url-val-95838",
1159 "user-name": "example-user-name-val-88013",
1160 "password": "example-password-val-51483",
1161 "system-type": "example-system-type-val-24554",
1162 "protocal": "example-protocal-val-92250",
1163 "ssl-cacert": "example-ssl-cacert-val-80275",
1164 "ssl-insecure": True,
1165 "ip-address": "example-ip-address-val-49558",
1166 "port": "example-port-val-55636",
1167 "cloud-domain": "example-cloud-domain-val-77975",
1168 "default-tenant": "example-default-tenant-val-85499"