summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorying.yunlong <ying.yunlong@zte.com.cn>2017-09-22 13:00:50 +0800
committerying.yunlong <ying.yunlong@zte.com.cn>2017-09-22 13:02:02 +0800
commitb0d1741deafc759453a65a7a29d3dc089378441f (patch)
treefd650e33642c507cdd8883cf4829607e021c0bbf
parent4a0b5d937e510c38582e30bd0b2a7c1202ae1e17 (diff)
Refactor vfc-gvnfmadapter code logic
Change-Id: Ib880e499f533e76b941f346bcad1c166fde8a429 Issue-ID: VFC-418 Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
-rw-r--r--gvnfmadapter/driver/interfaces/views.py365
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