diff options
-rw-r--r-- | lcm/ns/serializers.py | 6 | ||||
-rw-r--r-- | lcm/ns/tests/test_ns_heal.py | 3 | ||||
-rw-r--r-- | lcm/ns/views.py | 28 |
3 files changed, 28 insertions, 9 deletions
diff --git a/lcm/ns/serializers.py b/lcm/ns/serializers.py index 644f1329..9861e713 100644 --- a/lcm/ns/serializers.py +++ b/lcm/ns/serializers.py @@ -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) diff --git a/lcm/ns/tests/test_ns_heal.py b/lcm/ns/tests/test_ns_heal.py index 46f13ce6..a3b8498e 100644 --- a/lcm/ns/tests/test_ns_heal.py +++ b/lcm/ns/tests/test_ns_heal.py @@ -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) diff --git a/lcm/ns/views.py b/lcm/ns/views.py index 6b14f584..23c3adc9 100644 --- a/lcm/ns/views.py +++ b/lcm/ns/views.py @@ -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,18 +157,33 @@ 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): |