1 # Copyright 2017 ZTE Corporation.
\r
3 # Licensed under the Apache License, Version 2.0 (the "License");
\r
4 # you may not use this file except in compliance with the License.
\r
5 # You may obtain a copy of the License at
\r
7 # http://www.apache.org/licenses/LICENSE-2.0
\r
9 # Unless required by applicable law or agreed to in writing, software
\r
10 # distributed under the License is distributed on an "AS IS" BASIS,
\r
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
12 # See the License for the specific language governing permissions and
\r
13 # limitations under the License.
\r
18 from drf_yasg.utils import swagger_auto_schema
\r
19 from rest_framework import status
\r
20 from rest_framework.response import Response
\r
21 from rest_framework.views import APIView
\r
23 from lcm.nf.biz.terminate_vnf import TerminateVnf
\r
24 from lcm.nf.serializers.terminate_vnf_req import TerminateVnfRequestSerializer
\r
25 from lcm.nf.serializers.job_identifier import JobIdentifierSerializer
\r
26 from lcm.pub.exceptions import NFLCMException
\r
27 from lcm.pub.utils.jobutil import JobUtil
\r
28 from lcm.pub.utils.timeutil import now_time
\r
29 from lcm.pub.database.models import NfInstModel
\r
31 logger = logging.getLogger(__name__)
\r
34 class TerminateVnfView(APIView):
\r
35 @swagger_auto_schema(
\r
36 request_body=TerminateVnfRequestSerializer(),
\r
38 status.HTTP_202_ACCEPTED: JobIdentifierSerializer(),
\r
39 status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"
\r
42 def post(self, request, instanceid):
\r
43 logger.debug("TerminateVnf--post::> %s" % request.data)
\r
45 terminate_vnf_request_serializer = TerminateVnfRequestSerializer(data=request.data)
\r
46 if not terminate_vnf_request_serializer.is_valid():
\r
47 raise NFLCMException(terminate_vnf_request_serializer.errors)
\r
49 job_id = JobUtil.create_job('NF', 'TERMINATE', instanceid)
\r
50 JobUtil.add_job_status(job_id, 0, "TERM_VNF_READY")
\r
51 TerminateVnf(terminate_vnf_request_serializer.data, instanceid, job_id).start()
\r
53 terminate_vnf_response_serializer = JobIdentifierSerializer(data={"jobId": job_id})
\r
54 if not terminate_vnf_response_serializer.is_valid():
\r
55 raise NFLCMException(terminate_vnf_response_serializer.errors)
\r
57 return Response(data=terminate_vnf_response_serializer.data, status=status.HTTP_202_ACCEPTED)
\r
58 except NFLCMException as e:
\r
59 self.vnf_term_failed_handle(e.message)
\r
60 return Response(data={'error': '%s' % e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
\r
61 except Exception as e:
\r
62 logger.error(e.message)
\r
63 self.vnf_term_failed_handle(traceback.format_exc())
\r
64 return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
\r
66 def vnf_term_failed_handle(self, error_msg):
\r
67 logger.error('VNF termination failed, detail message: %s' % error_msg)
\r
68 NfInstModel.objects.filter(nfinstid=self.nf_inst_id).update(status='failed', lastuptime=now_time())
\r
69 JobUtil.add_job_status(self.job_id, 255, error_msg)
\r