diff options
-rw-r--r-- | lcm/lcm/nf/tests/test_terminate_vnf.py | 13 | ||||
-rw-r--r-- | lcm/lcm/nf/views/terminate_vnf_view.py | 18 |
2 files changed, 29 insertions, 2 deletions
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")
|