Update the Django version to 3.1.14
[vfc/nfvo/lcm.git] / lcm / ns_sfcs / tests / test_sfc.py
1 # Copyright 2018 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
15 import json
16 import mock
17 import uuid
18 import time
19
20 from django.test import Client
21 from django.test import TestCase
22 from rest_framework import status
23
24 from lcm.pub.database.models import FPInstModel, CPInstModel, PortInstModel, NfInstModel
25 from lcm.pub.database.models import VNFFGInstModel
26 from lcm.pub.msapi import extsys
27 from lcm.pub.msapi import sdncdriver
28 from lcm.pub.utils import restcall
29 from lcm.ns_sfcs.biz.create_sfc_worker import CreateSfcWorker
30 from lcm.pub.utils.jobutil import JobUtil
31 from lcm.ns_sfcs.tests.test_data import nsd_model
32
33
34 class TestSfc(TestCase):
35     def setUp(self):
36         self.client = Client()
37         FPInstModel.objects.filter().delete()
38         VNFFGInstModel.objects.filter().delete()
39         CPInstModel.objects.filter().delete()
40         PortInstModel.objects.filter().delete()
41         NfInstModel.objects.filter().delete()
42
43         self.save_vnffg_inst_data()
44         self.save_vnf_inst_data()
45         self.save_cp_inst_data()
46         self.save_port_inst_data()
47         self.save_fp_inst_data()
48
49     def tearDown(self):
50         FPInstModel.objects.filter().delete()
51         VNFFGInstModel.objects.filter().delete()
52         CPInstModel.objects.filter().delete()
53         PortInstModel.objects.filter().delete()
54         NfInstModel.objects.filter().delete()
55
56     @mock.patch.object(extsys, "get_sdn_controller_by_id")
57     @mock.patch.object(sdncdriver, "create_flow_classfier")
58     @mock.patch.object(restcall, 'call_req')
59     def test_create_flow_classfier(self, mock_call_req, mock_create_flow_classfier, mock_get_sdn_controller_by_id):
60         data = {
61             "fpinstid": "fp_inst_1",
62             "context": json.dumps(nsd_model)
63         }
64         mock_create_flow_classfier.return_value = [0, json.dumps({'id': '1'})]
65         mock_get_sdn_controller_by_id.return_value = json.loads('{"test":"test_name","url":"url_add"}')
66         resp = self.client.post("/api/nslcm/v1/ns/create_flow_classifier", data)
67         self.assertEqual(resp.status_code, status.HTTP_200_OK)
68
69     @mock.patch.object(extsys, "get_sdn_controller_by_id")
70     @mock.patch.object(sdncdriver, 'create_port_pair_group')
71     @mock.patch.object(sdncdriver, 'create_port_pair')
72     @mock.patch.object(restcall, 'call_req')
73     def test_create_port_pair_group(self, mock_call_req, mock_create_port_pair,
74                                     mock_create_port_pair_group, mock_get_sdn_controller_by_id):
75         data = {
76             "nsinstanceid": "ns_inst_1",
77             "fpinstid": "fp_inst_1",
78             "context": json.dumps(nsd_model)
79         }
80         mock_create_port_pair.return_value = [0, json.dumps({'id': '1'})]
81         mock_create_port_pair_group.return_value = [0, json.dumps({'id': '1'})]
82         mock_get_sdn_controller_by_id.return_value = json.loads('{"test":"test_name","url":"url_add"}')
83         resp = self.client.post("/api/nslcm/v1/ns/create_port_pair_group", data)
84         self.assertEqual(resp.status_code, status.HTTP_200_OK)
85
86     @mock.patch.object(extsys, "get_sdn_controller_by_id")
87     @mock.patch.object(sdncdriver, 'create_port_chain')
88     @mock.patch.object(restcall, 'call_req')
89     def test_create_port_chain(self, mock_call_req, mock_create_port_chain, mock_get_sdn_controller_by_id):
90         data = {
91             "nsinstanceid": "ns_inst_1",
92             "fpinstid": "fp_inst_1",
93             "context": json.dumps(nsd_model)
94         }
95         self.update_fp_inst_data()
96         mock_create_port_chain.return_value = [0, json.dumps({'id': '1'})]
97         mock_get_sdn_controller_by_id.return_value = json.loads('{"test":"test_name","url":"url_add"}')
98         resp = self.client.post("/api/nslcm/v1/ns/create_port_chain", data)
99         self.assertEqual(resp.status_code, status.HTTP_200_OK)
100
101     @mock.patch.object(CreateSfcWorker, 'run')
102     @mock.patch.object(JobUtil, 'create_job')
103     @mock.patch.object(time, 'sleep')
104     def test_create_sfc(self, mock_sleep, mock_create_job, mock_run):
105         mock_create_job.return_value = 'job_id_1'
106         mock_sleep.return_value = None
107         mock_run.return_value = None
108         data = {
109             'nsInstanceid': "ns_inst_1",
110             "context": json.dumps(nsd_model),
111             "fpindex": "1",
112             'fpinstid': str(uuid.uuid4()),
113             "sdnControllerId": "sdnControllerId_1"
114         }
115         self.client.post("/api/nslcm/v1/ns/sfcs", data, format='json')
116         # self.assertEqual(resp.status_code, status.HTTP_200_OK)
117         # self.assertEqual(resp.data['jobId'], 'job_id_1')
118
119     def update_fp_inst_data(self):
120         FPInstModel.objects.filter(fpinstid="fp_inst_1").update(flowclassifiers="1",
121                                                                 portpairgroups=json.JSONEncoder().encode([{
122                                                                     "groupid": "1",
123                                                                     "portpair": ["2"]
124                                                                 }]))
125
126     def save_vnffg_inst_data(self):
127         VNFFGInstModel(
128             vnffgdid="vnffg_id1",
129             vnffginstid="vnffg_inst_1",
130             nsinstid="ns_inst_1",
131             endpointnumber=2,
132             vllist="vlinst1",
133             cplist="cp1",
134             vnflist="vnf1,vnf2"
135         ).save()
136
137     def save_cp_inst_data(self):
138         CPInstModel(
139             cpinstanceid="cp_inst_1",
140             cpdid="cpd_1",
141             ownertype=0,
142             ownerid="vnf_inst_1",
143             relatedtype=1,
144             relatedport="port_inst_1"
145         ).save()
146
147         CPInstModel(
148             cpinstanceid="cp_inst_2",
149             cpdid="cpd_2",
150             ownertype=0,
151             ownerid="vnf_inst_2",
152             relatedtype=1,
153             relatedport="port_inst_2"
154         ).save()
155
156     def save_fp_inst_data(self):
157         FPInstModel(
158             fpid="fpd_1",
159             fpinstid="fp_inst_1",
160             nsinstid="ns_inst_1",
161             vnffginstid="vnffg_inst_1",
162             policyinfo=[{
163                 "type": "ACL",
164                 "criteria": {
165                     "dest_port_range": [80, 1024],
166                     "source_port_range": [80, 1024],
167                     "ip_protocol": "tcp",
168                     "dest_ip_range": ["192.168.1.2", "192.168.1.100"],
169                     "source_ip_range": ["192.168.1.2", "192.168.1.100"],
170                     "dscp": 100,
171                 }
172             }],
173             status="enabled",
174             sdncontrollerid="sdn_controller_1"
175
176         ).save()
177
178         FPInstModel(
179             fpid="fpd_2",
180             fpinstid="fp_inst_2",
181             nsinstid="ns_inst_1",
182             vnffginstid="vnffg_inst_1",
183             policyinfo=[{
184                 "type": "ACL",
185                 "criteria": {
186                     "dest_port_range": [80, 1024],
187                     "source_port_range": [80, 1024],
188                     "ip_protocol": "tcp",
189                     "dest_ip_range": ["192.168.1.2", "192.168.1.100"],
190                     "source_ip_range": ["192.168.1.2", "192.168.1.100"],
191                     "dscp": 100,
192                 }
193             }],
194             status="enabled",
195             sdncontrollerid="sdn_controller_1"
196         ).save()
197
198     def save_port_inst_data(self):
199         PortInstModel(
200             portid="port_inst_1",
201             networkid="network_inst_1",
202             subnetworkid="subnetwork_inst_1",
203             vimid="vim_1",
204             resourceid="res_1",
205             ipaddress="10.43.25.2",
206             macaddress="EC-F4-BB-20-43-F1"
207         ).save()
208
209         PortInstModel(
210             portid="port_inst_2",
211             networkid="network_inst_1",
212             subnetworkid="subnetwork_inst_1",
213             vimid="vim_1",
214             resourceid="res_1",
215             ipaddress="10.43.25.3",
216             macaddress="EC-F4-BB-20-43-F2"
217         ).save()
218
219     def save_vnf_inst_data(self):
220         NfInstModel(
221             nfinstid="vnf_inst_1",
222             ns_inst_id="ns_inst_1",
223             vnf_id="vnf_1",
224             vnfd_model=json.dumps(vnfd_model_dict1)
225
226         ).save()
227
228         NfInstModel(
229             nfinstid="vnf_inst_2",
230             vnf_id="vnf_2",
231             ns_inst_id="ns_inst_1",
232             vnfd_model=json.dumps(vnfd_model_dict2)
233
234         ).save()
235
236
237 vnfd_model_dict1 = {
238     'vdus': [
239         {
240             'volumn_storages': [
241
242             ],
243             'nfv_compute': {
244                 'mem_size': '',
245                 'num_cpus': '2'
246             },
247             'local_storages': [
248
249             ],
250             'vdu_id': 'vdu_omm.001',
251             'image_file': 'opencos_sss_omm_img_release_20150723-1-disk1',
252             'dependencies': [
253
254             ],
255             'vls': [
256
257             ],
258             'cps': [
259
260             ],
261             'properties': {
262                 'key_vdu': '',
263                 'support_scaling': False,
264                 'vdu_type': '',
265                 'name': '',
266                 'storage_policy': '',
267                 'location_info': {
268                     'vimId': '',
269                     'availability_zone': '',
270                     'region': '',
271                     'dc': '',
272                     'host': '',
273                     'tenant': ''
274                 },
275                 'inject_data_list': [
276
277                 ],
278                 'watchdog': {
279                     'action': '',
280                     'enabledelay': ''
281                 },
282                 'local_affinity_antiaffinity_rule': {
283
284                 },
285                 'template_id': 'omm.001',
286                 'manual_scale_select_vim': False
287             },
288             'description': 'singleommvm'
289         },
290         {
291             'volumn_storages': [
292
293             ],
294             'nfv_compute': {
295                 'mem_size': '',
296                 'num_cpus': '4'
297             },
298             'local_storages': [
299
300             ],
301             'vdu_id': 'vdu_1',
302             'image_file': 'sss',
303             'dependencies': [
304
305             ],
306             'vls': [
307
308             ],
309             'cps': [
310
311             ],
312             'properties': {
313                 'key_vdu': '',
314                 'support_scaling': False,
315                 'vdu_type': '',
316                 'name': '',
317                 'storage_policy': '',
318                 'location_info': {
319                     'vimId': '',
320                     'availability_zone': '',
321                     'region': '',
322                     'dc': '',
323                     'host': '',
324                     'tenant': ''
325                 },
326                 'inject_data_list': [
327
328                 ],
329                 'watchdog': {
330                     'action': '',
331                     'enabledelay': ''
332                 },
333                 'local_affinity_antiaffinity_rule': {
334
335                 },
336                 'template_id': '1',
337                 'manual_scale_select_vim': False
338             },
339             'description': 'ompvm'
340         },
341         {
342             'volumn_storages': [
343
344             ],
345             'nfv_compute': {
346                 'mem_size': '',
347                 'num_cpus': '14'
348             },
349             'local_storages': [
350
351             ],
352             'vdu_id': 'vdu_2',
353             'image_file': 'sss',
354             'dependencies': [
355
356             ],
357             'vls': [
358
359             ],
360             'cps': [
361
362             ],
363             'properties': {
364                 'key_vdu': '',
365                 'support_scaling': False,
366                 'vdu_type': '',
367                 'name': '',
368                 'storage_policy': '',
369                 'location_info': {
370                     'vimId': '',
371                     'availability_zone': '',
372                     'region': '',
373                     'dc': '',
374                     'host': '',
375                     'tenant': ''
376                 },
377                 'inject_data_list': [
378
379                 ],
380                 'watchdog': {
381                     'action': '',
382                     'enabledelay': ''
383                 },
384                 'local_affinity_antiaffinity_rule': {
385
386                 },
387                 'template_id': '2',
388                 'manual_scale_select_vim': False
389             },
390             'description': 'ompvm'
391         },
392         {
393             'volumn_storages': [
394
395             ],
396             'nfv_compute': {
397                 'mem_size': '',
398                 'num_cpus': '14'
399             },
400             'local_storages': [
401
402             ],
403             'vdu_id': 'vdu_3',
404             'image_file': 'sss',
405             'dependencies': [
406
407             ],
408             'vls': [
409
410             ],
411             'cps': [
412
413             ],
414             'properties': {
415                 'key_vdu': '',
416                 'support_scaling': False,
417                 'vdu_type': '',
418                 'name': '',
419                 'storage_policy': '',
420                 'location_info': {
421                     'vimId': '',
422                     'availability_zone': '',
423                     'region': '',
424                     'dc': '',
425                     'host': '',
426                     'tenant': ''
427                 },
428                 'inject_data_list': [
429
430                 ],
431                 'watchdog': {
432                     'action': '',
433                     'enabledelay': ''
434                 },
435                 'local_affinity_antiaffinity_rule': {
436
437                 },
438                 'template_id': '3',
439                 'manual_scale_select_vim': False
440             },
441             'description': 'ompvm'
442         },
443         {
444             'volumn_storages': [
445
446             ],
447             'nfv_compute': {
448                 'mem_size': '',
449                 'num_cpus': '4'
450             },
451             'local_storages': [
452
453             ],
454             'vdu_id': 'vdu_10',
455             'image_file': 'sss',
456             'dependencies': [
457
458             ],
459             'vls': [
460
461             ],
462             'cps': [
463
464             ],
465             'properties': {
466                 'key_vdu': '',
467                 'support_scaling': False,
468                 'vdu_type': '',
469                 'name': '',
470                 'storage_policy': '',
471                 'location_info': {
472                     'vimId': '',
473                     'availability_zone': '',
474                     'region': '',
475                     'dc': '',
476                     'host': '',
477                     'tenant': ''
478                 },
479                 'inject_data_list': [
480
481                 ],
482                 'watchdog': {
483                     'action': '',
484                     'enabledelay': ''
485                 },
486                 'local_affinity_antiaffinity_rule': {
487
488                 },
489                 'template_id': '10',
490                 'manual_scale_select_vim': False
491             },
492             'description': 'ppvm'
493         },
494         {
495             'volumn_storages': [
496
497             ],
498             'nfv_compute': {
499                 'mem_size': '',
500                 'num_cpus': '14'
501             },
502             'local_storages': [
503
504             ],
505             'vdu_id': 'vdu_11',
506             'image_file': 'sss',
507             'dependencies': [
508
509             ],
510             'vls': [
511
512             ],
513             'cps': [
514
515             ],
516             'properties': {
517                 'key_vdu': '',
518                 'support_scaling': False,
519                 'vdu_type': '',
520                 'name': '',
521                 'storage_policy': '',
522                 'location_info': {
523                     'vimId': '',
524                     'availability_zone': '',
525                     'region': '',
526                     'dc': '',
527                     'host': '',
528                     'tenant': ''
529                 },
530                 'inject_data_list': [
531
532                 ],
533                 'watchdog': {
534                     'action': '',
535                     'enabledelay': ''
536                 },
537                 'local_affinity_antiaffinity_rule': {
538
539                 },
540                 'template_id': '11',
541                 'manual_scale_select_vim': False
542             },
543             'description': 'ppvm'
544         },
545         {
546             'volumn_storages': [
547
548             ],
549             'nfv_compute': {
550                 'mem_size': '',
551                 'num_cpus': '14'
552             },
553             'local_storages': [
554
555             ],
556             'vdu_id': 'vdu_12',
557             'image_file': 'sss',
558             'dependencies': [
559
560             ],
561             'vls': [
562
563             ],
564             'cps': [
565
566             ],
567             'properties': {
568                 'key_vdu': '',
569                 'support_scaling': False,
570                 'vdu_type': '',
571                 'name': '',
572                 'storage_policy': '',
573                 'location_info': {
574                     'vimId': '',
575                     'availability_zone': '',
576                     'region': '',
577                     'dc': '',
578                     'host': '',
579                     'tenant': ''
580                 },
581                 'inject_data_list': [
582
583                 ],
584                 'watchdog': {
585                     'action': '',
586                     'enabledelay': ''
587                 },
588                 'local_affinity_antiaffinity_rule': {
589
590                 },
591                 'template_id': '12',
592                 'manual_scale_select_vim': False
593             },
594             'description': 'ppvm'
595         }
596     ],
597     'volumn_storages': [
598
599     ],
600     'policies': {
601         'scaling': {
602             'targets': {
603
604             },
605             'policy_id': 'policy_scale_sss-vnf-template',
606             'properties': {
607                 'policy_file': '*-vnfd.zip/*-vnf-policy.xml'
608             },
609             'description': ''
610         }
611     },
612     'image_files': [
613         {
614             'description': '',
615             'properties': {
616                 'name': 'opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
617                 'checksum': '',
618                 'disk_format': 'VMDK',
619                 'file_url': './zte-cn-sss-main-image/OMM/opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
620                 'container_type': 'vm',
621                 'version': '',
622                 'hypervisor_type': 'kvm'
623             },
624             'image_file_id': 'opencos_sss_omm_img_release_20150723-1-disk1'
625         },
626         {
627             'description': '',
628             'properties': {
629                 'name': 'sss.vmdk',
630                 'checksum': '',
631                 'disk_format': 'VMDK',
632                 'file_url': './zte-cn-sss-main-image/NE/sss.vmdk',
633                 'container_type': 'vm',
634                 'version': '',
635                 'hypervisor_type': 'kvm'
636             },
637             'image_file_id': 'sss'
638         }
639     ],
640     'vls': [
641
642     ],
643     'cps': [
644         {'cp_id': 'cpd_1',
645          "description": "",
646          "properties": {
647              "mac_address": "00:d9:00:82:11:e1",
648              "ip_address": "10.43.25.2",
649              "ip_range_start": "192.168.1.20",
650              "ip_range_end": "192.168.1.29",
651              "sfc_encapsulation": ""
652          }
653          },
654     ],
655     'metadata': {
656         'vendor': 'zte',
657         'is_shared': False,
658         'description': '',
659         'domain_type': 'CN',
660         'version': 'v4.14.10',
661         'vmnumber_overquota_alarm': False,
662         'cross_dc': False,
663         'vnf_type': 'SSS',
664         'vnfd_version': 'V00000001',
665         'id': 'vnfd_2',
666         'name': 'sss-vnf-template'
667     },
668
669     'vnf_exposed': {
670         "external_cps": [
671             {
672                 "key_name": "virtualLink1",
673                 "cp_id": "cp1",
674             },
675         ],
676         "forward_cps": [
677             {
678                 "key_name": "forwarder1",
679                 "cp_id": "cpd_1",
680             },
681             {
682                 "key_name": "forwarder2",
683                 "cp_id": "cpd_2",
684             },
685         ],
686     }
687 }
688
689 vnfd_model_dict2 = {
690     'local_storages': [
691
692     ],
693     'vdus': [
694         {
695             'volumn_storages': [
696
697             ],
698             'nfv_compute': {
699                 'mem_size': '',
700                 'num_cpus': '2'
701             },
702             'local_storages': [
703
704             ],
705             'vdu_id': 'vdu_omm.001',
706             'image_file': 'opencos_sss_omm_img_release_20150723-1-disk1',
707             'dependencies': [
708
709             ],
710             'vls': [
711
712             ],
713             'cps': [
714
715             ],
716             'properties': {
717                 'key_vdu': '',
718                 'support_scaling': False,
719                 'vdu_type': '',
720                 'name': '',
721                 'storage_policy': '',
722                 'location_info': {
723                     'vimId': '',
724                     'availability_zone': '',
725                     'region': '',
726                     'dc': '',
727                     'host': '',
728                     'tenant': ''
729                 },
730                 'inject_data_list': [
731
732                 ],
733                 'watchdog': {
734                     'action': '',
735                     'enabledelay': ''
736                 },
737                 'local_affinity_antiaffinity_rule': {
738
739                 },
740                 'template_id': 'omm.001',
741                 'manual_scale_select_vim': False
742             },
743             'description': 'singleommvm'
744         },
745         {
746             'volumn_storages': [
747
748             ],
749             'nfv_compute': {
750                 'mem_size': '',
751                 'num_cpus': '4'
752             },
753             'local_storages': [
754
755             ],
756             'vdu_id': 'vdu_1',
757             'image_file': 'sss',
758             'dependencies': [
759
760             ],
761             'vls': [
762
763             ],
764             'cps': [
765
766             ],
767             'properties': {
768                 'key_vdu': '',
769                 'support_scaling': False,
770                 'vdu_type': '',
771                 'name': '',
772                 'storage_policy': '',
773                 'location_info': {
774                     'vimId': '',
775                     'availability_zone': '',
776                     'region': '',
777                     'dc': '',
778                     'host': '',
779                     'tenant': ''
780                 },
781                 'inject_data_list': [
782
783                 ],
784                 'watchdog': {
785                     'action': '',
786                     'enabledelay': ''
787                 },
788                 'local_affinity_antiaffinity_rule': {
789
790                 },
791                 'template_id': '1',
792                 'manual_scale_select_vim': False
793             },
794             'description': 'ompvm'
795         },
796         {
797             'volumn_storages': [
798
799             ],
800             'nfv_compute': {
801                 'mem_size': '',
802                 'num_cpus': '14'
803             },
804             'local_storages': [
805
806             ],
807             'vdu_id': 'vdu_2',
808             'image_file': 'sss',
809             'dependencies': [
810
811             ],
812             'vls': [
813
814             ],
815             'cps': [
816
817             ],
818             'properties': {
819                 'key_vdu': '',
820                 'support_scaling': False,
821                 'vdu_type': '',
822                 'name': '',
823                 'storage_policy': '',
824                 'location_info': {
825                     'vimId': '',
826                     'availability_zone': '',
827                     'region': '',
828                     'dc': '',
829                     'host': '',
830                     'tenant': ''
831                 },
832                 'inject_data_list': [
833
834                 ],
835                 'watchdog': {
836                     'action': '',
837                     'enabledelay': ''
838                 },
839                 'local_affinity_antiaffinity_rule': {
840
841                 },
842                 'template_id': '2',
843                 'manual_scale_select_vim': False
844             },
845             'description': 'ompvm'
846         },
847         {
848             'volumn_storages': [
849
850             ],
851             'nfv_compute': {
852                 'mem_size': '',
853                 'num_cpus': '14'
854             },
855             'local_storages': [
856
857             ],
858             'vdu_id': 'vdu_3',
859             'image_file': 'sss',
860             'dependencies': [
861
862             ],
863             'vls': [
864
865             ],
866             'cps': [
867
868             ],
869             'properties': {
870                 'key_vdu': '',
871                 'support_scaling': False,
872                 'vdu_type': '',
873                 'name': '',
874                 'storage_policy': '',
875                 'location_info': {
876                     'vimId': '',
877                     'availability_zone': '',
878                     'region': '',
879                     'dc': '',
880                     'host': '',
881                     'tenant': ''
882                 },
883                 'inject_data_list': [
884
885                 ],
886                 'watchdog': {
887                     'action': '',
888                     'enabledelay': ''
889                 },
890                 'local_affinity_antiaffinity_rule': {
891
892                 },
893                 'template_id': '3',
894                 'manual_scale_select_vim': False
895             },
896             'description': 'ompvm'
897         },
898         {
899             'volumn_storages': [
900
901             ],
902             'nfv_compute': {
903                 'mem_size': '',
904                 'num_cpus': '4'
905             },
906             'local_storages': [
907
908             ],
909             'vdu_id': 'vdu_10',
910             'image_file': 'sss',
911             'dependencies': [
912
913             ],
914             'vls': [
915
916             ],
917             'cps': [
918
919             ],
920             'properties': {
921                 'key_vdu': '',
922                 'support_scaling': False,
923                 'vdu_type': '',
924                 'name': '',
925                 'storage_policy': '',
926                 'location_info': {
927                     'vimId': '',
928                     'availability_zone': '',
929                     'region': '',
930                     'dc': '',
931                     'host': '',
932                     'tenant': ''
933                 },
934                 'inject_data_list': [
935
936                 ],
937                 'watchdog': {
938                     'action': '',
939                     'enabledelay': ''
940                 },
941                 'local_affinity_antiaffinity_rule': {
942
943                 },
944                 'template_id': '10',
945                 'manual_scale_select_vim': False
946             },
947             'description': 'ppvm'
948         },
949         {
950             'volumn_storages': [
951
952             ],
953             'nfv_compute': {
954                 'mem_size': '',
955                 'num_cpus': '14'
956             },
957             'local_storages': [
958
959             ],
960             'vdu_id': 'vdu_11',
961             'image_file': 'sss',
962             'dependencies': [
963
964             ],
965             'vls': [
966
967             ],
968             'cps': [
969
970             ],
971             'properties': {
972                 'key_vdu': '',
973                 'support_scaling': False,
974                 'vdu_type': '',
975                 'name': '',
976                 'storage_policy': '',
977                 'location_info': {
978                     'vimId': '',
979                     'availability_zone': '',
980                     'region': '',
981                     'dc': '',
982                     'host': '',
983                     'tenant': ''
984                 },
985                 'inject_data_list': [
986
987                 ],
988                 'watchdog': {
989                     'action': '',
990                     'enabledelay': ''
991                 },
992                 'local_affinity_antiaffinity_rule': {
993
994                 },
995                 'template_id': '11',
996                 'manual_scale_select_vim': False
997             },
998             'description': 'ppvm'
999         },
1000         {
1001             'volumn_storages': [
1002
1003             ],
1004             'nfv_compute': {
1005                 'mem_size': '',
1006                 'num_cpus': '14'
1007             },
1008             'local_storages': [
1009
1010             ],
1011             'vdu_id': 'vdu_12',
1012             'image_file': 'sss',
1013             'dependencies': [
1014
1015             ],
1016             'vls': [
1017
1018             ],
1019             'cps': [
1020
1021             ],
1022             'properties': {
1023                 'key_vdu': '',
1024                 'support_scaling': False,
1025                 'vdu_type': '',
1026                 'name': '',
1027                 'storage_policy': '',
1028                 'location_info': {
1029                     'vimId': '',
1030                     'availability_zone': '',
1031                     'region': '',
1032                     'dc': '',
1033                     'host': '',
1034                     'tenant': ''
1035                 },
1036                 'inject_data_list': [
1037
1038                 ],
1039                 'watchdog': {
1040                     'action': '',
1041                     'enabledelay': ''
1042                 },
1043                 'local_affinity_antiaffinity_rule': {
1044
1045                 },
1046                 'template_id': '12',
1047                 'manual_scale_select_vim': False
1048             },
1049             'description': 'ppvm'
1050         }
1051     ],
1052     'volumn_storages': [
1053
1054     ],
1055     'policies': {
1056         'scaling': {
1057             'targets': {
1058
1059             },
1060             'policy_id': 'policy_scale_sss-vnf-template',
1061             'properties': {
1062                 'policy_file': '*-vnfd.zip/*-vnf-policy.xml'
1063             },
1064             'description': ''
1065         }
1066     },
1067     'image_files': [
1068         {
1069             'description': '',
1070             'properties': {
1071                 'name': 'opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
1072                 'checksum': '',
1073                 'disk_format': 'VMDK',
1074                 'file_url': './zte-cn-sss-main-image/OMM/opencos_sss_omm_img_release_20150723-1-disk1.vmdk',
1075                 'container_type': 'vm',
1076                 'version': '',
1077                 'hypervisor_type': 'kvm'
1078             },
1079             'image_file_id': 'opencos_sss_omm_img_release_20150723-1-disk1'
1080         },
1081         {
1082             'description': '',
1083             'properties': {
1084                 'name': 'sss.vmdk',
1085                 'checksum': '',
1086                 'disk_format': 'VMDK',
1087                 'file_url': './zte-cn-sss-main-image/NE/sss.vmdk',
1088                 'container_type': 'vm',
1089                 'version': '',
1090                 'hypervisor_type': 'kvm'
1091             },
1092             'image_file_id': 'sss'
1093         }
1094     ],
1095     'vls': [
1096
1097     ],
1098     'cps': [
1099         {'cp_id': 'cpd_2',
1100          "description": "",
1101          "properties": {
1102              "mac_address": "00:d9:00:82:11:e2",
1103              "ip_address": "10.43.25.3",
1104              "ip_range_start": "192.168.1.20",
1105              "ip_range_end": "192.168.1.29",
1106              "sfc_encapsulation": ""
1107          }
1108          },
1109     ],
1110     'metadata': {
1111         'vendor': 'zte',
1112         'is_shared': False,
1113         'description': '',
1114         'domain_type': 'CN',
1115         'version': 'v4.14.10',
1116         'vmnumber_overquota_alarm': False,
1117         'cross_dc': False,
1118         'vnf_type': 'SSS',
1119         'vnfd_version': 'V00000001',
1120         'id': 'sss-vnf-template',
1121         'name': 'vnfd_2'
1122     },
1123     'vnf_exposed': {
1124         "external_cps": [
1125             {
1126                 "key_name": "virtualLink1",
1127                 "cp_id": "cp1",
1128             },
1129         ],
1130         "forward_cps": [
1131             {
1132                 "key_name": "forwarder2",
1133                 "cp_id": "cpd_2",
1134             },
1135             {
1136                 "key_name": "forwarder3",
1137                 "cp_id": "cpd_2",
1138             },
1139         ],
1140     }
1141 }