def query_vnf(request, *args, **kwargs): try: logger.debug("[%s] request.data=%s", fun_name(), request.data) vnfm_id = ignorcase_get(kwargs, "vnfmid") ret = vnfm_get(vnfm_id) if ret[0] != 0: return 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) 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=vnf_detail_url % (ignorcase_get(kwargs, "vnfInstanceID")), method='get', content=json.JSONEncoder().encode(data)) if ret[0] != 0: return Response(data={'error': ret[1]}, status=ret[2]) resp = json.JSONDecoder().decode(ret[1]) vnf_status = ignorcase_get(resp, "vnfinstancestatus") resp_data = {"vnfInfo": {"vnfStatus": vnf_status}} logger.debug("[%s]resp_data=%s", fun_name(), resp_data) except Exception as e: logger.error("Error occurred when querying VNF information.") raise e return Response(data=resp_data, status=ret[2])
def operation_status(request, *args, **kwargs): data = {} try: logger.debug("[%s] request.data=%s", fun_name(), request.data) vnfm_id = ignorcase_get(kwargs, "vnfmid") ret = vnfm_get(vnfm_id) if ret[0] != 0: return 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) 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=operation_status_url.format( jobId=ignorcase_get(kwargs, 'jobid'), nfvoId=1, vnfmId=ignorcase_get(kwargs, 'vnfmid'), responseId=ignorcase_get( request.GET, 'responseId')), method='get', content=json.JSONEncoder().encode(data)) if ret[0] != 0: return Response(data={'error': ret[1]}, status=ret[2]) resp_data = json.JSONDecoder().decode(ret[1]) logger.info("[%s]resp_data=%s", fun_name(), resp_data) except Exception as e: logger.error( "Error occurred when getting operation status information.") raise e return Response(data=resp_data, status=ret[2])
def put(self, request, vnfmid): logger.debug("====NfvoInfo put====%s", vnfmid) req_data = { "nfvoid": request.data.get("nfvoid", "1"), "vnfmid": vnfmid, "nfvourl": request.data.get("nfvourl", "http://127.0.0.1:80") } ret = get_vnfminfo_from_nslcm(vnfmid) if ret[0] != 0: return Response(data={'error': ret[1]}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) vnfm_info = json.JSONDecoder().decode(ret[1]) logger.debug("[nfvo_info_put] vnfm_info=%s", vnfm_info) 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="v1/nfvo/info", method='put', content=json.dumps(req_data)) if ret[0] != 0: return Response(data={'error': ret[1]}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) logger.debug("update nfvo info successfully.") return Response(data={}, status=status.HTTP_200_OK)
def terminate_vnf(request, *args, **kwargs): try: logger.debug("[%s] request.data=%s", fun_name(), request.data) vnfm_id = ignorcase_get(kwargs, "vnfmid") ret = vnfm_get(vnfm_id) if ret[0] != 0: return 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) data = {} logger.debug("[%s]req_data=%s", fun_name(), 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=vnf_delete_url % (ignorcase_get(kwargs, "vnfInstanceID")), method='delete', content=json.JSONEncoder().encode(data)) if ret[0] != 0: return Response(data={'error': ret[1]}, status=ret[2]) resp = json.JSONDecoder().decode(ret[1]) resp_data = mapping_conv(vnf_delete_resp_mapping, resp) logger.debug("[%s]resp_data=%s", fun_name(), resp_data) except Exception as e: logger.error("Error occurred when terminating VNF") raise e return Response(data=resp_data, status=ret[2])
def get(self, request, vnfmid, vnfInstanceId): try: funname = "query_vnf_get" logger.debug("[%s] request.data=%s", funname, request.data) ret = get_vnfminfo_from_nslcm(vnfmid) if ret[0] != 0: raise Exception(ret[1]) vnfm_info = json.JSONDecoder().decode(ret[1]) logger.debug("[%s] vnfm_info=%s", funname, vnfm_info) 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="v1/vnfs/%s" % vnfInstanceId, method='get', content=json.JSONEncoder().encode({})) if ret[0] != 0: raise Exception(ret[1]) resp = json.JSONDecoder().decode(ret[1]) vnf_status = ignorcase_get(resp, "vnfinstancestatus") resp_data = {"vnfInfo": {"vnfStatus": vnf_status}} logger.debug("[%s]resp_data=%s", funname, resp_data) return Response(data=resp_data, status=status.HTTP_200_OK) except Exception as e: logger.error( "Error occurred when querying VNF information,error:%s", e.args[0]) logger.error(traceback.format_exc()) return Response(data={'error': 'QueryVnf expection'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def call_vnfm_rest(vnfm_info, input_data, res_url, call_method="post"): 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=res_url, method=call_method, content=json.JSONEncoder().encode(input_data)) return ret
def scale(request, *args, **kwargs): logger.info("====scale_vnf===") try: logger.info("request.data = %s", request.data) logger.info("requested_url = %s", request.get_full_path()) vnfm_id = ignorcase_get(kwargs, "vnfmid") nf_instance_id = ignorcase_get(kwargs, "nfInstanceId") ret = vnfm_get(vnfm_id) if ret[0] != 0: return Response(data={'error': ret[1]}, status=ret[2]) vnfm_info = json.JSONDecoder().decode(ret[1]) scale_type = ignorcase_get(request.data, "type") aspect_id = ignorcase_get(request.data, "aspectId") number_of_steps = ignorcase_get(request.data, "numberOfSteps") extension = ignorcase_get(request.data, "additionalParam") vnfd_model = ignorcase_get(extension, "vnfdModel") data = { 'vnfmid': vnfm_id, 'nfvoid': 1, 'scaletype': '0' if scale_type == 'SCALE_OUT' else '1', 'vmlist': [{ 'VMNumber': number_of_steps, 'VMFlavor': aspect_id }], 'extension': '' } ''' for vdu_id in get_vdus(vnfd_model, aspect_id): data['vmlist'].append({ "VMFlavor": vdu_id, "VMNumber": number_of_steps }) ''' logger.info("data = %s", 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=nf_scaling_url.format(vnfInstanceID=nf_instance_id), method='put', # POST content=json.JSONEncoder().encode(data)) logger.info("ret=%s", ret) if ret[0] != 0: return Response(data={'error': 'scale error'}, status=ret[2]) resp_data = json.JSONDecoder().decode(ret[1]) jobId = resp_data["jobid"] logger.info("resp_data=%s", resp_data) except Exception as e: logger.error("Error occurred when scaling VNF") logger.error(traceback.format_exc()) return Response(data={'error': 'scale expection'}, status='500') return Response(data=resp_data, status=ret[2])
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), get_auth_token_url=mano_vnfm_auth_url, ) return ret
def post(self, request, vnfmid): try: funname = "InstantiateVnf post" logger.debug("[%s] request.data=%s", funname, request.data) ret = get_vnfminfo_from_nslcm(vnfmid) if ret[0] != 0: raise Exception(ret[1]) vnfm_info = json.JSONDecoder().decode(ret[1]) logger.debug("[%s] vnfm_info=%s", funname, vnfm_info) data = { "vnfinstancename": "V6000_VROUTER", "NFVOID": "1", "VNFMID": "1", "vnfd_id": "888552dbb6d502d8dd1e68a0fad212d8", "deployflavorid": "default", "extension": {}, "inputs": [] } inputs_json = load_json_file("inputs.json") [data["inputs"].append(item) for item in inputs_json["inputs"]] logger.debug("[%s] call_req data=%s", funname, 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="v1/vnfs", method='post', content=json.JSONEncoder().encode(data)) logger.debug("[%s] call_req ret=%s", funname, ret) if ret[0] != 0: 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", funname, resp_data) return Response(data=resp_data, status=status.HTTP_200_OK) except Exception as e: logger.error("Error occurred when instantiating VNF,error:%s", e.args[0]) logger.error(traceback.format_exc()) return Response(data={'error': 'InstantiateVnf expection'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def call_certus_resource(resource, method): ret = restcall.call_req( base_url=CERTUS_RESOURCE_URL, # user=ignorcase_get(vnfm_info, "userName"), user='******', # passwd=ignorcase_get(vnfm_info, "password"), passwd='b', auth_type=restcall.rest_no_auth, resource=resource, method=method, # content=json.JSONEncoder().encode(data)) content='') return ret
def post(self, request, vnfmid, vnfInstanceId): logger.debug("====scale_vnf===") try: logger.debug("request.data = %s", request.data) logger.debug("requested_url = %s", request.get_full_path()) ret = get_vnfminfo_from_nslcm(vnfmid) if ret[0] != 0: raise Exception(ret[1]) vnfm_info = json.JSONDecoder().decode(ret[1]) scale_type = ignorcase_get(request.data, "type") aspect_id = ignorcase_get(request.data, "aspectId") number_of_steps = ignorcase_get(request.data, "numberOfSteps") data = { 'vnfmid': vnfmid, 'nfvoid': 1, 'scaletype': '0' if scale_type == 'SCALE_OUT' else '1', 'vmlist': [{ 'VMNumber': number_of_steps, 'VMFlavor': aspect_id }], 'extension': '' } logger.debug("data = %s", 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='/v1/vnfs/{vnfInstanceID}/scale'.format( vnfInstanceID=vnfInstanceId), method='put', # POST content=json.JSONEncoder().encode(data)) logger.debug("ret=%s", ret) if ret[0] != 0: raise Exception('scale error') resp_data = json.JSONDecoder().decode(ret[1]) return Response(data=resp_data, status=status.HTTP_202_ACCEPTED) except Exception as e: logger.error("Error occurred when scaling VNF,error:%s", e.args[0]) logger.error(traceback.format_exc()) return Response(data={'error': 'Scale expection'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def post(self, request, vnfmid, vnfInstanceId): logger.debug("====heal_vnf===") try: logger.debug("request.data = %s", request.data) logger.debug("requested_url = %s", request.get_full_path()) logger.debug("vnfmid = %s", vnfmid) ret = get_vnfminfo_from_nslcm(vnfmid) if ret[0] != 0: raise Exception(ret[1]) vnfm_info = json.JSONDecoder().decode(ret[1]) req_data = { "action": ignorcase_get(request.data, 'action'), "lifecycleoperation": "operate", "isgrace": "force", "affectedvm": [], } affectedvm = ignorcase_get(request.data, 'affectedvm') if isinstance(affectedvm, list): req_data['affectedvm'] = affectedvm else: req_data['affectedvm'].append(affectedvm) logger.debug("req_data = %s", req_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='/api/v1/nf_m_i/nfs/{vnfInstanceID}/vms/operation'. format(vnfInstanceID=vnfInstanceId), method='post', content=json.JSONEncoder().encode(req_data)) logger.debug("ret=%s", ret) if ret[0] != 0: raise Exception('heal error') resp_data = json.JSONDecoder().decode(ret[1]) return Response(data=resp_data, status=status.HTTP_202_ACCEPTED) except Exception as e: logger.error("Error occurred when healing VNF,error:%s", e.args[0]) logger.error(traceback.format_exc()) return Response(data={'error': 'Heal expection'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def get(self, request, vnfmid, jobid): try: funname = "job_get" logger.debug("[%s] request.data=%s", funname, request.data) ret = get_vnfminfo_from_nslcm(vnfmid) if ret[0] != 0: raise Exception(ret[1]) vnfm_info = json.JSONDecoder().decode(ret[1]) logger.debug("[%s] vnfm_info=%s", funname, vnfm_info) operation_status_url = '/v1/jobs/{jobId}?NFVOID={nfvoId}&VNFMID={vnfmId}&ResponseID={responseId}' responseId = ignorcase_get(request.GET, 'responseId') query_url = operation_status_url.format(jobId=jobid, nfvoId=1, vnfmId=vnfmid, responseId=responseId) 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=query_url, method='get', content='') if ret[0] != 0: raise Exception(ret[1]) resp_data = json.JSONDecoder().decode(ret[1]) logger.debug("[%s]resp_data=%s", funname, resp_data) return Response(data=resp_data, status=status.HTTP_200_OK) except Exception as e: logger.error( "Error occurred when getting operation status information,error:%s", e.args[0]) logger.error(traceback.format_exc()) return Response(data={'error': 'QueryJob expection'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def post(self, request, vnfmid, vnfInstanceId): try: funname = "terminate_vnf_post" logger.debug("[%s] request.data=%s", funname, request.data) logger.debug("vnfmid=%s, vnfInstanceId=%s", vnfmid, vnfInstanceId) ret = get_vnfminfo_from_nslcm(vnfmid) if ret[0] != 0: raise Exception(ret[1]) vnfm_info = json.JSONDecoder().decode(ret[1]) logger.debug("[%s] vnfm_info=%s", funname, vnfm_info) 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="v1/vnfs/%s?NFVOID=1&VNFMID=%s" % (vnfInstanceId, vnfmid), method='delete', content='') if ret[0] != 0: raise Exception(ret[1]) resp = json.JSONDecoder().decode(ret[1]) resp_data = { "vnfInstanceId": vnfInstanceId, "jobId": ignorcase_get(resp, "JobId") } logger.debug("[%s]resp_data=%s", funname, resp_data) return Response(data=resp_data, status=status.HTTP_200_OK) except Exception as e: logger.error("Error occurred when terminating VNF,error: %s", e.args[0]) logger.error(traceback.format_exc()) return Response(data={'error': 'TerminateVnf expection'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def instantiate_vnf(request, *args, **kwargs): try: logger.debug("[%s] request.data=%s", fun_name(), request.data) vnfm_id = ignorcase_get(kwargs, "vnfmid") ret = vnfm_get(vnfm_id) if ret[0] != 0: return 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) vnf_package_id = ignorcase_get(request.data, "vnfPackageId") ret = vnfd_get(vnf_package_id) if ret[0] != 0: return Response(data={'error': ret[1]}, status=ret[2]) 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]) 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"] = vnfm_id # data["VNFD"] = ignorcase_get(packageInfo, "downloadUri") # data["VNFURL"] = ignorcase_get(packageInfo, "downloadUri") vnfdId = ignorcase_get(packageInfo, "vnfdId") from urlparse import urlparse vnfm_ip = urlparse(ignorcase_get(vnfm_info, "url")).netloc.split(':')[0] if "vCSCF_NF_ZTE" == vnfdId: data[ "VNFD"] = "ftp://*****:*****@" + "192.168.128.159" + ":21/CSCF" data[ "VNFURL"] = "ftp://*****:*****@" + "192.168.128.159" + ":21/CSCF" elif "vPCRF_NF_ZTE" == vnfdId: data[ "VNFD"] = "ftp://*****:*****@" + "192.168.128.159" + ":21/PCRF" data[ "VNFURL"] = "ftp://*****:*****@" + "192.168.128.159" + ":21/PCRF" elif "vTAS_NF_ZTE" == vnfdId: data[ "VNFD"] = "ftp://*****:*****@" + "192.168.128.159" + ":21/SSS" data[ "VNFURL"] = "ftp://*****:*****@" + "192.168.128.159" + ":21/SSS" elif "vSPGW_NF_ZTE" == vnfdId: data[ "VNFD"] = "ftp://*****:*****@" + "192.168.237.159" + ":21/vgw31" data[ "VNFURL"] = "ftp://*****:*****@" + "192.168.237.159" + ":21/vgw31" else: data["VNFD"] = ignorcase_get(packageInfo, "downloadUri") data["VNFURL"] = ignorcase_get(packageInfo, "downloadUri") data["extension"] = {} inputs = [] for name, value in ignorcase_get( ignorcase_get(request.data, "additionalParam"), "inputs").items(): inputs.append({"name": name, "value": value}) logger.info("ignorcase_get(request.data, \"additionalParam\") = %s" % ignorcase_get(request.data, "additionalParam")) data["extension"]["inputs"] = json.dumps(inputs) data["extension"]["extVirtualLinks"] = ignorcase_get( ignorcase_get(request.data, "additionalParam"), "extVirtualLinks") data["extension"]["vnfinstancename"] = ignorcase_get( request.data, "vnfInstanceName") data["extension"]["vnfid"] = data["VNFD"] data["extension"]["multivim"] = 0 logger.debug("[%s] call_req data=%s", fun_name(), 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=create_vnf_url, method='post', content=json.JSONEncoder().encode(data)) logger.debug("[%s] call_req ret=%s", fun_name(), ret) if ret[0] != 0: return Response(data={'error': ret[1]}, status=ret[2]) resp = json.JSONDecoder().decode(ret[1]) resp_data = mapping_conv(create_vnf_resp_mapping, resp) logger.info("[%s]resp_data=%s", fun_name(), resp_data) except Exception as e: logger.error("Error occurred when instantiating VNF") raise e return Response(data=resp_data, status=ret[2])