예제 #1
0
파일: views.py 프로젝트: openov2/nfvo
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])
예제 #2
0
파일: views.py 프로젝트: openov2/nfvo
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])
예제 #3
0
    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)
예제 #4
0
파일: views.py 프로젝트: openov2/nfvo
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])
예제 #5
0
    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)
예제 #6
0
파일: views.py 프로젝트: openov2/nfvo
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
예제 #7
0
파일: views.py 프로젝트: openov2/nfvo
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])
예제 #8
0
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
예제 #9
0
    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)
예제 #10
0
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
예제 #11
0
    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)
예제 #12
0
    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)
예제 #13
0
    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)
예제 #14
0
    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)
예제 #15
0
파일: views.py 프로젝트: openov2/nfvo
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])