X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=lcm%2Fns%2Fviews%2Fsol%2Fns_instances_views.py;h=6fcae3ffb0ed880e55864b6f528b58521d832702;hb=0876c326a9f9809fbb35d512a4a95f9fad00e445;hp=60683ec8d611cbb4cd4fe8eca8a11bac209ce5e2;hpb=a42b1d5797a2ae3fd6942afce23dae676f9f462e;p=vfc%2Fnfvo%2Flcm.git diff --git a/lcm/ns/views/sol/ns_instances_views.py b/lcm/ns/views/sol/ns_instances_views.py index 60683ec8..6fcae3ff 100644 --- a/lcm/ns/views/sol/ns_instances_views.py +++ b/lcm/ns/views/sol/ns_instances_views.py @@ -13,14 +13,21 @@ # limitations under the License. import logging +import traceback from drf_yasg.utils import swagger_auto_schema from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView -from lcm.ns.serializers.sol.create_ns_serializers import CreateNsRequestSerializer, CreateNsRespSerializer -from lcm.ns.serializers.sol.pub_serializers import QueryNsRespSerializer +from lcm.ns.serializers.sol.create_ns_serializers import CreateNsRequestSerializer +from lcm.ns.serializers.sol.ns_instance import NsInstanceSerializer +from lcm.pub.exceptions import BadRequestException, NSLCMException +from lcm.pub.utils.values import ignore_case_get +from lcm.ns.biz.ns_create import CreateNSService +from lcm.ns.biz.ns_get import GetNSInfoService +from lcm.ns.biz.ns_delete import DeleteNsService +from lcm.ns.const import NS_INSTANCE_BASE_URI logger = logging.getLogger(__name__) @@ -29,40 +36,115 @@ class NSInstancesView(APIView): @swagger_auto_schema( request_body=None, responses={ - status.HTTP_200_OK: QueryNsRespSerializer(help_text="NS instances", many=True), + status.HTTP_200_OK: NsInstanceSerializer(help_text="NS instances", many=True), status.HTTP_500_INTERNAL_SERVER_ERROR: "Inner error" } ) def get(self, request): logger.debug(request.query_params) - # todo + try: + logger.debug("CreateNSView::get") + ret = GetNSInfoService().get_ns_info(is_sol=True) # todo + logger.debug("CreateNSView::get::ret=%s", ret) + resp_serializer = NsInstanceSerializer(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 GetNS: %s", e.message) + data = {'status': status.HTTP_500_INTERNAL_SERVER_ERROR, 'detail': e.message} + return Response(data=data, status=status.HTTP_500_INTERNAL_SERVER_ERROR) @swagger_auto_schema( request_body=CreateNsRequestSerializer(), responses={ - status.HTTP_201_CREATED: CreateNsRespSerializer(), + status.HTTP_201_CREATED: NsInstanceSerializer(), status.HTTP_500_INTERNAL_SERVER_ERROR: "Inner error" } ) def post(self, request): - logger.debug("Enter NSInstancesView::POST ns_instances %s", request.data) - # todo - return Response(data={}, status=status.HTTP_201_CREATED) + logger.debug("Enter NSInstancesView::POST ns_instances: Header:%s, Body: %s" % (request.META, request.data)) + try: + globalCustomerId = request.META.get("HTTP_GLOBALCUSTOMERID", None) + if not globalCustomerId: + raise BadRequestException("Not found globalCustomerId in header") + serviceType = request.META.get("HTTP_SERVICETYPE", None) + if not serviceType: + serviceType = "NetworkService" + req_serializer = CreateNsRequestSerializer(data=request.data) + if not req_serializer.is_valid(): + raise BadRequestException(req_serializer.errors) + if ignore_case_get(request.data, 'test') == "test": + return Response(data={'nsInstanceId': "test"}, status=status.HTTP_201_CREATED) + csar_id = ignore_case_get(request.data, 'nsdId') + ns_name = ignore_case_get(request.data, 'nsName') + description = ignore_case_get(request.data, 'nsDescription') + context = { + "globalCustomerId": globalCustomerId, + "serviceType": serviceType + } + ns_inst_id = CreateNSService(csar_id, ns_name, description, context).do_biz() + logger.debug("CreateNSView::post::ret={'nsInstanceId':%s}", ns_inst_id) + ns_filter = {"ns_inst_id": ns_inst_id} + nsInstance = GetNSInfoService(ns_filter).get_ns_info(is_sol=True)[0] + logger.debug("nsInstance: %s" % nsInstance) + resp_serializer = NsInstanceSerializer(data=nsInstance) + if not resp_serializer.is_valid(): + raise NSLCMException(resp_serializer.errors) + response = Response(data=resp_serializer.data, status=status.HTTP_201_CREATED) + response["Location"] = NS_INSTANCE_BASE_URI % nsInstance['id'] + return response + except BadRequestException as e: + logger.error("Exception in CreateNS: %s", e.message) + data = {'status': status.HTTP_400_BAD_REQUEST, 'detail': e.message} + return Response(data=data, status=status.HTTP_400_BAD_REQUEST) + except Exception as e: + logger.error("Exception in CreateNS: %s", e.message) + data = {'status': status.HTTP_500_INTERNAL_SERVER_ERROR, 'detail': e.message} + return Response(data=data, status=status.HTTP_500_INTERNAL_SERVER_ERROR) class IndividualNsInstanceView(APIView): - def get(self, request, id): - logger.debug("Enter IndividualNsInstanceView::get ns(%s)", id) - # todo - return Response(data={}, status=status.HTTP_200_OK) + @swagger_auto_schema( + request_body=None, + responses={ + status.HTTP_200_OK: NsInstanceSerializer(help_text="NS instances", many=False), + status.HTTP_500_INTERNAL_SERVER_ERROR: "Inner error" + } + ) + def get(self, request, ns_instance_id): + 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(is_sol=True) + if not ret: + data = {'status': status.HTTP_404_NOT_FOUND, 'detail': "NS Instance ID(%s) is not founded" % ns_instance_id} + return Response(data=data, status=status.HTTP_404_NOT_FOUND) + logger.debug("Leave NSDetailView::get::ret=%s", ret) + resp_serializer = NsInstanceSerializer(data=ret[0]) + 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) + data = {'status': status.HTTP_500_INTERNAL_SERVER_ERROR, 'detail': e.message} + return Response(data=data, status=status.HTTP_500_INTERNAL_SERVER_ERROR) @swagger_auto_schema( request_body=None, responses={ - status.HTTP_204_NO_CONTENT: None + status.HTTP_204_NO_CONTENT: "HTTP_204_NO_CONTENT" } ) - def delete(self, request, id): - logger.debug("Enter IndividualNsInstanceView::DELETE ns_instance(%s)", id) - # todo - return Response(data={}, status=status.HTTP_204_NO_CONTENT) + def delete(self, request, ns_instance_id): + 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) + data = {'status': status.HTTP_500_INTERNAL_SERVER_ERROR, 'detail': e.message} + return Response(data=data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)