Add vfc-ztevnfmdriver instantiate swagger 89/31389/2
authorying.yunlong <ying.yunlong@zte.com.cn>
Mon, 12 Feb 2018 07:47:15 +0000 (15:47 +0800)
committeryunlong ying <ying.yunlong@zte.com.cn>
Mon, 12 Feb 2018 08:07:41 +0000 (08:07 +0000)
Change-Id: I78f4e3eb5b79bf3c8c18aff13f161a08c646e439
Issue-ID: VFC-736
Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
zte/vmanager/driver/interfaces/serializers.py
zte/vmanager/driver/interfaces/views.py

index 09dbc08..a19613c 100644 (file)
@@ -79,9 +79,8 @@ class InstantiateVnfRequestSerializer(serializers.Serializer):
         required=True,
         max_length=255,
         allow_null=True)
-    additionalParam = serializers.DictField(
+    additionalParam = additionalParamSerializer(
         help_text="additionalParam",
-        child=additionalParamSerializer(help_text='additionalParam'),
         required=True,
         allow_null=True)
 
index 9308967..1a1976e 100644 (file)
@@ -97,27 +97,36 @@ class InstamtiateVnf(APIView):
     def post(self, request, vnfmid):
         try:
             logger.debug("[%s] request.data=%s", fun_name(), request.data)
+            instantiateVnfRequestSerializer = InstantiateVnfRequestSerializer(data=request.data)
+            if not instantiateVnfRequestSerializer.is_valid():
+                raise Exception(instantiateVnfRequestSerializer.errors)
+
             ret = get_vnfminfo_from_nslcm(vnfmid)
             if ret[0] != 0:
-                return Response(data={'error': ret[1]}, status=ret[2])
+                raise Exception(ret[1])
+
             vnfm_info = json.JSONDecoder().decode(ret[1])
             logger.debug("[%s] vnfm_info=%s", fun_name(), vnfm_info)
-            vnf_package_id = ignorcase_get(request.data, "vnfPackageId")
+            vnf_package_id = ignorcase_get(instantiateVnfRequestSerializer.data, "vnfPackageId")
             ret = vnfd_get(vnf_package_id)
             if ret[0] != 0:
-                return Response(data={'error': ret[1]}, status=ret[2])
+                raise Exception(ret[1])
+
             vnfd_info = json.JSONDecoder().decode(ret[1])
             logger.debug("[%s] vnfd_info=%s", fun_name(), vnfd_info)
             csar_id = ignorcase_get(vnfd_info, "csarId")
             ret = vnfpackage_get(csar_id)
             if ret[0] != 0:
-                return Response(data={'error': ret[1]}, status=ret[2])
+                raise Exception(ret[1])
+
             vnf_package_info = json.JSONDecoder().decode(ret[1])
             packageInfo = ignorcase_get(vnf_package_info, "packageInfo")
             logger.debug("[%s] packageInfo=%s", fun_name(), packageInfo)
-            data = {}
-            data["NFVOID"] = 1
-            data["VNFMID"] = vnfmid
+            data = {
+                "NFVOID": 1,
+                "VNFMID": vnfmid,
+                "extension": {},
+            }
             vnfdModel = json.loads(ignorcase_get(packageInfo, "vnfdModel"))
             metadata = ignorcase_get(vnfdModel, "metadata")
             vnfd_name = ignorcase_get(metadata, "name")
@@ -134,14 +143,13 @@ class InstamtiateVnf(APIView):
 
             data["VNFURL"] = data["VNFD"]
 
-            data["extension"] = {}
-            for name, value in ignorcase_get(ignorcase_get(request.data, "additionalParam"), "inputs").items():
+            for name, value in ignorcase_get(ignorcase_get(instantiateVnfRequestSerializer.data, "additionalParam"), "inputs").items():
                 inputs.append({"name": name, "value": value})
 
             data["extension"]["inputs"] = json.dumps(inputs)
-            additionalParam = ignorcase_get(request.data, "additionalParam")
+            additionalParam = ignorcase_get(instantiateVnfRequestSerializer.data, "additionalParam")
             data["extension"]["extVirtualLinks"] = ignorcase_get(additionalParam, "extVirtualLinks")
-            data["extension"]["vnfinstancename"] = ignorcase_get(request.data, "vnfInstanceName")
+            data["extension"]["vnfinstancename"] = ignorcase_get(instantiateVnfRequestSerializer.data, "vnfInstanceName")
             data["extension"]["vnfid"] = data["VNFD"]
             data["extension"]["multivim"] = 0
             logger.debug("[%s] call_req data=%s", fun_name(), data)
@@ -157,17 +165,23 @@ class InstamtiateVnf(APIView):
 
             logger.debug("[%s] call_req ret=%s", fun_name(), ret)
             if ret[0] != 0:
-                return Response(data={'error': ret[1]}, status=ret[2])
+                raise Exception(ret[1])
+
             resp = json.JSONDecoder().decode(ret[1])
             resp_data = {
                 "vnfInstanceId": ignorcase_get(resp, "VNFInstanceID"),
                 "jobId": ignorcase_get(resp, "JobId")
             }
             logger.debug("[%s]resp_data=%s", fun_name(), resp_data)
+            instRespSerializer = InstScaleHealRespSerializer(data=resp_data)
+            if not instRespSerializer.is_valid():
+                raise Exception(instRespSerializer.errors)
+
+            return Response(data=instRespSerializer.data, status=status.HTTP_200_OK)
         except Exception as e:
-            logger.error("Error occurred when instantiating VNF")
-            raise e
-        return Response(data=resp_data, status=ret[2])
+            logger.error("Error occurred when instantiating VNF,error:%s", e.message)
+            logger.error(traceback.format_exc())
+            return Response(data={'error': 'InstantiateVnf expection'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
 
 
 class TerminateVnf(APIView):