Add vfc-ztevnfmdriver grant schema 17/30617/1
authorying.yunlong <ying.yunlong@zte.com.cn>
Wed, 7 Feb 2018 06:59:50 +0000 (14:59 +0800)
committerying.yunlong <ying.yunlong@zte.com.cn>
Wed, 7 Feb 2018 06:59:50 +0000 (14:59 +0800)
Change-Id: Id5b4b2031695453dc4f33d439ca09368ee74151d
Issue-ID: VFC-736
Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
zte/vmanager/driver/interfaces/serializers.py
zte/vmanager/driver/interfaces/urls.py
zte/vmanager/driver/interfaces/views.py

index 6e9456c..d2cd2bc 100644 (file)
@@ -79,6 +79,19 @@ class GrantReqSerializer(serializers.Serializer):
         required=False)
 
 
+class GrantRespSerializer(serializers.Serializer):
+    vimid = serializers.CharField(
+        help_text="vimid",
+        max_length=255,
+        required=True,
+        allow_null=True)
+    tenant = serializers.CharField(
+        help_text="tenant",
+        max_length=255,
+        required=True,
+        allow_null=True)
+
+
 class VMIDlistSerializer(serializers.Serializer):
     VMID = serializers.CharField(
         help_text="VMID",
index 0167cfa..d8fb6f6 100644 (file)
@@ -24,7 +24,7 @@ urlpatterns = [
         views.query_vnf, name='query_vnf'),
     url(r'^api/ztevnfmdriver/v1/(?P<vnfmid>[0-9a-zA-Z\-\_]+)/jobs/(?P<jobid>[0-9a-zA-Z\-\_]+)$',
         views.operation_status, name='operation_status'),
-    url(r'^api/ztevnfmdriver/v1/resource/grant$', views.grantvnf, name='grantvnf'),
+    url(r'^api/ztevnfmdriver/v1/resource/grant$', views.GrantVnf.as_view(), name='grantvnf'),
     url(r'^api/ztevnfmdriver/v1/vnfs/lifecyclechangesnotification$', views.Notify.as_view(), name='notify'),
     url(r'^api/ztevnfmdriver/v1/(?P<vnfmid>[0-9a-zA-Z\-\_]+)/vnfs/(?P<vnfInstanceId>[0-9a-zA-Z\-\_]+)/scale$',
         views.Scale.as_view(), name='scale'),
index 0866301..0eb2449 100644 (file)
@@ -25,7 +25,7 @@ from rest_framework.response import Response
 from rest_framework.views import APIView
 
 from driver.interfaces.serializers import HealReqSerializer, InstScaleHealRespSerializer, ScaleReqSerializer, \
-    NotifyReqSerializer
+    NotifyReqSerializer, GrantRespSerializer, GrantReqSerializer
 from driver.pub.config.config import VNF_FTP
 from driver.pub.utils import restcall
 from driver.pub.utils.restcall import req_by_msb
@@ -257,58 +257,53 @@ def operation_status(request, *args, **kwargs):
     return Response(data=resp_data, status=ret[2])
 
 
-@api_view(http_method_names=['PUT'])
-def grantvnf(request, *args, **kwargs):
-    logger.info("=====grantvnf=====")
-    try:
-        logger.info("req_data = %s", request.data)
-        grant_vnf_param_map = {
-            "VNFMID": "",
-            "NFVOID": "",
-            "VIMID": "",
-            "ExVIMIDList": "",
-            "ExVIMID": "",
-            "Tenant": "",
-            "VNFInstanceID": "vnfInstanceId",
-            "OperationRight": "",
-            "VMList": "",
-            "VMFlavor": "",
-            "VMNumber": ""
-        }
-        data = mapping_conv(grant_vnf_param_map, request.data)
-        data["vnfDescriptorId"] = ""
-        if ignorcase_get(request.data, "operationright") == 0:
-            data["lifecycleOperation"] = "Instantiate"
-            data["addresource"] = []
-            for vm in ignorcase_get(request.data, "vmlist"):
-                for i in range(int(ignorcase_get(vm, "vmnumber"))):
-                    data["addresource"].append(
-                        {
-                            "type": "vdu",
-                            "resourceDefinitionId": i,
-                            "vdu": ignorcase_get(vm, "vmflavor"),
-                            "vimid": ignorcase_get(vm, "vimid"),
-                            "tenant": ignorcase_get(vm, "tenant")})
-
-        data["additionalparam"] = {}
-        data["additionalparam"]["vnfmid"] = ignorcase_get(request.data, "vnfmid")
-        data["additionalparam"]["vimid"] = ignorcase_get(request.data, "vimid")
-        data["additionalparam"]["tenant"] = ignorcase_get(request.data, "tenant")
-
-        ret = req_by_msb('api/nslcm/v1/ns/grantvnf', "POST", content=json.JSONEncoder().encode(data))
-        logger.info("ret = %s", ret)
-        if ret[0] != 0:
-            return Response(data={'error': ret[1]}, status=ret[2])
-        resp = json.JSONDecoder().decode(ret[1])
-        resp_data = {
-            'vimid': ignorcase_get(resp['vim'], 'vimid'),
-            'tenant': ignorcase_get(ignorcase_get(resp['vim'], 'accessinfo'), 'tenant')
+class GrantVnf(APIView):
+    @swagger_auto_schema(
+        request_body=GrantReqSerializer(),
+        responses={
+            status.HTTP_201_CREATED: GrantRespSerializer(),
+            status.HTTP_500_INTERNAL_SERVER_ERROR: 'Internal error'
         }
-        logger.info("[%s]resp_data=%s", fun_name(), resp_data)
-    except Exception as e:
-        logger.error("Error occurred in Grant VNF.")
-        raise e
-    return Response(data=resp_data, status=ret[2])
+    )
+    def put(self, request):
+        logger.info("=====GrantVnf=====")
+        try:
+            logger.info("req_data = %s", request.data)
+            data = {}
+            data["vnfInstanceId"] = ignorcase_get(request.data, "vnfistanceid")
+            data["vnfDescriptorId"] = ""
+            if ignorcase_get(request.data, "operationright") == 0:
+                data["lifecycleOperation"] = "Instantiate"
+                data["addresource"] = []
+                for vm in ignorcase_get(request.data, "vmlist"):
+                    for i in range(int(ignorcase_get(vm, "vmnumber"))):
+                        data["addresource"].append(
+                            {
+                                "type": "vdu",
+                                "resourceDefinitionId": i,
+                                "vdu": ignorcase_get(vm, "vmflavor"),
+                                "vimid": ignorcase_get(vm, "vimid"),
+                                "tenant": ignorcase_get(vm, "tenant")})
+
+            data["additionalparam"] = {}
+            data["additionalparam"]["vnfmid"] = ignorcase_get(request.data, "vnfmid")
+            data["additionalparam"]["vimid"] = ignorcase_get(request.data, "vimid")
+            data["additionalparam"]["tenant"] = ignorcase_get(request.data, "tenant")
+
+            ret = req_by_msb('api/nslcm/v1/ns/grantvnf', "POST", content=json.JSONEncoder().encode(data))
+            logger.info("ret = %s", ret)
+            if ret[0] != 0:
+                return Response(data={'error': ret[1]}, status=ret[2])
+            resp = json.JSONDecoder().decode(ret[1])
+            resp_data = {
+                'vimid': ignorcase_get(resp['vim'], 'vimid'),
+                'tenant': ignorcase_get(ignorcase_get(resp['vim'], 'accessinfo'), 'tenant')
+            }
+            logger.info("[%s]resp_data=%s", fun_name(), resp_data)
+            return Response(data=resp_data, status=status.HTTP_201_CREATED)
+        except Exception as e:
+            logger.error("Error occurred in Grant VNF.")
+            raise e
 
 
 class Notify(APIView):