summaryrefslogtreecommitdiffstats
path: root/gvnfmadapter/driver/interfaces/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'gvnfmadapter/driver/interfaces/views.py')
-rw-r--r--gvnfmadapter/driver/interfaces/views.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/gvnfmadapter/driver/interfaces/views.py b/gvnfmadapter/driver/interfaces/views.py
index b32aa8c..3a62b24 100644
--- a/gvnfmadapter/driver/interfaces/views.py
+++ b/gvnfmadapter/driver/interfaces/views.py
@@ -35,6 +35,7 @@ from driver.pub.exceptions import GvnfmDriverException
from driver.pub.utils import restcall
from driver.pub.utils.restcall import req_by_msb
from driver.interfaces.serializers.operate_request import VnfOperateRequestSerializer
+from driver.interfaces.serializers.heal_request import HealVnfRequestSerializerToVnfm, VnfHealRequestSerializer
from driver.interfaces.serializers.response import ProblemDetailsSerializer
logger = logging.getLogger(__name__)
@@ -341,6 +342,56 @@ class VnfOperateView(APIView):
return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+class VnfHealView(APIView):
+ @swagger_auto_schema(
+ request_body=VnfHealRequestSerializer(),
+ responses={
+ status.HTTP_202_ACCEPTED: "Success",
+ status.HTTP_404_NOT_FOUND: ProblemDetailsSerializer(),
+ status.HTTP_409_CONFLICT: ProblemDetailsSerializer(),
+ status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"
+ }
+ )
+ def post(self, request, vnfmtype, vnfmid, vnfInstanceId):
+ logger.debug("Heal_vnf--post::> %s" % request.data)
+ logger.debug("Heal vnf begin!")
+ try:
+ requestSerializer = VnfHealRequestSerializer(data=request.data)
+ request_isValid = requestSerializer.is_valid()
+ if not request_isValid:
+ raise Exception(requestSerializer.errors)
+ healdata = {
+ u"additionalParams": {
+ u"action": ignorcase_get(request.data, "action"),
+ u"affectedvm": ignorcase_get(request.data, "affectedvm")
+ }
+ }
+ input_data = HealVnfRequestSerializerToVnfm(data=healdata)
+ resp_isvalid = input_data.is_valid()
+ if not resp_isvalid:
+ raise GvnfmDriverException(input_data.errors)
+ logger.debug("Heal vnf start!")
+ logger.debug("do_heal: vnfmid=[%s],vnfInstanceId=[%s],request data=[%s]",
+ vnfmid, vnfInstanceId, input_data)
+ statusCode, resp, location = do_lcmVnf(vnfmid, vnfInstanceId, input_data.data, "heal")
+ logger.debug("do_heal: response data=[%s]", resp)
+ logger.debug("Heal vnf end!")
+ ret = int(statusCode)
+ if ret == status.HTTP_404_NOT_FOUND:
+ return Response(data=resp, status=status.HTTP_404_NOT_FOUND)
+ elif ret == status.HTTP_409_CONFLICT:
+ return Response(data=resp, status=status.HTTP_409_CONFLICT)
+ response = Response(data=None, status=status.HTTP_202_ACCEPTED)
+ response["Location"] = location
+ return response
+ except GvnfmDriverException as e:
+ logger.error('Heal vnf failed, detail message: %s' % e.message)
+ return Response(data={'error': e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+ except:
+ logger.error(traceback.format_exc())
+ return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+
class VnfPkgsInfo(APIView):
def get(request, *args, **kwargs):
try: