Refactor vfc-gvnfmadapter code logic 53/14453/1
authorying.yunlong <ying.yunlong@zte.com.cn>
Fri, 22 Sep 2017 05:00:50 +0000 (13:00 +0800)
committerying.yunlong <ying.yunlong@zte.com.cn>
Fri, 22 Sep 2017 05:02:02 +0000 (13:02 +0800)
Change-Id: Ib880e499f533e76b941f346bcad1c166fde8a429
Issue-ID: VFC-418
Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
gvnfmadapter/driver/interfaces/views.py

index a5c1b26..b7da997 100644 (file)
@@ -27,194 +27,13 @@ from driver.pub.utils.restcall import req_by_msb
 logger = logging.getLogger(__name__)
 
 
-def mapping_conv(keyword_map, rest_return):
-    resp_data = {}
-    for param in keyword_map:
-        if keyword_map[param]:
-            if isinstance(keyword_map[param], dict):
-                resp_data[param] = mapping_conv(keyword_map[param], ignorcase_get(rest_return, param))
-            else:
-                resp_data[param] = ignorcase_get(rest_return, param)
-    return resp_data
-
-def fun_name():
-    return "=================%s==================" % inspect.stack()[1][3]
-
-
-def ignorcase_get(args, key):
-    if not key:
-        return ""
-    if not args:
-        return ""
-    if key in args:
-        return args[key]
-    for old_key in args:
-        if old_key.upper() == key.upper():
-            return args[old_key]
-    return ""
-
-
-def set_createvnf_params(data):
-    input_data = {}
-    input_data["vnfdId"] = ignorcase_get(data,"vnfDescriptorId")
-    input_data["vnfInstanceName"] = ignorcase_get(data, "vnfInstanceName")
-    input_data["vnfInstanceDescription"] = ignorcase_get(data, "vnfInstanceDescription")
-    return input_data
-
-
-def set_instantvnf_params(data):
-    input_data = {}
-    input_data["flavourId"] = ignorcase_get(data, "flavourId")
-    input_data["extVirtualLinks"] = ignorcase_get(data, "extVirtualLink")
-    input_data["additionalParams"] = ignorcase_get(data,"additionalParams")
-    input_data["flavourId"] = ignorcase_get(data,"flavourId")
-    return input_data
-
-
-def set_terminatevnf_params(data):
-    input_data = {}
-    input_data["terminationType"] = ignorcase_get(data,"terminationType")
-    input_data["gracefulTerminationTimeout"] = ignorcase_get(data,"gracefulTerminationTimeout")
-    return input_data
-
-
-def get_vnfminfo_from_nslcm(vnfm_id):
-    ret = req_by_msb("api/aai-esr-server/v1/vnfms/%s" % vnfm_id, "GET")
-    if ret[0] != 0:
-        return 255, Response(data={'error': ret[1]}, status=ret[2])
-    vnfm_info = json.JSONDecoder().decode(ret[1])
-    logger.debug("[%s] vnfm_info=%s", fun_name(), vnfm_info)
-    return 0, vnfm_info
-
-
-def call_vnfm(resource, method, vnfm_info, data=""):
-    ret = restcall.call_req(
-        base_url=ignorcase_get(vnfm_info, "url"),
-        user=ignorcase_get(vnfm_info, "userName"),
-        passwd=ignorcase_get(vnfm_info, "password"),
-        auth_type=restcall.rest_no_auth,
-        resource=resource,
-        method=method,
-        content=json.JSONEncoder().encode(data))
-    return ret
-
-
-def wait4job(vnfm_id,jobId,gracefulTerminationTimeout):
-    begin_time = time.time()
-    try:
-        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
-        if ret != 0:
-            return 255, Response(data={"error":"Fail to get VNFM!"}, status=status.HTTP_412_PRECONDITION_FAILED)
-
-        responseId = None
-        while ret == 0:
-            cur_time = time.time()
-            if gracefulTerminationTimeout and (cur_time - begin_time > gracefulTerminationTimeout):
-                return 255, Response(data={"error":"Fail to terminate VNF!"}, status=status.HTTP_408_REQUEST_TIMEOUT)
-            ret = call_vnfm("api/vnflcm/v1/vnf_lc_ops/%s?responseId=%s" % (jobId, responseId), "GET", vnfm_info)
-            if ret[0] != 0:
-                return 255, Response(data={"error":"Fail to get job status!"}, status=status.HTTP_412_PRECONDITION_FAILED)
-            if json.JSONDecoder().decode(ret[2]) != 200:
-                return 255, Response(data={"error":"Fail to get job status!"}, status=status.HTTP_412_PRECONDITION_FAILED)
-            job_info = json.JSONDecoder().decode(ret[1])
-            responseId = ignorcase_get(ignorcase_get(job_info, "VnfLcOpResponseDescriptor"), "responseId")
-            progress = ignorcase_get(ignorcase_get(job_info, "VnfLcOpResponseDescriptor"), "progress")
-            if progress == "100":
-                return 0, Response(data={"success":"success"}, status=status.HTTP_204_NO_CONTENT)
-    except Exception as e:
-        logger.error("Error occurred when do_createvnf")
-        return 255, Response(data={"error":"Exception caught! Fail to get job status!"}, status=status.HTTP_412_PRECONDITION_FAILED)
-
-
-def do_createvnf(request, data, vnfm_id):
-    logger.debug("[%s] request.data=%s", fun_name(), request.data)
-    try:
-        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
-        if ret != 0:
-            return ret, vnfm_info
-        ret = call_vnfm("api/vnflcm/v1/vnf_instances", "POST", vnfm_info, data)
-        logger.debug("[%s] call_req ret=%s", fun_name(), ret)
-        if ret[0] != 0:
-            return 255, Response(data={'error': ret[1]}, status=ret[2])
-        resp = json.JSONDecoder().decode(ret[1])
-    except Exception as e:
-        logger.error("Error occurred when do_createvnf")
-        raise e
-    return 0, resp
-
-
-def do_instvnf(vnfInstanceId, request, data, vnfm_id):
-    logger.debug("[%s] request.data=%s", fun_name(), request.data)
-    try:
-        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
-        if ret != 0:
-            return ret, vnfm_info
-        ret = call_vnfm("api/vnflcm/v1/vnf_instances/%s/instantiate" % vnfInstanceId, "POST", vnfm_info, data)
-        logger.debug("[%s] call_req ret=%s", fun_name(), ret)
-        if ret[0] != 0:
-            return 255, Response(data={'error': ret[1]}, status=ret[2])
-        resp = json.JSONDecoder().decode(ret[1])
-    except Exception as e:
-        logger.error("Error occurred when do_instvnf")
-        raise e
-    return 0, resp
-
-
-def do_terminatevnf(request, data, vnfm_id, vnfInstanceId):
-    logger.debug("[%s] request.data=%s", fun_name(), request.data)
-    try:
-        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
-        if ret != 0:
-            return ret,vnfm_info
-        ret = call_vnfm("api/vnflcm/v1/vnf_instances/%s/terminate"% vnfInstanceId,"POST", vnfm_info, data)
-        if ret[0] != 0:
-            return 255, Response(data={'error': ret[1]}, status=ret[2])
-        resp_data = json.JSONDecoder().decode(ret[1])
-        logger.debug("[%s]resp_data=%s", fun_name(), resp_data)
-    except Exception as e:
-        logger.error("Error occurred when do_terminatevnf")
-        raise e
-    return 0, resp_data
-
-
-def do_deletevnf(request, vnfm_id, vnfInstanceId):
-    logger.debug("[%s] request.data=%s", fun_name(), request.data)
-    try:
-        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
-        if ret != 0:
-            return ret, vnfm_info
-        ret = call_vnfm("api/vnflcm/v1/vnf_instances/%s" % vnfInstanceId, "DELETE", vnfm_info)
-        if ret[0] != 0:
-            return 255, Response(data={'error': ret[1]}, status=ret[2])
-        resp_data = json.JSONDecoder().decode(ret[1])
-        logger.debug("[%s]resp_data=%s", fun_name(), resp_data)
-    except Exception as e:
-        logger.error("Error occurred when do_deletevnf")
-        raise e
-    return 0, resp_data
-
-
-def do_queryvnf(request, vnfm_id, vnfInstanceId):
-    logger.debug("[%s] request.data=%s", fun_name(), request.data)
-    try:
-        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
-        if ret != 0:
-            return ret, vnfm_info
-        ret = call_vnfm("api/vnflcm/v1/vnf_instances/%s" % vnfInstanceId, "GET", vnfm_info)
-        if ret[0] != 0:
-            return 255, Response(data={'error': ret[1]}, status=ret[2])
-        resp_data = json.JSONDecoder().decode(ret[1])
-        logger.debug("[%s]resp_data=%s", fun_name(), resp_data)
-    except Exception as e:
-        logger.error("Error occurred when do_query vnf")
-        raise e
-    return 0, resp_data
-
-
 @api_view(http_method_names=['POST'])
 def instantiate_vnf(request, *args, **kwargs):
     try:
-        input_data = set_createvnf_params(request.data)
+        input_data = {}
+        input_data["vnfdId"] = ignorcase_get(request.data, "vnfDescriptorId")
+        input_data["vnfInstanceName"] = ignorcase_get(request.data, "vnfInstanceName")
+        input_data["vnfInstanceDescription"] = ignorcase_get(request.data, "vnfInstanceDescription")
         vnfm_id = ignorcase_get(kwargs, "vnfmid")
         ret, resp = do_createvnf(request, input_data, vnfm_id)
         if ret != 0:
@@ -222,7 +41,11 @@ def instantiate_vnf(request, *args, **kwargs):
         logger.info("[%s]resp_data=%s", fun_name(), resp)
         vnfInstanceId = resp["vnfInstanceId"]
         logger.info("[%s]vnfInstanceId=%s", fun_name(), vnfInstanceId)
-        input_data = set_instantvnf_params(request.data)
+        input_data = {}
+        input_data["flavourId"] = ignorcase_get(request.data, "flavourId")
+        input_data["extVirtualLinks"] = ignorcase_get(request.data, "extVirtualLink")
+        input_data["additionalParams"] = ignorcase_get(request.data, "additionalParams")
+        input_data["flavourId"] = ignorcase_get(request.data, "flavourId")
         ret, resp = do_instvnf(vnfInstanceId, request, input_data, vnfm_id)
         if ret != 0:
             return resp
@@ -240,7 +63,9 @@ def terminate_vnf(request, *args, **kwargs):
     vnfm_id = ignorcase_get(kwargs, "vnfmid")
     vnfInstanceId = ignorcase_get(kwargs, "vnfInstanceId")
     try:
-        input_data = set_terminatevnf_params(request.data)
+        input_data = {}
+        input_data["terminationType"] = ignorcase_get(request.data, "terminationType")
+        input_data["gracefulTerminationTimeout"] = ignorcase_get(request.data, "gracefulTerminationTimeout")
         ret, resp = do_terminatevnf(request, input_data, vnfm_id, vnfInstanceId)
         if ret != 0:
             return resp
@@ -282,7 +107,6 @@ def query_vnf(request, *args, **kwargs):
         resp_data = {
             "vnfInfo":resp_response_data
         }
-        #Handle vnfSoftwareVersion and vnfStatus specially
         resp_data["vnfInfo"]["version"] = ignorcase_get(ignorcase_get(resp, "ResponseInfo"), "vnfSoftwareVersion")
         if ignorcase_get(ignorcase_get(resp, "ResponseInfo"), "instantiationState"):
             if ignorcase_get(ignorcase_get(resp, "ResponseInfo"), "instantiationState") == "INSTANTIATED":
@@ -353,9 +177,8 @@ def grantvnf(request, *args, **kwargs):
 def notify(request, *args, **kwargs):
     try:
         logger.info("[%s]req_data = %s", fun_name(), request.data)
-        ret = req_by_msb("api/nslcm/v1/vnfs/%s/Notify" % ignorcase_get(request.data, 'vnfinstanceid'),
-                         "POST",
-                         json.JSONEncoder().encode(request.data))
+        vnfinstanceid = ignorcase_get(request.data, 'vnfinstanceid')
+        ret = req_by_msb("api/nslcm/v1/vnfs/%s/Notify" % vnfinstanceid, "POST", json.JSONEncoder().encode(request.data))
         logger.info("[%s]data = %s", fun_name(), ret)
         if ret[0] != 0:
             return Response(data={'error': ret[1]}, status=ret[2])
@@ -373,3 +196,163 @@ def get_vnfpkgs(request, *args, **kwargs):
         return Response(data={'error': ret[1]}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
     resp = json.JSONDecoder().decode(ret[1])
     return Response(data=resp, status=status.HTTP_200_OK)
+
+
+def call_vnfm(resource, method, vnfm_info, data=""):
+    ret = restcall.call_req(
+        base_url=ignorcase_get(vnfm_info, "url"),
+        user=ignorcase_get(vnfm_info, "userName"),
+        passwd=ignorcase_get(vnfm_info, "password"),
+        auth_type=restcall.rest_no_auth,
+        resource=resource,
+        method=method,
+        content=json.JSONEncoder().encode(data))
+    return ret
+
+
+def mapping_conv(keyword_map, rest_return):
+    resp_data = {}
+    for param in keyword_map:
+        if keyword_map[param]:
+            if isinstance(keyword_map[param], dict):
+                resp_data[param] = mapping_conv(keyword_map[param], ignorcase_get(rest_return, param))
+            else:
+                resp_data[param] = ignorcase_get(rest_return, param)
+    return resp_data
+
+def fun_name():
+    return "=================%s==================" % inspect.stack()[1][3]
+
+
+def ignorcase_get(args, key):
+    if not key:
+        return ""
+    if not args:
+        return ""
+    if key in args:
+        return args[key]
+    for old_key in args:
+        if old_key.upper() == key.upper():
+            return args[old_key]
+    return ""
+
+
+def get_vnfminfo_from_nslcm(vnfm_id):
+    ret = req_by_msb("api/aai-esr-server/v1/vnfms/%s" % vnfm_id, "GET")
+    if ret[0] != 0:
+        return 255, Response(data={'error': ret[1]}, status=ret[2])
+    vnfm_info = json.JSONDecoder().decode(ret[1])
+    logger.debug("[%s] vnfm_info=%s", fun_name(), vnfm_info)
+    return 0, vnfm_info
+
+
+def wait4job(vnfm_id,jobId,gracefulTerminationTimeout):
+    begin_time = time.time()
+    try:
+        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
+        if ret != 0:
+            return 255, Response(data={"error":"Fail to get VNFM!"}, status=status.HTTP_412_PRECONDITION_FAILED)
+
+        responseId = None
+        while ret == 0:
+            cur_time = time.time()
+            if gracefulTerminationTimeout and (cur_time - begin_time > gracefulTerminationTimeout):
+                return 255, Response(data={"error":"Fail to terminate VNF!"}, status=status.HTTP_408_REQUEST_TIMEOUT)
+            ret = call_vnfm("api/vnflcm/v1/vnf_lc_ops/%s?responseId=%s" % (jobId, responseId), "GET", vnfm_info)
+            if ret[0] != 0:
+                return 255, Response(data={"error":"Fail to get job status!"}, status=status.HTTP_412_PRECONDITION_FAILED)
+            if json.JSONDecoder().decode(ret[2]) != 200:
+                return 255, Response(data={"error":"Fail to get job status!"}, status=status.HTTP_412_PRECONDITION_FAILED)
+            job_info = json.JSONDecoder().decode(ret[1])
+            responseId = ignorcase_get(ignorcase_get(job_info, "VnfLcOpResponseDescriptor"), "responseId")
+            progress = ignorcase_get(ignorcase_get(job_info, "VnfLcOpResponseDescriptor"), "progress")
+            if progress == "100":
+                return 0, Response(data={"success":"success"}, status=status.HTTP_204_NO_CONTENT)
+    except Exception as e:
+        logger.error("Error occurred when do_createvnf")
+        return 255, Response(data={"error":"Exception caught! Fail to get job status!"}, status=status.HTTP_412_PRECONDITION_FAILED)
+
+
+def do_createvnf(request, data, vnfm_id):
+    logger.debug("[%s] request.data=%s", fun_name(), request.data)
+    try:
+        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
+        if ret != 0:
+            return ret, vnfm_info
+        ret = call_vnfm("api/vnflcm/v1/vnf_instances", "POST", vnfm_info, data)
+        logger.debug("[%s] call_req ret=%s", fun_name(), ret)
+        if ret[0] != 0:
+            return 255, Response(data={'error': ret[1]}, status=ret[2])
+        resp = json.JSONDecoder().decode(ret[1])
+    except Exception as e:
+        logger.error("Error occurred when do_createvnf")
+        raise e
+    return 0, resp
+
+
+def do_instvnf(vnfInstanceId, request, data, vnfm_id):
+    logger.debug("[%s] request.data=%s", fun_name(), request.data)
+    try:
+        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
+        if ret != 0:
+            return ret, vnfm_info
+        ret = call_vnfm("api/vnflcm/v1/vnf_instances/%s/instantiate" % vnfInstanceId, "POST", vnfm_info, data)
+        logger.debug("[%s] call_req ret=%s", fun_name(), ret)
+        if ret[0] != 0:
+            return 255, Response(data={'error': ret[1]}, status=ret[2])
+        resp = json.JSONDecoder().decode(ret[1])
+    except Exception as e:
+        logger.error("Error occurred when do_instvnf")
+        raise e
+    return 0, resp
+
+
+def do_terminatevnf(request, data, vnfm_id, vnfInstanceId):
+    logger.debug("[%s] request.data=%s", fun_name(), request.data)
+    try:
+        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
+        if ret != 0:
+            return ret,vnfm_info
+        ret = call_vnfm("api/vnflcm/v1/vnf_instances/%s/terminate"% vnfInstanceId,"POST", vnfm_info, data)
+        if ret[0] != 0:
+            return 255, Response(data={'error': ret[1]}, status=ret[2])
+        resp_data = json.JSONDecoder().decode(ret[1])
+        logger.debug("[%s]resp_data=%s", fun_name(), resp_data)
+    except Exception as e:
+        logger.error("Error occurred when do_terminatevnf")
+        raise e
+    return 0, resp_data
+
+
+def do_deletevnf(request, vnfm_id, vnfInstanceId):
+    logger.debug("[%s] request.data=%s", fun_name(), request.data)
+    try:
+        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
+        if ret != 0:
+            return ret, vnfm_info
+        ret = call_vnfm("api/vnflcm/v1/vnf_instances/%s" % vnfInstanceId, "DELETE", vnfm_info)
+        if ret[0] != 0:
+            return 255, Response(data={'error': ret[1]}, status=ret[2])
+        resp_data = json.JSONDecoder().decode(ret[1])
+        logger.debug("[%s]resp_data=%s", fun_name(), resp_data)
+    except Exception as e:
+        logger.error("Error occurred when do_deletevnf")
+        raise e
+    return 0, resp_data
+
+
+def do_queryvnf(request, vnfm_id, vnfInstanceId):
+    logger.debug("[%s] request.data=%s", fun_name(), request.data)
+    try:
+        ret, vnfm_info = get_vnfminfo_from_nslcm(vnfm_id)
+        if ret != 0:
+            return ret, vnfm_info
+        ret = call_vnfm("api/vnflcm/v1/vnf_instances/%s" % vnfInstanceId, "GET", vnfm_info)
+        if ret[0] != 0:
+            return 255, Response(data={'error': ret[1]}, status=ret[2])
+        resp_data = json.JSONDecoder().decode(ret[1])
+        logger.debug("[%s]resp_data=%s", fun_name(), resp_data)
+    except Exception as e:
+        logger.error("Error occurred when do_query vnf")
+        raise e
+    return 0, resp_data