1 # Copyright 2017 ZTE Corporation.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
18 from drf_yasg import openapi
19 from drf_yasg.utils import no_body, swagger_auto_schema
20 from rest_framework import status
21 from rest_framework.decorators import api_view
22 from rest_framework.response import Response
24 from catalog.packages.biz import nf_package, ns_package
25 from catalog.packages.serializers.catalog_serializers import InternalErrorRequestSerializer
26 from catalog.packages.serializers.catalog_serializers import NfPackageDistributeRequestSerializer
27 from catalog.packages.serializers.catalog_serializers import NfPackageSerializer
28 from catalog.packages.serializers.catalog_serializers import NfPackagesSerializer
29 from catalog.packages.serializers.catalog_serializers import NsPackageDistributeRequestSerializer
30 from catalog.packages.serializers.catalog_serializers import NsPackageDistributeResponseSerializer
31 from catalog.packages.serializers.catalog_serializers import NsPackageSerializer
32 from catalog.packages.serializers.catalog_serializers import NsPackagesSerializer
33 from catalog.packages.serializers.catalog_serializers import ParseModelRequestSerializer
34 from catalog.packages.serializers.catalog_serializers import ParseModelResponseSerializer
35 from catalog.packages.serializers.catalog_serializers import PostJobResponseSerializer
36 from catalog.pub.utils.syscomm import fun_name
37 from catalog.pub.utils.values import ignore_case_get
39 logger = logging.getLogger(__name__)
44 operation_description="On distribute NS package",
45 request_body=NsPackageDistributeRequestSerializer,
47 status.HTTP_202_ACCEPTED: NsPackageDistributeResponseSerializer,
48 status.HTTP_500_INTERNAL_SERVER_ERROR: InternalErrorRequestSerializer})
51 operation_description="Query NS packages",
54 status.HTTP_200_OK: NsPackagesSerializer,
55 status.HTTP_500_INTERNAL_SERVER_ERROR: InternalErrorRequestSerializer})
56 @api_view(http_method_names=['POST', 'GET'])
57 def nspackages_rc(request, *args, **kwargs):
58 logger.debug("Enter %s, method is %s", fun_name(), request.method)
59 ret, normal_status, response_serializer, validation_error = None, None, None, None
61 if request.method == 'GET':
62 # Gets ns package list
63 ret = ns_package.ns_get_csars()
64 normal_status = status.HTTP_200_OK
67 response_serializer = NsPackagesSerializer(data=ret[1])
68 validation_error = handleValidatonError(
69 response_serializer, False)
71 return validation_error
72 elif request.method == 'POST':
73 # Distributes the package accroding to the given csarId
74 request_serializer = NsPackageDistributeRequestSerializer(data=request.data)
75 validation_error = handleValidatonError(request_serializer, True)
77 return validation_error
79 csar_id = ignore_case_get(request.data, "csarId")
80 logger.debug("csar_id is %s", csar_id)
81 ret = ns_package.ns_on_distribute(csar_id)
82 normal_status = status.HTTP_202_ACCEPTED
84 logger.debug("Leave %s, Return value is %s", fun_name(), ret)
89 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
91 return Response(data=ret[1], status=normal_status)
96 operation_description="On distribute Nf package",
97 request_body=NfPackageDistributeRequestSerializer(),
99 status.HTTP_202_ACCEPTED: PostJobResponseSerializer,
100 status.HTTP_500_INTERNAL_SERVER_ERROR: InternalErrorRequestSerializer})
101 @swagger_auto_schema(
103 operation_description="Query Nf packages",
104 request_body=no_body,
106 status.HTTP_200_OK: NfPackagesSerializer,
107 status.HTTP_500_INTERNAL_SERVER_ERROR: InternalErrorRequestSerializer})
108 @api_view(http_method_names=['POST', 'GET'])
109 def nfpackages_rc(request, *args, **kwargs):
111 "Enter %s%s, method is %s",
115 ret, normal_status, response_serializer, validation_error = None, None, None, None
116 if request.method == 'GET':
117 ret = nf_package.nf_get_csars()
118 normal_status = status.HTTP_200_OK
119 response_serializer = NfPackagesSerializer(data=ret[1])
120 elif request.method == 'POST':
121 request_serivalizer = NfPackageDistributeRequestSerializer(
123 validation_error = handleValidatonError(
124 request_serivalizer, True)
126 return validation_error
128 csar_id = ignore_case_get(request_serivalizer.data, "csarId")
129 vim_ids = ignore_case_get(request_serivalizer.data, "vimIds")
130 lab_vim_id = ignore_case_get(request_serivalizer.data, "labVimId")
131 job_id = str(uuid.uuid4())
132 nf_package.NfDistributeThread(
133 csar_id, vim_ids, lab_vim_id, job_id).start()
134 ret = [0, {"jobId": job_id}]
135 normal_status = status.HTTP_202_ACCEPTED
137 response_serializer = PostJobResponseSerializer(data=ret[1])
138 logger.debug("Leave %s, Return value is %s", fun_name(), ret)
144 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
146 validation_error = handleValidatonError(
147 response_serializer, False)
149 return validation_error
151 return Response(data=response_serializer.data, status=normal_status)
154 @swagger_auto_schema(
156 operation_description="Delete one NS package",
157 request_body=no_body,
163 type=openapi.TYPE_STRING)],
165 status.HTTP_200_OK: NsPackageDistributeResponseSerializer,
166 status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response(
169 type=openapi.TYPE_STRING))})
170 @swagger_auto_schema(
172 operation_description="Query one NS package",
173 request_body=no_body,
179 type=openapi.TYPE_STRING)],
181 status.HTTP_200_OK: NsPackageSerializer,
182 status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response(
185 type=openapi.TYPE_STRING))})
186 @api_view(http_method_names=['DELETE', 'GET'])
187 def ns_rd_csar(request, *args, **kwargs):
188 csar_id = ignore_case_get(kwargs, "csarId")
189 logger.info("Enter %s, method is %s, csar_id is %s",
190 fun_name(), request.method, csar_id)
191 ret, normal_status, response_serializer, validation_error = None, None, None, None
192 if request.method == 'GET':
193 ret = ns_package.ns_get_csar(csar_id)
194 normal_status = status.HTTP_200_OK
196 response_serializer = NsPackageSerializer(data=ret[1])
197 validation_error = handleValidatonError(response_serializer, False)
199 return validation_error
200 elif request.method == 'DELETE':
201 ret = ns_package.ns_delete_csar(csar_id)
202 normal_status = status.HTTP_200_OK
203 logger.info("Leave %s, Return value is %s", fun_name(), ret)
208 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
209 return Response(data=ret[1], status=normal_status)
212 @swagger_auto_schema(
214 operation_description="Delete one Nf package",
215 request_body=no_body,
221 type=openapi.TYPE_STRING)],
223 status.HTTP_202_ACCEPTED: PostJobResponseSerializer,
224 status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response(
227 type=openapi.TYPE_STRING))})
228 @swagger_auto_schema(
230 operation_description="Query one Nf package",
231 request_body=no_body,
237 type=openapi.TYPE_STRING)],
239 status.HTTP_200_OK: NfPackageSerializer,
240 status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response(
243 type=openapi.TYPE_STRING))})
244 @api_view(http_method_names=['DELETE', 'GET'])
245 def nf_rd_csar(request, *args, **kwargs):
246 csar_id = ignore_case_get(kwargs, "csarId")
247 logger.info("Enter %s, method is %s, csar_id is %s",
248 fun_name(), request.method, csar_id)
249 ret, normal_status, response_serializer, validation_error = None, None, None, None
251 if request.method == 'GET':
252 ret = nf_package.nf_get_csar(csar_id)
253 normal_status = status.HTTP_200_OK
254 response_serializer = NfPackageSerializer(data=ret[1])
256 elif request.method == 'DELETE':
257 job_id = str(uuid.uuid4())
258 nf_package.NfPkgDeleteThread(csar_id, job_id).start()
259 ret = [0, {"jobId": job_id}]
260 normal_status = status.HTTP_202_ACCEPTED
261 response_serializer = PostJobResponseSerializer(data=ret[1])
263 logger.info("Leave %s, Return value is %s", fun_name(), ret)
268 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
270 validation_error = handleValidatonError(
271 response_serializer, False)
273 return validation_error
275 return Response(data=response_serializer.data, status=normal_status)
278 @swagger_auto_schema(
280 operation_description="Parse NS model",
281 request_body=ParseModelRequestSerializer,
283 status.HTTP_202_ACCEPTED: ParseModelResponseSerializer,
284 status.HTTP_500_INTERNAL_SERVER_ERROR: InternalErrorRequestSerializer})
285 @api_view(http_method_names=['POST'])
286 def ns_model_parser(request, *args, **kwargs):
287 csar_id = ignore_case_get(request.data, "csarId")
288 inputs = ignore_case_get(request.data, "inputs")
290 "Enter %s, csar_id=%s, inputs=%s",
294 ret = ns_package.parse_nsd(csar_id, inputs)
295 logger.info("Leave %s, Return value is %s", fun_name(), ret)
300 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
302 response_serializer = ParseModelResponseSerializer(data=ret[1])
303 validation_error = handleValidatonError(
304 response_serializer, False)
306 return validation_error
308 return Response(data=response_serializer.data, status=status.HTTP_202_ACCEPTED)
311 @swagger_auto_schema(
313 operation_description="Parse NF model",
314 request_body=ParseModelRequestSerializer,
316 status.HTTP_202_ACCEPTED: ParseModelResponseSerializer,
317 status.HTTP_500_INTERNAL_SERVER_ERROR: InternalErrorRequestSerializer})
318 @api_view(http_method_names=['POST'])
319 def vnf_model_parser(request, *args, **kwargs):
320 csar_id = ignore_case_get(request.data, "csarId")
321 inputs = ignore_case_get(request.data, "inputs")
323 "Enter %s, csar_id=%s, inputs=%s",
327 ret = nf_package.parse_vnfd(csar_id, inputs)
328 logger.info("Leave %s, Return value is %s", fun_name(), ret)
333 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
335 response_serializer = ParseModelResponseSerializer(data=ret[1])
336 validation_error = handleValidatonError(
337 response_serializer, False)
339 return validation_error
341 return Response(data=response_serializer.data, status=status.HTTP_202_ACCEPTED)
344 def handleValidatonError(base_serializer, is_request):
347 if not base_serializer.is_valid():
348 errormessage = base_serializer.errors
349 logger.error(errormessage)
352 message = 'Invalid request'
354 message = 'Invalid response'
355 logger.error(message)
357 data={'error': errormessage},
358 status=status.HTTP_500_INTERNAL_SERVER_ERROR)