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.
17 from catalog.pub.utils.syscomm import fun_name
18 from rest_framework.response import Response
19 from rest_framework import status
20 from rest_framework.decorators import api_view
21 from catalog.pub.utils.values import ignore_case_get
22 from catalog.packages import nf_package
23 from catalog.packages import ns_package
24 from catalog.serializers import NsPackagesSerializer
25 from catalog.serializers import NsPackageSerializer
26 from catalog.serializers import NfPackagesSerializer
27 from catalog.serializers import NsPackageDistributeRequestSerializer
28 from catalog.serializers import NsPackageDistributeResponseSerializer
29 from catalog.serializers import NfPackageDistributeRequestSerializer
30 from catalog.serializers import NfPackageSerializer
31 from catalog.serializers import ParseModelRequestSerializer
32 from catalog.serializers import ParseModelResponseSerializer
33 from catalog.serializers import InternalErrorRequestSerializer
34 from catalog.serializers import PostJobResponseSerializer
35 from drf_yasg import openapi
36 from drf_yasg.utils import no_body, swagger_auto_schema
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: openapi.Response(
166 'Delete CSAR successfully',
168 type=openapi.TYPE_STRING)),
169 status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response(
172 type=openapi.TYPE_STRING))})
173 @swagger_auto_schema(
175 operation_description="Query one NS package",
176 request_body=no_body,
182 type=openapi.TYPE_STRING)],
184 status.HTTP_200_OK: NsPackageSerializer,
185 status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response(
188 type=openapi.TYPE_STRING))})
189 @api_view(http_method_names=['DELETE', 'GET'])
190 def ns_rd_csar(request, *args, **kwargs):
191 csar_id = ignore_case_get(kwargs, "csarId")
192 logger.info("Enter %s, method is %s, csar_id is %s",
193 fun_name(), request.method, csar_id)
194 ret, normal_status, response_serializer, validation_error = None, None, None, None
195 if request.method == 'GET':
196 ret = ns_package.ns_get_csar(csar_id)
197 normal_status = status.HTTP_200_OK
199 response_serializer = NsPackageSerializer(data=ret[1])
200 validation_error = handleValidatonError(response_serializer, False)
202 return validation_error
203 elif request.method == 'DELETE':
204 ret = ns_package.ns_delete_csar(csar_id)
205 normal_status = status.HTTP_202_ACCEPTED
206 logger.info("Leave %s, Return value is %s", fun_name(), ret)
211 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
212 return Response(data=ret[1], status=normal_status)
215 @swagger_auto_schema(
217 operation_description="Delete one Nf package",
218 request_body=no_body,
224 type=openapi.TYPE_STRING)],
226 status.HTTP_200_OK: PostJobResponseSerializer,
227 status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response(
230 type=openapi.TYPE_STRING))})
231 @swagger_auto_schema(
233 operation_description="Query one Nf package",
234 request_body=no_body,
240 type=openapi.TYPE_STRING)],
242 status.HTTP_200_OK: NfPackageSerializer,
243 status.HTTP_500_INTERNAL_SERVER_ERROR: openapi.Response(
246 type=openapi.TYPE_STRING))})
247 @api_view(http_method_names=['DELETE', 'GET'])
248 def nf_rd_csar(request, *args, **kwargs):
249 csar_id = ignore_case_get(kwargs, "csarId")
250 logger.info("Enter %s, method is %s, csar_id is %s",
251 fun_name(), request.method, csar_id)
252 ret, normal_status, response_serializer, validation_error = None, None, None, None
254 if request.method == 'GET':
255 ret = nf_package.nf_get_csar(csar_id)
256 normal_status = status.HTTP_200_OK
257 response_serializer = NfPackageSerializer(data=ret[1])
259 elif request.method == 'DELETE':
260 job_id = str(uuid.uuid4())
261 nf_package.NfPkgDeleteThread(csar_id, job_id).start()
262 ret = [0, {"jobId": job_id}]
263 normal_status = status.HTTP_202_ACCEPTED
264 response_serializer = PostJobResponseSerializer(data=ret[1])
266 logger.info("Leave %s, Return value is %s", fun_name(), ret)
271 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
273 validation_error = handleValidatonError(
274 response_serializer, False)
276 return validation_error
278 return Response(data=response_serializer.data, status=normal_status)
281 @swagger_auto_schema(
283 operation_description="Parse NS model",
284 request_body=ParseModelRequestSerializer,
286 status.HTTP_202_ACCEPTED: ParseModelResponseSerializer,
287 status.HTTP_500_INTERNAL_SERVER_ERROR: InternalErrorRequestSerializer})
288 @api_view(http_method_names=['POST'])
289 def ns_model_parser(request, *args, **kwargs):
290 csar_id = ignore_case_get(request.data, "csarId")
291 inputs = ignore_case_get(request.data, "inputs")
293 "Enter %s, csar_id=%s, inputs=%s",
297 ret = ns_package.parse_nsd(csar_id, inputs)
298 logger.info("Leave %s, Return value is %s", fun_name(), ret)
303 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
305 response_serializer = ParseModelResponseSerializer(data=ret[1])
306 validation_error = handleValidatonError(
307 response_serializer, False)
309 return validation_error
311 return Response(data=response_serializer.data, status=status.HTTP_202_ACCEPTED)
314 @swagger_auto_schema(
316 operation_description="Parse NF model",
317 request_body=ParseModelRequestSerializer,
319 status.HTTP_202_ACCEPTED: ParseModelResponseSerializer,
320 status.HTTP_500_INTERNAL_SERVER_ERROR: InternalErrorRequestSerializer})
321 @api_view(http_method_names=['POST'])
322 def vnf_model_parser(request, *args, **kwargs):
323 csar_id = ignore_case_get(request.data, "csarId")
324 inputs = ignore_case_get(request.data, "inputs")
326 "Enter %s, csar_id=%s, inputs=%s",
330 ret = nf_package.parse_vnfd(csar_id, inputs)
331 logger.info("Leave %s, Return value is %s", fun_name(), ret)
336 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
338 response_serializer = ParseModelResponseSerializer(data=ret[1])
339 validation_error = handleValidatonError(
340 response_serializer, False)
342 return validation_error
344 return Response(data=response_serializer.data, status=status.HTTP_202_ACCEPTED)
347 def handleValidatonError(base_serializer, is_request):
350 if not base_serializer.is_valid():
351 errormessage = base_serializer.errors
352 logger.error(errormessage)
355 message = 'Invalid request'
357 message = 'Invalid response'
358 logger.error(message)
360 data={'error': errormessage},
361 status=status.HTTP_500_INTERNAL_SERVER_ERROR)