Refactor code 33/34233/1
authorfengyuanxing <feng.yuanxing@zte.com.cn>
Tue, 6 Mar 2018 07:55:26 +0000 (15:55 +0800)
committerfengyuanxing <feng.yuanxing@zte.com.cn>
Tue, 6 Mar 2018 07:55:26 +0000 (15:55 +0800)
Change-Id: I47a2a844aa2f81904b0f58d31162f5d9dfb90629
Issue-ID: VFC-784
Signed-off-by: fengyuanxing <feng.yuanxing@zte.com.cn>
lcm/ns/ns_manual_scale.py
lcm/ns/vnfs/scale_vnfs.py
lcm/pub/tests/test_scaleaspect.py
lcm/pub/utils/scaleaspect.py

index 7a17f58..e9373a7 100644 (file)
@@ -23,7 +23,7 @@ from lcm.pub.database.models import JobModel, NSInstModel
 from lcm.pub.exceptions import NSLCMException
 from lcm.pub.utils.jobutil import JobUtil, JOB_MODEL_STATUS
 from lcm.pub.utils.values import ignore_case_get
-from lcm.pub.utils.scaleaspect import get_scale_vnf_data_package
+from lcm.pub.utils.scaleaspect import get_scale_vnf_data_info_list
 
 JOB_ERROR = 255
 SCALE_TYPE = ("SCALE_NS", "SCALE_VNF")
@@ -67,7 +67,7 @@ class NSManualScaleService(threading.Thread):
 
         # Get data if SCALE_NS
         self.scale_ns_data = ignore_case_get(self.request_data, 'scaleNsByStepsData')
-        self.scale_vnf_data = get_scale_vnf_data_package(self.scale_ns_data, self.ns_instance_id)
+        self.scale_vnf_data = get_scale_vnf_data_info_list(self.scale_ns_data, self.ns_instance_id)
         logger.debug('scale_vnf_data = %s' % self.scale_vnf_data)
         # Get data if SCALE_VNF
         if not self.scale_vnf_data:
index fe6c101..5b4e978 100644 (file)
@@ -34,7 +34,8 @@ class NFManualScaleService(threading.Thread):
         super(NFManualScaleService, self).__init__()
         self.vnf_instance_id = vnf_instance_id
         self.data = data
-        self.job_id = JobUtil.create_job("NF", JOB_TYPE.MANUAL_SCALE_VNF, vnf_instance_id)
+        self.job_id = JobUtil.create_job(
+            "NF", JOB_TYPE.MANUAL_SCALE_VNF, vnf_instance_id)
         self.scale_vnf_data = ''
         self.nf_model = {}
         self.nf_scale_params = []
@@ -63,44 +64,67 @@ class NFManualScaleService(threading.Thread):
     def get_and_check_params(self):
         nf_info = NfInstModel.objects.filter(nfinstid=self.vnf_instance_id)
         if not nf_info:
-            logger.error('NF instance[id=%s] does not exist' % self.vnf_instance_id)
-            raise NSLCMException('NF instance[id=%s] does not exist' % self.vnf_instance_id)
-        logger.debug('vnfd_model = %s, vnf_instance_id = %s' % (nf_info[0].vnfd_model, self.vnf_instance_id))
+            logger.error(
+                'NF instance[id=%s] does not exist' %
+                self.vnf_instance_id)
+            raise NSLCMException(
+                'NF instance[id=%s] does not exist' %
+                self.vnf_instance_id)
+        logger.debug('vnfd_model = %s, vnf_instance_id = %s' %
+                     (nf_info[0].vnfd_model, self.vnf_instance_id))
         self.nf_model = json.loads(nf_info[0].vnfd_model)
         self.m_nf_inst_id = nf_info[0].mnfinstid
         self.vnfm_inst_id = nf_info[0].vnfm_inst_id
         self.scale_vnf_data = ignore_case_get(self.data, 'scaleVnfData')
         if not self.scale_vnf_data:
-            logger.error('scaleVnfData parameter does not exist or value incorrect')
-            raise NSLCMException('scaleVnfData parameter does not exist or value incorrect')
-        for vnf_data in self.scale_vnf_data:
-            scale_type = ignore_case_get(vnf_data, 'type')
-            aspect_id = ignore_case_get(vnf_data, 'aspectId')
-            number_of_steps = ignore_case_get(vnf_data, 'numberOfSteps')
-            self.nf_scale_params.append({
-                'type': scale_type,
-                'aspectId': aspect_id,
-                'numberOfSteps': number_of_steps,
-                'additionalParam': {'vnfdModel': self.nf_model}
-            })
+            logger.error(
+                'scaleVnfData parameter does not exist or value incorrect')
+            raise NSLCMException(
+                'scaleVnfData parameter does not exist or value incorrect')
+
+        scale_type = ignore_case_get(self.scale_vnf_data, 'type')
+        aspect_id = ignore_case_get(self.scale_vnf_data, 'aspectId')
+        number_of_steps = ignore_case_get(self.scale_vnf_data, 'numberOfSteps')
+        self.nf_scale_params.append({
+            'type': scale_type,
+            'aspectId': aspect_id,
+            'numberOfSteps': number_of_steps,
+            'additionalParam': {'vnfdModel': self.nf_model}
+        })
 
     def send_nf_scaling_requests(self):
         for i in range(len(self.nf_scale_params)):
-            progress_range = [10 + 80 / len(self.nf_scale_params) * i, 10 + 80 / len(self.nf_scale_params) * (i + 1)]
-            self.send_nf_scaling_request(self.nf_scale_params[i], progress_range)
+            progress_range = [10 +
+                              80 /
+                              len(self.nf_scale_params) *
+                              i, 10 +
+                              80 /
+                              len(self.nf_scale_params) *
+                              (i +
+                                  1)]
+            self.send_nf_scaling_request(
+                self.nf_scale_params[i], progress_range)
 
     def send_nf_scaling_request(self, scale_param, progress_range):
         req_param = json.JSONEncoder().encode(scale_param)
-        rsp = send_nf_scaling_request(self.vnfm_inst_id, self.m_nf_inst_id, req_param)
+        rsp = send_nf_scaling_request(
+            self.vnfm_inst_id, self.m_nf_inst_id, req_param)
         vnfm_job_id = ignore_case_get(rsp, 'jobId')
-        ret = wait_job_finish(self.vnfm_inst_id, self.job_id, vnfm_job_id, progress_range=progress_range, timeout=1200,
-                              mode='1')
+        ret = wait_job_finish(
+            self.vnfm_inst_id,
+            self.job_id,
+            vnfm_job_id,
+            progress_range=progress_range,
+            timeout=1200,
+            mode='1')
         if ret != JOB_MODEL_STATUS.FINISHED:
             logger.error('[NF scale] nf scale failed')
             raise NSLCMException("nf scale failed")
 
     def update_nf_status(self, status=VNF_STATUS.ACTIVE):
-        NfInstModel.objects.filter(nfinstid=self.vnf_instance_id).update(status=status)
+        NfInstModel.objects.filter(
+            nfinstid=self.vnf_instance_id).update(
+            status=status)
 
     def update_job(self, progress, desc=''):
         JobUtil.add_job_status(self.job_id, progress, desc)
index 01571f1..bebfb42 100644 (file)
@@ -1,16 +1,9 @@
 from django.test import TestCase
-from lcm.pub.utils.scaleaspect import get_scale_vnf_data_package
-from lcm.pub.utils.scaleaspect import get_vnf_scale_info_package
-from lcm.pub.utils.scaleaspect import get_vnf_data_package
 from lcm.pub.utils.scaleaspect import get_json_data
-from lcm.pub.utils.scaleaspect import get_nsdId
-from lcm.pub.utils.scaleaspect import deal_vnf_scale_info
 from lcm.pub.database.models import NfInstModel
 from lcm.pub.database.models import NSInstModel
-from lcm.pub.msapi import catalog
 from lcm.pub.utils.timeutil import now_time
 import os
-import mock
 
 
 class TestScaleAspect(TestCase):
@@ -106,51 +99,3 @@ class TestScaleAspect(TestCase):
     def tearDown(self):
         NSInstModel().clean()
         NfInstModel().clean()
-
-    def test_get_vnf_data_package(self):
-        vnf_data_package = get_vnf_data_package(
-            self.scaling_map_json, "1", "TIC_EDGE_IMS", "1", "IN")
-        self.assertIsNotNone(vnf_data_package)
-        self.assertEqual(2, vnf_data_package.__len__())
-
-    def test_get_vnf_scale_info_package(self):
-        scale_vnf_info_list = get_vnf_scale_info_package(
-            self.scaling_map_json, "23", "TIC_EDGE_IMS", "1")
-        self.assertIsNotNone(scale_vnf_info_list)
-        self.assertEqual(2, scale_vnf_info_list.__len__())
-
-    @mock.patch.object(catalog, 'get_scalingmap_json_package')
-    def test_get_scale_vnf_data_package(
-            self, mock_get_scalingmap_json_package):
-        mock_get_scalingmap_json_package.return_value = self.scaling_map_json
-
-        scale_vnf_data = get_scale_vnf_data_package(self.scaleNsData, "1")
-        self.assertIsNotNone(scale_vnf_data)
-        self.assertEqual(2, scale_vnf_data.__len__())
-
-    def test_deal_vnf_scale_info(self):
-        vnf_scale_info_list = [
-            {
-                "vnfd_id": "nf_zte_cscf",
-                "vnf_scaleAspectId": "mpu",
-                "numberOfSteps": "1"
-            },
-            {
-                "vnfd_id": "nf_zte_hss",
-                "vnf_scaleAspectId": "mpu",
-                "numberOfSteps": "1"
-            }
-        ]
-        result = deal_vnf_scale_info(vnf_scale_info_list)
-        self.assertEqual(result[0]["numberOfSteps"], vnf_scale_info_list[0]["numberOfSteps"])
-        self.assertEqual(result[0]["vnf_scaleAspectId"], vnf_scale_info_list[0]["vnf_scaleAspectId"])
-        self.assertEqual(result[1]["numberOfSteps"], vnf_scale_info_list[0]["numberOfSteps"])
-        self.assertEqual(result[1]["vnf_scaleAspectId"], vnf_scale_info_list[0]["vnf_scaleAspectId"])
-        self.assertEqual("231", result[0]["vnfInstanceId"])
-        self.assertEqual("232", result[1]["vnfInstanceId"])
-        self.assertNotIn("vnfd_id", result[0])
-        self.assertNotIn("vnfd_id", result[1])
-
-    def test_get_nsdId(self):
-        nsd_id = get_nsdId("1")
-        self.assertEqual("23", nsd_id)
index b0b5d38..7007774 100644 (file)
@@ -27,13 +27,11 @@ SCALE_TYPE = ("SCALE_NS", "SCALE_VNF")
 
 scale_vnf_data_mapping = {
     "vnfInstanceId": "",
-    "scaleByStepData": [
-        {
-            "type": "",
-            "aspectId": "",
-            "numberOfSteps": ""
-        }
-    ]
+    "scaleByStepData": {
+        "type": "",
+        "aspectId": "",
+        "numberOfSteps": ""
+    }
 }
 
 
@@ -80,44 +78,6 @@ def get_vnf_scale_info(filename, ns_instanceId, aspect, step):
     return None
 
 
-# Get the vnf scaling info according to the ns package id.
-def get_vnf_scale_info_package(scalingmap_json, nsd_id, aspect, step):
-    scale_options = ignorcase_get(scalingmap_json, "scale_options")
-    for i in range(scale_options.__len__()):
-        ns_scale_option = scale_options[i]
-        if (ignorcase_get(ns_scale_option, "nsd_id") == nsd_id) and (
-                ignorcase_get(ns_scale_option, "ns_scale_aspect") == aspect):
-            ns_scale_info_list = ignorcase_get(
-                ns_scale_option, "ns_scale_info")
-            for j in range(ns_scale_info_list.__len__()):
-                ns_scale_info = ns_scale_info_list[j]
-                if ns_scale_info["step"] == step:
-                    vnf_scale_info_list = ns_scale_info["vnf_scale_info"]
-
-                    return vnf_scale_info_list
-
-    return None
-
-
-# Gets the vnf instance id according to the vnfd_id and modify the list of
-# scaling vnf info accrodingly.
-def deal_vnf_scale_info(vnf_scale_info_list):
-    result = list()
-    for i in range(vnf_scale_info_list.__len__()):
-        vnf_scale_info = vnf_scale_info_list[i]
-        vnfd_id = vnf_scale_info["vnfd_id"]
-        vnf_instance_id_list = get_vnf_instance_id_list(vnfd_id)
-        copy_vnf_scale_info = copy.deepcopy(vnf_scale_info)
-        copy_vnf_scale_info.pop("vnfd_id")
-        index = 0
-        while index < vnf_instance_id_list.__len__():
-            copy_vnf_scale_info["vnfInstanceId"] = vnf_instance_id_list[index]
-            index += 1
-            result.append(copy_vnf_scale_info)
-
-    return result
-
-
 def get_vnf_instance_id_list(vnfd_id):
     kwargs = {}
     kwargs['package_id'] = vnfd_id
@@ -151,29 +111,11 @@ def check_scale_list(vnf_scale_list, ns_instanceId, aspect, step):
         return vnf_scale_list
 
 
-def set_scaleVnfData_type(vnf_scale_list, scale_type):
-    logger.debug(
-        "vnf_scale_list = %s, type = %s" %
-        (vnf_scale_list, scale_type))
-    scaleVnfDataList = []
-    if vnf_scale_list is not None:
-        for i in range(vnf_scale_list.__len__()):
-            scaleVnfData = scale_vnf_data_mapping
-            scaleVnfData["vnfInstanceId"] = get_vnfInstanceIdByName(
-                vnf_scale_list[i]["vnfInstanceId"])
-            scaleVnfData["scaleByStepData"][0]["type"] = scale_type
-            scaleVnfData["scaleByStepData"][0]["aspectId"] = vnf_scale_list[i]["vnf_scaleAspectId"]
-            scaleVnfData["scaleByStepData"][0]["numberOfSteps"] = vnf_scale_list[i]["numberOfSteps"]
-            scaleVnfDataList.append(scaleVnfData)
-    logger.debug("scaleVnfDataList = %s" % scaleVnfDataList)
-    return scaleVnfDataList
-
-
 def get_vnfInstanceIdByName(name):
     return name
 
 
-def get_vnf_data(filename, ns_instanceId, aspect, step, scale_type):
+def get_scale_vnf_data_list(filename, ns_instanceId, aspect, step, scale_type):
 
     vnf_scale_list = get_vnf_scale_info(filename, ns_instanceId, aspect, step)
     check_scale_list(vnf_scale_list, ns_instanceId, aspect, step)
@@ -185,24 +127,6 @@ def get_vnf_data(filename, ns_instanceId, aspect, step, scale_type):
     # return Response(data={'success': 'success'},status=status.HTTP_200_OK)
 
 
-# Get scaling data of vnf according to the package
-def get_vnf_data_package(
-        scalingmap_json,
-        ns_instanceId,
-        aspect,
-        step,
-        scale_type):
-    nsd_id = get_nsdId(ns_instanceId)
-    vnf_scale_list = get_vnf_scale_info_package(
-        scalingmap_json, nsd_id, aspect, step)
-    check_scale_list(vnf_scale_list, ns_instanceId, aspect, step)
-    vnf_scale_list = deal_vnf_scale_info(vnf_scale_list)
-    scaleVnfDataList = set_scaleVnfData_type(vnf_scale_list, scale_type)
-    logger.debug("scaleVnfDataList = %s" % scaleVnfDataList)
-
-    return scaleVnfDataList
-
-
 # Get the nsd id according to the ns instance id.
 def get_nsdId(ns_instanceId):
     if NSInstModel.objects.filter(id=ns_instanceId):
@@ -234,7 +158,7 @@ def get_scale_vnf_data(scaleNsData, ns_InstanceId):
     logger.debug("filename = %s" % filename)
     aspect, numberOfSteps, scale_type = get_and_check_params(
         scaleNsData, ns_InstanceId)
-    return get_vnf_data(
+    return get_scale_vnf_data_list(
         filename,
         ns_InstanceId,
         aspect,
@@ -242,16 +166,83 @@ def get_scale_vnf_data(scaleNsData, ns_InstanceId):
         scale_type)
 
 
-# Get scaling vnf data according to package by the scaling map json file.
-def get_scale_vnf_data_package(scaleNsData, ns_InstanceId):
+# Get scaling vnf data info list according to the ns instance id and request ScaleNsData.
+def get_scale_vnf_data_info_list(scaleNsData, ns_InstanceId):
+    # Gets the nsd id accordign to the ns instance id.
+    nsd_id = get_nsdId(ns_InstanceId)
 
+    # Gets the scalingmap json data from the package according to the ns instance id.
     scalingmap_json = catalog.get_scalingmap_json_package(ns_InstanceId)
-    logger.debug("scalingmap_json = %s" % scalingmap_json)
+
+    # Gets and checks the values of parameters.
     aspect, numberOfSteps, scale_type = get_and_check_params(
         scaleNsData, ns_InstanceId)
-    return get_vnf_data_package(
-        scalingmap_json,
-        ns_InstanceId,
-        aspect,
-        numberOfSteps,
-        scale_type)
+
+    # Firstly, gets the scaling vnf data info list from the scaling map json data.
+    scale_vnf_data_info_list_from_json = get_scale_vnf_data_from_json(scalingmap_json, nsd_id, aspect, numberOfSteps)
+    check_scale_list(scale_vnf_data_info_list_from_json, ns_InstanceId, aspect, numberOfSteps)
+
+    # Secondly, adds the property of vnfInstanceId to the list according to the vnfd id.
+    scale_vnf_data_info_list = set_scacle_vnf_instance_id(scale_vnf_data_info_list_from_json)
+    check_scale_list(scale_vnf_data_info_list, ns_InstanceId, aspect, numberOfSteps)
+
+    # Lastly, adds the property of type to the list acoording to the request ScaleNsData.
+    scale_vnf_data_info_list = set_scaleVnfData_type(scale_vnf_data_info_list, scale_type)
+    check_scale_list(scale_vnf_data_info_list, ns_InstanceId, aspect, numberOfSteps)
+
+    return scale_vnf_data_info_list
+
+
+# Get the vnf scaling info from the scaling_map.json according to the ns package id.
+def get_scale_vnf_data_from_json(scalingmap_json, nsd_id, aspect, step):
+    scale_options = ignorcase_get(scalingmap_json, "scale_options")
+    for i in range(scale_options.__len__()):
+        ns_scale_option = scale_options[i]
+        if (ignorcase_get(ns_scale_option, "nsd_id") == nsd_id) and (
+                ignorcase_get(ns_scale_option, "ns_scale_aspect") == aspect):
+            ns_scale_info_list = ignorcase_get(
+                ns_scale_option, "ns_scale_info")
+            for j in range(ns_scale_info_list.__len__()):
+                ns_scale_info = ns_scale_info_list[j]
+                if ns_scale_info["step"] == step:
+                    vnf_scale_info_list = ns_scale_info["vnf_scale_info"]
+
+                    return vnf_scale_info_list
+
+    return None
+
+
+# Gets the vnf instance id according to the vnfd_id and modify the list of scaling vnf info accrodingly.
+def set_scacle_vnf_instance_id(vnf_scale_info_list):
+    scale_vnf_data_info_list = []
+    for i in range(vnf_scale_info_list.__len__()):
+        vnf_scale_info = vnf_scale_info_list[i]
+        vnfd_id = vnf_scale_info["vnfd_id"]
+        vnf_instance_id_list = get_vnf_instance_id_list(vnfd_id)
+        copy_vnf_scale_info = copy.deepcopy(vnf_scale_info)
+        copy_vnf_scale_info.pop("vnfd_id")
+        index = 0
+        while index < vnf_instance_id_list.__len__():
+            copy_vnf_scale_info["vnfInstanceId"] = vnf_instance_id_list[index]
+            index += 1
+            scale_vnf_data_info_list.append(copy_vnf_scale_info)
+
+    return scale_vnf_data_info_list
+
+
+def set_scaleVnfData_type(vnf_scale_list, scale_type):
+    logger.debug(
+        "vnf_scale_list = %s, type = %s" %
+        (vnf_scale_list, scale_type))
+    scaleVnfDataList = []
+    if vnf_scale_list is not None:
+        for i in range(vnf_scale_list.__len__()):
+            scaleVnfData = scale_vnf_data_mapping
+            scaleVnfData["vnfInstanceId"] = get_vnfInstanceIdByName(
+                vnf_scale_list[i]["vnfInstanceId"])
+            scaleVnfData["scaleByStepData"]["type"] = scale_type
+            scaleVnfData["scaleByStepData"]["aspectId"] = vnf_scale_list[i]["vnf_scaleAspectId"]
+            scaleVnfData["scaleByStepData"]["numberOfSteps"] = vnf_scale_list[i]["numberOfSteps"]
+            scaleVnfDataList.append(scaleVnfData)
+    logger.debug("scaleVnfDataList = %s" % scaleVnfDataList)
+    return scaleVnfDataList