From: fujinhua Date: Thu, 11 Apr 2019 01:28:16 +0000 (+0800) Subject: Add precheck logic to terminate vnf X-Git-Tag: 1.3.0~56 X-Git-Url: https://gerrit.onap.org/r/gitweb?p=vfc%2Fgvnfm%2Fvnflcm.git;a=commitdiff_plain;h=beae7e20ec71783a787c26a848699ecad4ac2915 Add precheck logic to terminate vnf Change-Id: If391dad2eebd1980701c8bd52456b9bcb7511c89 Issue-ID: VFC-1306 Signed-off-by: fujinhua --- diff --git a/lcm/lcm/nf/tests/test_terminate_vnf.py b/lcm/lcm/nf/tests/test_terminate_vnf.py index b5f75f32..59b7ead9 100644 --- a/lcm/lcm/nf/tests/test_terminate_vnf.py +++ b/lcm/lcm/nf/tests/test_terminate_vnf.py @@ -98,10 +98,19 @@ class TestNFTerminate(TestCase): "terminationType": "GRACEFUL", "gracefulTerminationTimeout": 120 } - NfInstModel(nfinstid='12', nf_name='VNF1').save() + NfInstModel(nfinstid='12', + nf_name='VNF1', + nf_desc="VNF DESC", + vnfdid="1", + netype="XGW", + vendor="ZTE", + vnfSoftwareVersion="V1", + version="V1", + package_id="2", + status='INSTANTIATED').save() mock_run.re.return_value = None response = self.client.post("/api/vnflcm/v1/vnf_instances/12/terminate", data=req_data, format='json') - self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code) + self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code, response.content) def test_terminate_vnf_when_inst_id_not_exist(self): data = { diff --git a/lcm/lcm/nf/views/terminate_vnf_view.py b/lcm/lcm/nf/views/terminate_vnf_view.py index 0530437f..de3122e2 100644 --- a/lcm/lcm/nf/views/terminate_vnf_view.py +++ b/lcm/lcm/nf/views/terminate_vnf_view.py @@ -22,8 +22,12 @@ from rest_framework.views import APIView from lcm.nf.biz.terminate_vnf import TerminateVnf from lcm.nf.serializers.terminate_vnf_req import TerminateVnfRequestSerializer from lcm.nf.serializers.job_identifier import JobIdentifierSerializer +from lcm.pub.database.models import NfInstModel from lcm.pub.exceptions import NFLCMException +from lcm.pub.exceptions import NFLCMExceptionConflict +from lcm.pub.exceptions import NFLCMExceptionNotFound from lcm.pub.utils.jobutil import JobUtil +from lcm.nf.const import VNF_STATUS from .common import view_safe_call_with_log logger = logging.getLogger(__name__) @@ -47,6 +51,8 @@ class TerminateVnfView(APIView): job_id = JobUtil.create_job('NF', 'TERMINATE', instanceid) JobUtil.add_job_status(job_id, 0, "TERM_VNF_READY") + + self.terminate_pre_check(instanceid, job_id) TerminateVnf(terminate_vnf_request_serializer.data, instanceid, job_id).start() terminate_vnf_response_serializer = JobIdentifierSerializer(data={"jobId": job_id}) @@ -54,3 +60,15 @@ class TerminateVnfView(APIView): raise NFLCMException(terminate_vnf_response_serializer.errors) return Response(data=terminate_vnf_response_serializer.data, status=status.HTTP_202_ACCEPTED) + + def terminate_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.TERMINATING) + JobUtil.add_job_status(job_id, 15, 'Nf terminating pre-check finish') + logger.info("Nf terminating pre-check finish")