Merge "fix vserver deletion in AAI"
authoryunlong ying <ying.yunlong@zte.com.cn>
Mon, 29 Jan 2018 02:52:23 +0000 (02:52 +0000)
committerGerrit Code Review <gerrit@onap.org>
Mon, 29 Jan 2018 02:52:23 +0000 (02:52 +0000)
lcm/ns/serializers.py
lcm/ns/tests/test_ns_heal.py
lcm/ns/views.py

index 644f132..9861e71 100644 (file)
@@ -103,7 +103,11 @@ class HealNsAdditionalParamsSerializer(serializers.Serializer):
     actionvminfo = ActionVmSerializer(help_text="VM info of action", required=False, allow_null=True)
 
 
-class HealNsReqSerializer(serializers.Serializer):
+class HealVnfDataSerializer(serializers.Serializer):
     vnfInstanceId = serializers.CharField(help_text="ID of VNF Instance", required=True)
     cause = serializers.CharField(help_text="Cause of NS heal", required=False, allow_null=True)
     additionalParams = HealNsAdditionalParamsSerializer(help_text="Additional params of NS heal", required=False, allow_null=True)
+
+
+class HealNsReqSerializer(serializers.Serializer):
+    healVnfData = HealVnfDataSerializer(help_text="Data of heal VNF", required=False, allow_null=True)
index 46f13ce..a3b8498 100644 (file)
@@ -66,7 +66,7 @@ class TestHealNsViews(TestCase):
         }
 
         response = self.client.post("/api/nslcm/v1/ns/%s/heal" % self.ns_inst_id, data=data)
-        self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code)
+        self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code, response.data)
         self.assertIsNotNone(response.data)
         self.assertIn("jobId", response.data)
         self.assertNotIn("error", response.data)
@@ -128,6 +128,5 @@ class TestHealNsViews(TestCase):
         data = {}
 
         response = self.client.post("/api/nslcm/v1/ns/%s/heal" % self.ns_inst_id, data=data)
-        self.assertEqual(response.data["error"], "healVnfData parameter does not exist or value is incorrect.")
         self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR)
         self.assertIn("error", response.data)
index 6b14f58..32dc91e 100644 (file)
@@ -37,6 +37,7 @@ from lcm.ns.serializers import QueryNsRespSerializer
 from lcm.ns.serializers import NsOperateJobSerializer
 from lcm.ns.serializers import InstantNsReqSerializer
 from lcm.ns.serializers import TerminateNsReqSerializer
+from lcm.ns.serializers import HealNsReqSerializer
 from lcm.pub.exceptions import NSLCMException
 
 logger = logging.getLogger(__name__)
@@ -156,34 +157,77 @@ class TerminateNSView(APIView):
 
 
 class NSHealView(APIView):
+    @swagger_auto_schema(
+        request_body=HealNsReqSerializer(),
+        responses={
+            status.HTTP_202_ACCEPTED: NsOperateJobSerializer(),
+            status.HTTP_500_INTERNAL_SERVER_ERROR: "Inner error"
+        }
+    )
     def post(self, request, ns_instance_id):
-        logger.debug("Enter HealNSView::post %s", request.data)
-        logger.debug("Enter HealNSView:: %s", ns_instance_id)
-        job_id = JobUtil.create_job("VNF", JOB_TYPE.HEAL_VNF, ns_instance_id)
         try:
+            logger.debug("Enter HealNSView::post %s", request.data)
+            logger.debug("Enter HealNSView:: %s", ns_instance_id)
+            req_serializer = HealNsReqSerializer(data=request.data)
+            if not req_serializer.is_valid():
+                raise NSLCMException(req_serializer.errors)
+
+            job_id = JobUtil.create_job("VNF", JOB_TYPE.HEAL_VNF, ns_instance_id)
             NSHealService(ns_instance_id, request.data, job_id).start()
+
+            resp_serializer = NsOperateJobSerializer(data={'jobId': job_id})
+            if not resp_serializer.is_valid():
+                raise NSLCMException(resp_serializer.errors)
+
+            logger.debug("Leave HealNSView::post ret=%s", resp_serializer.data)
+            return Response(data=resp_serializer.data, status=status.HTTP_202_ACCEPTED)
         except Exception as e:
             logger.error("Exception in HealNSView: %s", e.message)
             return Response(data={'error': e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
-        ret = {'jobId': job_id}
-        logger.debug("Leave HealNSView::post ret=%s", ret)
-        return Response(data=ret, status=status.HTTP_202_ACCEPTED)
 
 
 class NSDetailView(APIView):
+    @swagger_auto_schema(
+        request_body=None,
+        responses={
+            status.HTTP_200_OK: QueryNsRespSerializer(help_text="NS instance", many=True),
+            status.HTTP_500_INTERNAL_SERVER_ERROR: "Inner error",
+            status.HTTP_404_NOT_FOUND: "Ns instance does not exist"
+        }
+    )
     def get(self, request, ns_instance_id):
-        logger.debug("Enter NSDetailView::get ns(%s)", ns_instance_id)
-        ns_filter = {"ns_inst_id": ns_instance_id}
-        ret = GetNSInfoService(ns_filter).get_ns_info()
-        if not ret:
-            return Response(status=status.HTTP_404_NOT_FOUND)
-        logger.debug("Leave NSDetailView::get::ret=%s", ret)
-        return Response(data=ret, status=status.HTTP_200_OK)
+        try:
+            logger.debug("Enter NSDetailView::get ns(%s)", ns_instance_id)
+            ns_filter = {"ns_inst_id": ns_instance_id}
+            ret = GetNSInfoService(ns_filter).get_ns_info()
+            if not ret:
+                return Response(status=status.HTTP_404_NOT_FOUND)
+            logger.debug("Leave NSDetailView::get::ret=%s", ret)
+            resp_serializer = QueryNsRespSerializer(data=ret, many=True)
+            if not resp_serializer.is_valid():
+                raise NSLCMException(resp_serializer.errors)
+            return Response(data=resp_serializer.data, status=status.HTTP_200_OK)
+        except Exception as e:
+            logger.error(traceback.format_exc())
+            logger.error("Exception in GetNSDetail: %s", e.message)
+            return Response(data={'error': e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
 
+    @swagger_auto_schema(
+        request_body=None,
+        responses={
+            status.HTTP_204_NO_CONTENT: None,
+            status.HTTP_500_INTERNAL_SERVER_ERROR: "Inner error"
+        }
+    )
     def delete(self, request, ns_instance_id):
-        logger.debug("Enter NSDetailView::delete ns(%s)", ns_instance_id)
-        DeleteNsService(ns_instance_id).do_biz()
-        return Response(data={}, status=status.HTTP_204_NO_CONTENT)
+        try:
+            logger.debug("Enter NSDetailView::delete ns(%s)", ns_instance_id)
+            DeleteNsService(ns_instance_id).do_biz()
+            return Response(data={}, status=status.HTTP_204_NO_CONTENT)
+        except Exception as e:
+            logger.error(traceback.format_exc())
+            logger.error("Exception in delete NS: %s", e.message)
+            return Response(data={'error': e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
 
 
 class SwaggerJsonView(APIView):