diff options
author | 2017-09-22 13:00:50 +0800 | |
---|---|---|
committer | 2017-09-22 13:02:02 +0800 | |
commit | b0d1741deafc759453a65a7a29d3dc089378441f (patch) | |
tree | fd650e33642c507cdd8883cf4829607e021c0bbf /gvnfmadapter | |
parent | 4a0b5d937e510c38582e30bd0b2a7c1202ae1e17 (diff) |
Refactor vfc-gvnfmadapter code logic
Change-Id: Ib880e499f533e76b941f346bcad1c166fde8a429
Issue-ID: VFC-418
Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
Diffstat (limited to 'gvnfmadapter')
-rw-r--r-- | gvnfmadapter/driver/interfaces/views.py | 365 |
1 files changed, 174 insertions, 191 deletions
diff --git a/gvnfmadapter/driver/interfaces/views.py b/gvnfmadapter/driver/interfaces/views.py index a5c1b26..b7da997 100644 --- a/gvnfmadapter/driver/interfaces/views.py +++ b/gvnfmadapter/driver/interfaces/views.py @@ -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 |