X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=lcm%2Fns%2Fviews%2Fsol%2Finstantiate_ns_views.py;h=8b8318daabd5e8fc9b42586a6596e2a063906673;hb=0876c326a9f9809fbb35d512a4a95f9fad00e445;hp=c19becea533eacc5156dac838ba3267b41ff52f9;hpb=e5882b40abfb595499b31a1cc57884094dc072b0;p=vfc%2Fnfvo%2Flcm.git diff --git a/lcm/ns/views/sol/instantiate_ns_views.py b/lcm/ns/views/sol/instantiate_ns_views.py index c19becea..8b8318da 100644 --- a/lcm/ns/views/sol/instantiate_ns_views.py +++ b/lcm/ns/views/sol/instantiate_ns_views.py @@ -13,12 +13,59 @@ # limitations under the License. import logging +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.biz.ns_instant import InstantNSService +from lcm.ns.serializers.sol.inst_ns_serializers import InstantNsReqSerializer +from lcm.pub.exceptions import BadRequestException +from lcm.ns.const import NS_OCC_BASE_URI +from lcm.ns.serializers.sol.pub_serializers import ProblemDetailsSerializer + logger = logging.getLogger(__name__) class InstantiateNsView(APIView): + @swagger_auto_schema( + request_body=InstantNsReqSerializer(), + responses={ + status.HTTP_202_ACCEPTED: "HTTP_202_ACCEPTED", + status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer() + } + ) def post(self, request, ns_instance_id): - # todo - return + logger.debug("Enter InstantiateNsView::post::ns_instance_id=%s", ns_instance_id) + logger.debug("request.data=%s", request.data) + try: + req_serializer = InstantNsReqSerializer(data=request.data) + if not req_serializer.is_valid(): + logger.debug("request.data is not valid,error: %s" % req_serializer.errors) + raise BadRequestException(req_serializer.errors) + + InstantNsReq = request.data + if "additionalParamsForVnf" in InstantNsReq: + InstantNsReq['locationConstraints'] = [] + for additionalParamsForVnf in InstantNsReq["additionalParamsForVnf"]: + vnf = {} + vnf['vnfProfileId'] = additionalParamsForVnf['vnfProfileId'] + vnf['locationConstraints'] = {'vimId': additionalParamsForVnf['additionalParams']['vimId']} + vnf['additionalParams'] = additionalParamsForVnf['additionalParams'] + InstantNsReq['locationConstraints'].append(vnf) + + ack = InstantNSService(ns_instance_id, request.data).do_biz() + nsLcmOpOccId = ack['occ_id'] + response = Response(data={}, status=status.HTTP_202_ACCEPTED) + logger.debug("Location: %s" % ack['occ_id']) + response["Location"] = NS_OCC_BASE_URI % nsLcmOpOccId + logger.debug("Leave InstantiateNsView::post::ack=%s", ack) + return response + except BadRequestException as e: + logger.error("Exception in InstantiateNsView: %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 InstantiateNsView: %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)