def get_vnfm_info(vnfm_id): ret = req_by_msb((EXTSYS_GET_VNFM) % 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 get_vnfpkgs(request, *args, **kwargs): logger.info("Enter %s", fun_name()) ret = req_by_msb("openoapi/nslcm/v1/vnfpackage", "GET") if ret[0] != 0: 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 get_vnfminfo_from_nslcm(vnfm_id): logger.debug("[get_vnfminfo_from_nslcm] vnfm_id=[%s]", vnfm_id) ret = req_by_msb("api/aai-esr-server/v1/vnfms/%s" % vnfm_id, "GET") logger.debug("[get_vnfminfo_from_nslcm] response=%s", ret) if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) raise CertusvmanagerdriverException( "Failed to query vnfm(%s) from nslcm." % vnfm_id) return json.JSONDecoder().decode(ret[1])
def put(self, request): logger.debug("=====GrantVnf post=====") try: logger.debug("request.data = %s", request.data) req_data = { "vnfInstanceId": ignorcase_get(request.data, "vnfistanceid"), "vnfDescriptorId": "", "addresource": [], "additionalparam": { "vnfmid": ignorcase_get(request.data, "vnfmid"), "vimid": ignorcase_get(request.data, "vimid"), "tenant": ignorcase_get(request.data, "tenant") } } if ignorcase_get(request.data, "operationright") == 0: req_data["lifecycleOperation"] = "Instantiate" for vm in ignorcase_get(request.data, "vmlist"): for i in range(int(ignorcase_get(vm, "VMNumber"))): req_data["addresource"].append({ "type": "vdu", "resourceDefinitionId": i, "vdu": ignorcase_get(vm, "VMFlavor"), "vimid": ignorcase_get(vm, "vimid"), "tenant": ignorcase_get(vm, "tenant") }) logger.debug("req_data=%s", req_data) ret = req_by_msb('api/nslcm/v1/ns/grantvnf', "POST", content=json.JSONEncoder().encode(req_data)) logger.info("ret = %s", ret) if ret[0] != 0: logger.error("grant to nfvo failed: %s", ret[1]) # resp = json.JSONDecoder().decode(ret[1]) # resp_data = { # 'vimid': ignorcase_get(resp['vim'], 'vimid'), # 'tenant': ignorcase_get(ignorcase_get(resp['vim'], 'accessinfo'), 'tenant') # } resp_data = {'vimid': "1", 'tenant': "mano"} logger.debug("[grant_vnf_put]resp_data=%s", resp_data) return Response(data=resp_data, status=status.HTTP_201_CREATED) except Exception as e: logger.error("Error occurred in Grant VNF, error: %s", e.args[0]) logger.error(traceback.format_exc()) return Response(data={'error': 'Grant expection'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def grantvnf(request, *args, **kwargs): logger.info("=====grantvnf=====") try: resp_data = {} logger.info("req_data = %s", request.data) data = mapping_conv(grant_vnf_param_map, request.data) logger.info("grant_vnf_url = %s", grant_vnf_url) 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") logger.info("data = %s", data) ret = req_by_msb(grant_vnf_url, "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') resp_data['tenant'] = ignorcase_get( ignorcase_get(resp['vim'], 'accessinfo'), 'tenant') 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 notify(request, *args, **kwargs): try: logger.info("[%s]req_data = %s", fun_name(), request.data) ret = req_by_msb(notify_url.format( vnfmid=ignorcase_get(request.data, 'VNFMID'), vnfInstanceId=ignorcase_get(request.data, 'vnfinstanceid')), "POST", content=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]) except Exception as e: logger.error("Error occurred in LCM notification.") raise e return Response(data=None, status=ret[2])
def get_vnfpkgs(request, *args, **kwargs): try: logger.debug("Enter %s", fun_name()) ret = req_by_msb("api/nslcm/v1/vnfpackage", "GET") if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) raise CertusvmanagerdriverException('Failed to get vnfpkgs.') resp = json.JSONDecoder().decode(ret[1]) return Response(data=resp, status=status.HTTP_200_OK) except CertusvmanagerdriverException as e: logger.error('Get vnfpkgs failed, detail message: %s' % e.message) return Response(data={'error': e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) except: logger.error(traceback.format_exc()) return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def notify(request, *args, **kwargs): try: logger.debug("[%s]req_data = %s", fun_name(), 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.debug("[%s]data = %s", fun_name(), ret) if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) raise CertusvmanagerdriverException('Failed to notify vnf.') return Response(data=None, status=ret[2]) except CertusvmanagerdriverException as e: logger.error('Grant vnf failed, detail message: %s' % e.message) return Response(data={'error': e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) except: logger.error(traceback.format_exc()) return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def grantvnf(request, *args, **kwargs): logger.info("=====grantvnf=====") try: resp_data = {} logger.info("req_data = %s", request.data) ret = req_by_msb(grant_vnf_url, "POST", content=json.JSONEncoder().encode(request.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') resp_data['tenant'] = ignorcase_get( ignorcase_get(resp['vim'], 'accessinfo'), 'tenant') 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 vnfd_get(vnfpackageid): ret = req_by_msb("openoapi/nslcm/v1/vnfpackage/%s" % vnfpackageid, "GET") return ret
def vnfm_get(vnfmid): ret = req_by_msb("openoapi/extsys/v1/vnfms/%s" % vnfmid, "GET") return ret
def notify(request, *args, **kwargs): try: logger.info("[%s]req_data = %s", fun_name(), request.data) data = mapping_conv(notify_param_map, request.data) logger.info("[%s]data = %s", fun_name(), data) data["status"] = "result" data["jobId"] = "notMust" data["affectedVnfc"] = [] data["affectedVl"] = [] data["affectedVirtualStorage"] = [] data["affectedCp"] = [] affectedvnfcs = ignorcase_get(ignorcase_get(request.data, "extension"), "affectedvnfc") affectedvls = ignorcase_get(ignorcase_get(request.data, "extension"), "affectedvl") affectedcps = ignorcase_get(ignorcase_get(request.data, "extension"), "affectedcp") vnfdmodule = ignorcase_get(ignorcase_get(request.data, "extension"), "vnfdmodule") data["vnfdmodule"] = vnfdmodule for affectedvnfc in affectedvnfcs: data["affectedVnfc"].append({ "vnfcInstanceId": ignorcase_get(affectedvnfc, "vnfcinstanceid"), "vduId": ignorcase_get(affectedvnfc, "vduId"), "changeType": ignorcase_get(affectedvnfc, "changeType"), "vimid": ignorcase_get(ignorcase_get(affectedvnfc, "computeresource"), "vimid"), "vmId": ignorcase_get(ignorcase_get(affectedvnfc, "computeresource"), "resourceid"), "vmName": ignorcase_get(ignorcase_get(affectedvnfc, "computeresource"), "resourcename") }) for affectedvl in affectedvls: data["affectedVl"].append({ "vlInstanceId": ignorcase_get(affectedvl, "virtuallinkinstanceid"), "vimid": ignorcase_get(ignorcase_get(affectedvl, "networkresource"), "vimid"), "vldid": ignorcase_get(affectedvl, "virtuallinkdescid"), "vllid": ignorcase_get(ignorcase_get(affectedvl, "networkresource"), "resourceid"), "vlName": ignorcase_get(ignorcase_get(affectedvl, "networkresource"), "resourcename") }) for affectedcp in affectedcps: data["affectedCp"].append(affectedcp) # { # "virtualLinkInstanceId": ignorcase_get(affectedcp, "virtuallinkinstanceid"), # "ownerId": ignorcase_get(affectedcp, "ownerId"), # "ownerType": ignorcase_get(affectedcp, "ownerType") # } ret = req_by_msb(notify_url.format( vnfmid=ignorcase_get(data, 'VNFMID'), vnfInstanceId=ignorcase_get(data, 'vnfinstanceid')), "POST", content=json.JSONEncoder().encode(data)) logger.info("[%s]data = %s", fun_name(), ret) if ret[0] != 0: return Response(data={'error': ret[1]}, status=ret[2]) except Exception as e: logger.error("Error occurred in LCM notification.") raise e return Response(data=None, status=ret[2])
def vnfpackage_get(csarid): ret = req_by_msb("api/catalog/v1/vnfpackages/%s" % csarid, "GET") return ret
def post(self, request): try: funname = "notify_post" logger.debug("[%s]request.data = %s", funname, request.data) req_data = { "status": "result", "vnfInstanceId": ignorcase_get(request.data, "vnfinstanceid"), "vnfmId": ignorcase_get(request.data, "vnfmid"), "vimId": ignorcase_get(request.data, "vimid"), "operation": ignorcase_get(request.data, "EventType"), "jobId": "notMust", "affectedVl": [], "affectedCp": [], "affectedVirtualStorage": [], "affectedVnfc": [], } extension = ignorcase_get(request.data, "extension") openo_notification = ignorcase_get(extension, "openo_notification") if openo_notification: affectedvnfcs = ignorcase_get(openo_notification, "affectedVnfc") affectedvls = ignorcase_get(openo_notification, "affectedvirtuallink") affectedcps = ignorcase_get(openo_notification, "affectedCp") vnfdmodule = ignorcase_get(openo_notification, "vnfdmodule") else: affectedvnfcs = ignorcase_get( ignorcase_get(request.data, "extension"), "affectedvnfc") affectedvls = ignorcase_get( ignorcase_get(request.data, "extension"), "affectedvl") affectedcps = ignorcase_get( ignorcase_get(request.data, "extension"), "affectedcp") vnfdmodule = ignorcase_get( ignorcase_get(request.data, "extension"), "vnfdmodule") req_data["vnfdmodule"] = vnfdmodule for affectedvnfc in affectedvnfcs: req_data["affectedVnfc"].append({ "vnfcInstanceId": ignorcase_get(affectedvnfc, "vnfcInstanceId"), "vduId": ignorcase_get(affectedvnfc, "vduId"), "changeType": ignorcase_get(affectedvnfc, "changeType"), "vimId": ignorcase_get( ignorcase_get(affectedvnfc, "computeResource"), "vimId"), "vmId": ignorcase_get( ignorcase_get(affectedvnfc, "computeResource"), "resourceId"), "vmName": ignorcase_get( ignorcase_get(affectedvnfc, "computeResource"), "resourceName") }) for affectedvl in affectedvls: req_data["affectedVl"].append({ "vlInstanceId": ignorcase_get(affectedvl, "virtualLinkInstanceId"), "changeType": ignorcase_get(affectedvl, "changeType"), "vimId": ignorcase_get(ignorcase_get(affectedvl, "networkResource"), "vimId"), "vldId": ignorcase_get(affectedvl, "virtuallinkdescid"), "networkResource": { "resourceType": "network", "resourceId": ignorcase_get( ignorcase_get(affectedvl, "networkresource"), "resourceid"), "resourceName": ignorcase_get( ignorcase_get(affectedvl, "networkresource"), "resourcename") } }) for affectedcp in affectedcps: req_data["affectedCp"].append(affectedcp) vnfmid = ignorcase_get(req_data, 'vnfmId') vnfInstanceId = ignorcase_get(req_data, 'vnfinstanceid') notify_url = 'api/nslcm/v1/ns/%s/vnfs/%s/Notify' % (vnfmid, vnfInstanceId) logger.debug("notify_url = %s", notify_url) logger.debug("req_data = %s", req_data) ret = req_by_msb(notify_url, "POST", content=json.JSONEncoder().encode(req_data)) logger.debug("[%s]data = %s", funname, ret) if ret[0] != 0: logger.error("notify to nfvo failed: %s", ret[1]) return Response(data=None, status=status.HTTP_200_OK) except Exception as e: logger.error("Error occurred in LCM notification,error: %s", e.args[0]) logger.error(traceback.format_exc()) return Response(data={'error': 'Notify expection'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def get_vnfminfo_from_nslcm(vnfmid): ret = req_by_msb("api/nslcm/v1/vnfms/%s" % vnfmid, "GET") return ret
def vnfpackage_get(csarid): ret = req_by_msb("openoapi/nslcm/v1/vnfpackage/%s" % csarid, "GET") return ret
# Copyright 2016-2017 certus Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from driver.pub.config.config import REG_TO_MSB_WHEN_START, REG_TO_MSB_REG_URL, REG_TO_MSB_REG_PARAM from django.conf.urls import include, url urlpatterns = [ url(r'^', include('driver.interfaces.urls')), url(r'^', include('driver.swagger.urls')), url(r'^vnfpkgm/', include('vnfpkgm.urls')), ] # regist to MSB when startup if REG_TO_MSB_WHEN_START: import json from driver.pub.utils.restcall import req_by_msb req_by_msb(REG_TO_MSB_REG_URL, "POST", json.JSONEncoder().encode(REG_TO_MSB_REG_PARAM))
def instantiate_vnf(request, *args, **kwargs): try: logger.debug("instantiate_vnf--post::> %s" % request.data) logger.debug("instantiate_vnf-kwargs = %s" % kwargs) logger.debug("Create vnf begin!") vnfd_descriptor_id, vnfd_df_flavour_id = get_parameter_from_vnfd( ignorcase_get(request.data, "vnfPackageId")) logger.debug('vnfd_descriptor_id = %s' % vnfd_descriptor_id) logger.debug('vnfd_df_flavour_id = %s' % vnfd_df_flavour_id) vnfm_id = ignorcase_get(kwargs, "vnfmid") ret = req_by_msb("api/aai-esr-server/v1/vnfms/%s" % vnfm_id, "GET") logger.debug("instantiate_vnf-req_by_msb response=%s", ret) if ret[0] != 0: logger.error('Status code is %s, detail is %s.', ret[2], ret[1]) raise CertusvmanagerdriverException( "Failed to query vnfm(%s) from nslcm." % vnfm_id) global mano_vnfm_auth_url mano_vnfm_auth_url = json.JSONDecoder().decode( ret[1])['certificateUrl'] logger.debug('instantiate_vnf-mano_vnfm_auth_url = %s' % mano_vnfm_auth_url) input_data = { "vnfdId": vnfd_descriptor_id, "vnfInstanceName": ignorcase_get(request.data, "vnfInstanceName"), "vnfInstanceDescription": ignorcase_get(request.data, "vnfInstanceDescription") } logger.debug( "do_createvnf: request data=[%s],input_data=[%s],vnfm_id=[%s]", request.data, input_data, vnfm_id) # vnf_package_id = ignorcase_get(request.data, "vnfPackageId") # ret = vnfpackage_get(vnf_package_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) # vnfPkg_params = { # "vnfdId": ignorcase_get(packageInfo, "vnfdId"), # "vnfPkgId": ignorcase_get(packageInfo, "vnfPackageId"), # "vnfPackageUri": ignorcase_get(packageInfo, "downloadUrl") # } # ret = svnfm_download_vnf_package(vnfm_id, vnfPkg_params) # if ret[0] != 0: # return Response(data={'error': ret[1]}, status=ret[2]) resp = do_createvnf(vnfm_id, input_data) logger.debug("do_createvnf: response data=[%s]", resp) logger.debug("Create vnf end!") logger.debug("Instantiate vnf start!") vnfInstanceId = resp["id"] vim_uuid = ignorcase_get( ignorcase_get(request.data, "additionalParam"), "vimId") vim_connection_info = {"vimId": vim_uuid} input_data = { "flavourId": vnfd_df_flavour_id, # "extVirtualLinks": ignorcase_get(request.data, "extVirtualLink"), # 根据sol003,指定实例化的vim信息 "vimConnectionInfo": vim_connection_info, "additionalParams": ignorcase_get(request.data, "additionalParam") } logger.debug( "do_instvnf: vnfInstanceId=[%s], vnfm_id=[%s], input_data=[%s]", vnfInstanceId, vnfm_id, input_data) resp = do_instvnf(vnfInstanceId, vnfm_id, input_data) logger.debug("do_instvnf: response data=[%s]", resp) resp_data = { "vnfInstanceId": vnfInstanceId, "jobId": ignorcase_get(resp, "vnfLcmOpOccId") } logger.debug("Instantiate vnf end!") return Response(data=resp_data, status=status.HTTP_201_CREATED) except CertusvmanagerdriverException as e: logger.error('instantiate vnf failed, detail message: %s' % e.message) return Response(data={'error': e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) except: logger.error(traceback.format_exc()) return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)