From df61b12834326951560af533b990cc9e2e3cc065 Mon Sep 17 00:00:00 2001 From: fujinhua Date: Mon, 8 Apr 2019 11:58:05 +0800 Subject: [PATCH] Add change vnf flavour api Change-Id: I2f8a3f8fdf9c22cb9407f1403c53bea6c75aae34 Issue-ID: VFC-1306 Signed-off-by: fujinhua --- .../nf/serializers/change_vnf_flavour_request.py | 63 +++++++++++++++++++ lcm/lcm/nf/views/change_vnf_flavour_view.py | 73 ++++++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 lcm/lcm/nf/serializers/change_vnf_flavour_request.py create mode 100644 lcm/lcm/nf/views/change_vnf_flavour_view.py diff --git a/lcm/lcm/nf/serializers/change_vnf_flavour_request.py b/lcm/lcm/nf/serializers/change_vnf_flavour_request.py new file mode 100644 index 00000000..5d903a92 --- /dev/null +++ b/lcm/lcm/nf/serializers/change_vnf_flavour_request.py @@ -0,0 +1,63 @@ +# Copyright (C) 2019 ZTE. All Rights Reserved. +# +# 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 rest_framework import serializers +from .ext_virtual_link_data import ExtVirtualLinkDataSerizlizer +from .vim_connection_info import VimConnectionInfoSerializer +from .ext_managed_virtual_link_data import ExtManagedVirtualLinkDataSerizlizer + + +class ChangeVnfFlavourRequestSerializer(serializers.Serializer): + newFlavourId = serializers.CharField( + help_text="Identifier of the VNF deployment flavour to be instantiated.", + required=True, + allow_null=False, + allow_blank=False + ) + instantiationLevelId = serializers.CharField( + help_text="Identifier of the instantiation level of the deployment flavour to be instantiated. " + + "If not present, the default instantiation level as declared in the VNFD is instantiated.", + required=False, + allow_blank=True, + allow_null=True + ) + extVirtualLinks = ExtVirtualLinkDataSerizlizer( + help_text="Information about external VLs to connect the VNF to.", + many=True, + required=False, + allow_null=True + ) + extManagedVirtualLinks = ExtManagedVirtualLinkDataSerizlizer( + help_text="Information about internal VLs that are managed by the NFVO.", + many=True, + required=False, + allow_null=True + ) + vimConnectionInfo = VimConnectionInfoSerializer( + help_text="Information about VIM connections to be used for managing " + + "the resources for the VNF instance, " + + "or refer to external / externally-managed virtual links." + + "This attribute shall only be supported and may be present if VNF-related " + + "resource management in direct mode is applicable.", + many=True, + required=False, + allow_null=True + ) + additionalParams = serializers.DictField( + help_text="Additional input parameters for the flavour change process, " + + "specific to the VNF being modified, " + + "as declared in the VNFD as part of 'ChangeVnfFlavourOpConfig'.", + required=False, + allow_null=True + ) diff --git a/lcm/lcm/nf/views/change_vnf_flavour_view.py b/lcm/lcm/nf/views/change_vnf_flavour_view.py new file mode 100644 index 00000000..732a42ac --- /dev/null +++ b/lcm/lcm/nf/views/change_vnf_flavour_view.py @@ -0,0 +1,73 @@ +# Copyright 2019 ZTE 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. + +import logging + +from drf_yasg.utils import swagger_auto_schema +from rest_framework import status +from rest_framework.response import Response +from rest_framework.views import APIView + +from lcm.nf.serializers.change_vnf_flavour_request import ChangeVnfFlavourRequestSerializer +from lcm.nf.serializers.response import ProblemDetailsSerializer +from lcm.pub.exceptions import NFLCMException +from lcm.pub.exceptions import NFLCMExceptionNotFound +from lcm.pub.exceptions import NFLCMExceptionConflict +from lcm.pub.utils.jobutil import JobUtil +from lcm.pub.database.models import NfInstModel +from lcm.nf.const import VNF_STATUS +from .common import view_safe_call_with_log + +logger = logging.getLogger(__name__) + + +class ChangeVnfFlavourView(APIView): + @swagger_auto_schema( + request_body=ChangeVnfFlavourRequestSerializer(), + responses={ + status.HTTP_202_ACCEPTED: "Empty", + status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(), + status.HTTP_409_CONFLICT: ProblemDetailsSerializer(), + status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer() + } + ) + @view_safe_call_with_log(logger=logger) + def post(self, request, instanceid): + logger.debug("ChangeVnfFlavour--post::> %s" % request.data) + + chg_flavour_serializer = ChangeVnfFlavourRequestSerializer(data=request.data) + if not chg_flavour_serializer.is_valid(): + raise NFLCMException(chg_flavour_serializer.errors) + + job_id = JobUtil.create_job('NF', 'CHG_VNF_FLAVOUR', instanceid) + JobUtil.add_job_status(job_id, 0, "CHG_VNF_FLAVOUR_READY") + self.chg_flavour_pre_check(instanceid, job_id) + + # TODO: call biz logic + + response = Response(data={"jobId": job_id}, + status=status.HTTP_202_ACCEPTED) + return response + + def chg_flavour_pre_check(self, nf_inst_id, job_id): + vnf_insts = NfInstModel.objects.filter(nfinstid=nf_inst_id) + if not vnf_insts.exists(): + raise NFLCMExceptionNotFound("VNF nf_inst_id does not exist.") + + if vnf_insts[0].status != 'INSTANTIATED': + raise NFLCMExceptionConflict("VNF instantiationState is not INSTANTIATED.") + + vnf_insts.update(status=VNF_STATUS.UPDATING) + JobUtil.add_job_status(job_id, 15, 'Nf change vnf flavour pre-check finish') + logger.info("Nf change vnf flavour pre-check finish") -- 2.16.6