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.utils import swagger_auto_schema
19 from rest_framework import status
20 from rest_framework.response import Response
21 from rest_framework.views import APIView
23 from res.pub.database.models import NfInstModel, StorageInstModel, NetworkInstModel, VLInstModel, \
24 VNFCInstModel, VmInstModel, FlavourInstModel, SubNetworkInstModel, CPInstModel
25 from res.pub.exceptions import VNFRESException
26 from res.pub.utils.syscomm import fun_name
27 from res.resources.serializers import VolumeInfoSerializer, CpsInfoSerializer, SubnetInfoSerializer, \
28 NetworkInfoSerializer, FlavorInfoSerializer, VmInfoSerializer, VnfInfoSerializer, VnfsInfoSerializer
30 logger = logging.getLogger(__name__)
33 class getVnf(APIView):
36 status.HTTP_200_OK: VnfInfoSerializer(),
37 status.HTTP_404_NOT_FOUND: 'Vnf does not exist',
38 status.HTTP_500_INTERNAL_SERVER_ERROR: 'internal error'})
39 def get(self, request, vnfInstanceId):
40 logger.debug("[%s]vnf_inst_id=%s", fun_name(), vnfInstanceId)
42 vnf_inst = NfInstModel.objects.filter(nfinstid=vnfInstanceId)
44 return Response(data={'error': 'Vnf(%s) does not exist' % vnfInstanceId}, status=status.HTTP_404_NOT_FOUND)
45 resp_data = fill_resp_data(vnf_inst[0])
47 vnfInfoSerializer = VnfInfoSerializer(data=resp_data)
48 isValid = vnfInfoSerializer.is_valid()
50 raise Exception(vnfInfoSerializer.errors)
52 return Response(data=vnfInfoSerializer.data, status=status.HTTP_200_OK)
53 except Exception as e:
54 logger.error(e.message)
55 logger.error(traceback.format_exc())
56 return Response(data={'error': 'Failed to get Vnf(%s)' % vnfInstanceId}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
59 def fill_resp_data(vnf):
60 logger.info('Get the StorageInstModel of list')
61 storage_inst = StorageInstModel.objects.filter(instid=vnf.nfinstid)
63 for s in storage_inst:
65 "virtualStorageInstanceId": s.storageid,
66 "virtualStorageDescId": s.storagetype,
69 "resourceId": s.resouceid
73 logger.info('Get the VLInstModel of list.')
74 vl_inst = VLInstModel.objects.filter(ownerid=vnf.nfinstid)
77 net = NetworkInstModel.objects.filter(networkid=v.relatednetworkid)
79 raise VNFRESException('NetworkInst(%s) does not exist.' % v.relatednetworkid)
81 "virtualLinkInstanceId": v.vlinstanceid,
82 "virtualLinkDescId": v.vldid,
84 "vimId": net[0].vimid,
85 "resourceId": net[0].resouceid
89 logger.info('Get VNFCInstModel of list.')
90 vnfc_insts = VNFCInstModel.objects.filter(instid=vnf.nfinstid)
92 for vnfc in vnfc_insts:
93 vm = VmInstModel.objects.filter(vmid=vnfc.vmid)
95 raise VNFRESException('VmInst(%s) does not exist.' % vnfc.vmid)
96 storage = StorageInstModel.objects.filter(ownerid=vm[0].vmid)
98 raise VNFRESException('StorageInst(%s) does not exist.' % vm[0].vmid)
100 "vnfcInstanceId": vnfc.vnfcinstanceid,
103 "vimId": vm[0].vimid,
104 "resourceId": vm[0].resouceid
106 "storageResourceIds": [s.storageid for s in storage]
108 vnfc_arr.append(vnfc_dic)
109 logger.info('Get the VimInstModel of list.')
110 vms = VmInstModel.objects.filter(instid=vnf.nfinstid)
112 # The 'vimInfoId' and 'vimId' each value are same
118 "resouceid": vm.resouceid,
120 "nic_array": vm.nic_array,
121 "metadata": vm.metadata,
122 "volume_array": vm.volume_array,
123 "server_group": vm.server_group,
124 "availability_zone": vm.availability_zone,
125 "flavor_id": vm.flavor_id,
126 "security_groups": vm.security_groups,
127 "operationalstate": vm.operationalstate,
128 "insttype": vm.insttype,
129 "is_predefined": vm.is_predefined,
130 "create_time": vm.create_time,
134 vm_arr.append(vm_dic)
137 "vnfInstanceId": vnf.nfinstid,
138 "vnfInstanceName": vnf.nf_name,
139 "vnfInstanceDescription": vnf.nf_desc,
140 "onboardedVnfPkgInfoId": vnf.package_id,
141 "vnfdId": vnf.vnfdid,
142 "vnfdVersion": vnf.version,
143 "vnfSoftwareVersion": vnf.vnfSoftwareVersion,
144 "vnfProvider": vnf.vendor,
145 "vnfProductName": vnf.netype,
146 "vnfConfigurableProperties": vnf.vnfConfigurableProperties,
147 "instantiationState": vnf.status,
148 "instantiatedVnfInfo": {
149 "flavourId": vnf.flavour_id,
150 "vnfState": vnf.status,
153 "extVirtualLink": [],
154 "monitoringParameters": {},
155 "localizationLanguage": vnf.localizationLanguage,
157 "vnfcResourceInfo": vnfc_arr,
158 "virtualLinkResourceInfo": vl_arr,
159 "virtualStorageResourceInfo": arr
161 "metadata": vnf.input_params,
162 "extensions": vnf.vnfd_model
167 class getVnfs(APIView):
168 @swagger_auto_schema(
170 status.HTTP_200_OK: VnfsInfoSerializer(),
171 status.HTTP_404_NOT_FOUND: 'Vnfs does not exist',
172 status.HTTP_500_INTERNAL_SERVER_ERROR: 'internal error'})
173 def get(self, request):
174 logger.debug("Query all the vnfs[%s]", fun_name())
176 vnf_insts = NfInstModel.objects.all()
178 return Response(data={'error': 'Vnfs does not exist'}, status=status.HTTP_404_NOT_FOUND)
180 for vnf_inst in vnf_insts:
181 arr.append(fill_resp_data(vnf_inst))
183 vnfsInfoSerializer = VnfsInfoSerializer(data={'resp_data': arr})
184 isValid = vnfsInfoSerializer.is_valid()
186 raise Exception(vnfsInfoSerializer.errors)
188 return Response(data=vnfsInfoSerializer.data, status=status.HTTP_200_OK)
189 except Exception as e:
190 logger.error(e.message)
191 logger.error(traceback.format_exc())
192 return Response(data={'error': 'Failed to get Vnfs'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
195 class getVms(APIView):
196 @swagger_auto_schema(
198 status.HTTP_200_OK: VmInfoSerializer(),
199 status.HTTP_404_NOT_FOUND: 'Vms does not exist',
200 status.HTTP_500_INTERNAL_SERVER_ERROR: 'internal error'})
201 def get(self, request, vnfInstanceId):
202 logger.debug("Query all the vms by vnfInstanceId[%s]", fun_name())
204 vms = VmInstModel.objects.filter(instid=vnfInstanceId)
206 return Response(data={'error': 'Vms does not exist'}, status=status.HTTP_404_NOT_FOUND)
209 arr.append(fill_vms_data(vm))
211 vmInfoSerializer = VmInfoSerializer(data={'resp_data': arr})
212 isValid = vmInfoSerializer.is_valid()
214 raise Exception(vmInfoSerializer.errors)
216 return Response(data=vmInfoSerializer.data, status=status.HTTP_200_OK)
217 except Exception as e:
218 logger.error(e.message)
219 logger.error(traceback.format_exc())
220 return Response(data={'error': 'Failed to get Vms'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
223 def fill_vms_data(vm):
227 "resouceid": vm.resouceid,
228 "insttype": vm.insttype,
231 "operationalstate": vm.operationalstate,
233 "is_predefined": vm.is_predefined,
234 "security_groups": vm.security_groups,
235 "flavor_id": vm.flavor_id,
236 "availability_zone": vm.availability_zone,
237 "server_group": vm.server_group,
238 "volume_array": vm.volume_array,
239 "metadata": vm.metadata,
240 "nic_array": vm.nic_array
245 class getFlavors(APIView):
246 @swagger_auto_schema(
248 status.HTTP_200_OK: FlavorInfoSerializer(),
249 status.HTTP_404_NOT_FOUND: 'Flavours does not exist',
250 status.HTTP_500_INTERNAL_SERVER_ERROR: 'internal error'})
251 def get(self, request, vnfInstanceId):
252 logger.debug("Query all the flavors by vnfInstanceId[%s]", fun_name())
254 flavours = FlavourInstModel.objects.filter(instid=vnfInstanceId)
256 return Response(data={'error': 'Flavours does not exist'}, status=status.HTTP_404_NOT_FOUND)
258 for flavour in flavours:
259 arr.append(fill_flavours_data(flavour))
261 flavorInfoSerializer = FlavorInfoSerializer(data={'resp_data': arr})
262 isValid = flavorInfoSerializer.is_valid()
264 raise Exception(flavorInfoSerializer.errors)
266 return Response(data=flavorInfoSerializer.data, status=status.HTTP_200_OK)
267 except Exception as e:
268 logger.error(e.message)
269 logger.error(traceback.format_exc())
270 return Response(data={'error': 'Failed to get flavours'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
273 def fill_flavours_data(f):
275 "flavourid": f.flavourid,
279 "extraspecs": f.extraspecs,
283 "resouceid": f.resouceid,
284 "create_time": f.create_time
289 class getNetworks(APIView):
290 @swagger_auto_schema(
292 status.HTTP_200_OK: NetworkInfoSerializer(),
293 status.HTTP_404_NOT_FOUND: 'Networks does not exist',
294 status.HTTP_500_INTERNAL_SERVER_ERROR: 'internal error'})
295 def get(self, request, vnfInstanceId):
296 logger.debug("Query all the networks by vnfInstanceId[%s]", fun_name())
298 networks = NetworkInstModel.objects.filter(instid=vnfInstanceId)
300 return Response(data={'error': 'Networks does not exist'}, status=status.HTTP_404_NOT_FOUND)
302 for network in networks:
303 arr.append(fill_networks_data(network))
305 networkInfoSerializer = NetworkInfoSerializer(data={'resp_data': arr})
306 isValid = networkInfoSerializer.is_valid()
308 raise Exception(networkInfoSerializer.errors)
310 return Response(data=networkInfoSerializer.data, status=status.HTTP_200_OK)
311 except Exception as e:
312 logger.error(e.message)
313 logger.error(traceback.format_exc())
314 return Response(data={'error': 'Failed to get networks'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
317 def fill_networks_data(network):
319 "networkid": network.networkid,
320 "vimid": network.vimid,
321 "resouceid": network.resouceid,
322 "insttype": network.insttype,
323 "instid": network.instid,
329 class getSubnets(APIView):
330 @swagger_auto_schema(
332 status.HTTP_200_OK: SubnetInfoSerializer(),
333 status.HTTP_404_NOT_FOUND: 'Subnets does not exist',
334 status.HTTP_500_INTERNAL_SERVER_ERROR: 'internal error'})
335 def get(self, request, vnfInstanceId):
336 logger.debug("Query all the subnets by vnfInstanceId[%s]", fun_name())
338 subnets = SubNetworkInstModel.objects.filter(instid=vnfInstanceId)
340 return Response(data={'error': 'Subnets does not exist'}, status=status.HTTP_404_NOT_FOUND)
342 for subnet in subnets:
343 arr.append(fill_subnets_data(subnet))
344 subnetInfoSerializer = SubnetInfoSerializer(data={'resp_data': arr})
345 isValid = subnetInfoSerializer.is_valid()
347 raise Exception(subnetInfoSerializer.errors)
349 return Response(data=subnetInfoSerializer.data, status=status.HTTP_200_OK)
350 except Exception as e:
351 logger.error(e.message)
352 logger.error(traceback.format_exc())
353 return Response(data={'error': 'Failed to get subnets'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
356 def fill_subnets_data(subnet):
358 "subnetworkid": subnet.subnetworkid,
359 "vimid": subnet.vimid,
360 "resouceid": subnet.resouceid,
361 "networkid": subnet.networkid,
362 "insttype": subnet.insttype,
363 "instid": subnet.instid,
370 class getCps(APIView):
371 @swagger_auto_schema(
373 status.HTTP_200_OK: CpsInfoSerializer(),
374 status.HTTP_404_NOT_FOUND: 'Cps does not exist',
375 status.HTTP_500_INTERNAL_SERVER_ERROR: 'internal error'})
376 def get(self, request, vnfInstanceId):
377 logger.debug("Query all the cps by vnfInstanceId[%s]", fun_name())
379 cps = CPInstModel.objects.filter(ownerid=vnfInstanceId)
381 return Response(data={'error': 'Cps does not exist'}, status=status.HTTP_404_NOT_FOUND)
384 arr.append(fill_cps_data(cp))
385 cpInfoSerializer = CpsInfoSerializer(data={'resp_data': arr})
386 isValid = cpInfoSerializer.is_valid()
388 raise Exception(cpInfoSerializer.errors)
390 return Response(data=cpInfoSerializer.data, status=status.HTTP_200_OK)
391 except Exception as e:
392 logger.error(e.message)
393 logger.error(traceback.format_exc())
394 return Response(data={'error': 'Failed to get cps'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
397 def fill_cps_data(cp):
399 "cpinstanceid": cp.cpinstanceid,
401 "cpinstancename": cp.cpinstancename,
402 "vlinstanceid": cp.vlinstanceid,
403 "ownertype": cp.ownertype,
404 "ownerid": cp.ownerid,
405 "relatedtype": cp.relatedtype
410 class getVolumes(APIView):
411 @swagger_auto_schema(
413 status.HTTP_200_OK: VolumeInfoSerializer(),
414 status.HTTP_404_NOT_FOUND: 'Volumes does not exist',
415 status.HTTP_500_INTERNAL_SERVER_ERROR: 'internal error'})
416 def get(self, request, vnfInstanceId):
417 logger.debug("Query all the volumes by vnfInstanceId[%s]", fun_name())
419 volumes = StorageInstModel.objects.filter(instid=vnfInstanceId)
421 return Response(data={'error': 'Volumes does not exist'}, status=status.HTTP_404_NOT_FOUND)
424 arr.append(fill_volumes_data(v))
425 volumeSerializer = VolumeInfoSerializer(data={'resp_data': arr})
426 isValid = volumeSerializer.is_valid()
428 raise Exception(volumeSerializer.errors)
430 return Response(data=volumeSerializer.data, status=status.HTTP_200_OK)
431 except Exception as e:
432 logger.error(e.message)
433 logger.error(traceback.format_exc())
434 return Response(data={'error': 'Failed to get volumes'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
437 def fill_volumes_data(v):
439 "storageid": v.storageid,
441 "resouceid": v.resouceid,
442 "insttype": v.insttype,
444 "storagetype": v.storagetype,