1 # Copyright (c) 2018 Amdocs
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.
16 from rest_framework import status
17 from rest_framework.response import Response
18 from rest_framework.views import APIView
20 from azure.pub.exceptions import VimDriverAzureException
21 from azure.pub.msapi import extsys
22 from azure.pub.utils.restcall import AAIClient
25 logger = logging.getLogger(__name__)
28 class Registry(APIView):
29 # def _get_tenants(self, auth_info):
30 # tenant_instance = OperateTenant.OperateTenant()
32 # projects = tenant_instance.get_projects(auth_info)
33 # except Exception as e:
34 # logger.exception("get tenants error %(e)s", {"e": e})
37 # rsp = {"tenants": []}
38 # for project in projects:
39 # rsp['tenants'].append(project.to_dict())
42 # def _get_images(self, auth_info):
43 # image_instance = OperateImage.OperateImage(auth_info)
45 # images = image_instance.get_vim_images()
46 # except Exception as e:
47 # logger.exception("get images error %(e)s", {"e": e})
50 # rsp = {"images": []}
51 # for image in images:
52 # rsp['images'].append(image.to_dict())
55 # def _get_flavors(self, auth_info):
56 # flavors_op = OperateFlavors.OperateFlavors()
58 # flavors = flavors_op.list_flavors(
59 # auth_info, auth_info['tenant'])
60 # except Exception as e:
61 # logger.exception("get flavors error %(e)s", {"e": e})
64 # rsp = {"flavors": []}
65 # for flavor in flavors:
66 # flavor_info = flavor[0].to_dict()
67 # flavor_info['extra_specs'] = flavor[1].extra_specs
68 # rsp['flavors'].append(flavor_info)
71 # def _get_networks(self, auth_info):
72 # net_op = OperateNetwork.OperateNetwork()
74 # resp = net_op.list_networks(
75 # auth_info['vimId'], auth_info['tenant'])
76 # except Exception as e:
77 # logger.exception("get networks error %(e)s", {"e": e})
80 # rsp = {'networks': resp['networks']}
83 # def _get_hypervisors(self, auth_info):
84 # hypervisor_op = OperateHypervisor.OperateHypervisor()
86 # hypervisors = hypervisor_op.list_hypervisors(auth_info)
87 # except Exception as e:
88 # logger.exception("get hypervisors error %(e)s", {"e": e})
91 # rsp = {"hypervisors": []}
92 # for hypervisor in hypervisors:
93 # rsp['hypervisors'].append(hypervisor.to_dict())
96 def _find_tenant_id(self, name, tenants):
97 for tenant in tenants['tenants']:
98 if tenant['name'] == name:
101 def post(self, request, vimid):
103 vim_info = extsys.get_vim_by_id(vimid)
104 except VimDriverAzureException as e:
105 return Response(data={'error': str(e)}, status=e.status_code)
107 data['vimId'] = vim_info['vimId']
108 data['username'] = vim_info['userName']
109 data['userName'] = vim_info['userName']
110 data['password'] = vim_info['password']
111 data['url'] = vim_info['url']
112 data['project_name'] = vim_info['tenant']
117 logger.debug('Getting tenants')
118 tenants = self._get_tenants(data)
120 data['tenant'] = self._find_tenant_id(
121 data['project_name'], tenants)
122 data['project_id'] = data['tenant']
125 logger.debug('Getting images')
126 images = self._get_images(data)
129 logger.debug('Getting flavors')
130 flavors = self._get_flavors(data)
133 logger.debug('Getting networks')
134 networks = self._get_networks(data)
137 logger.debug('Getting hypervisors')
138 hypervisors = self._get_hypervisors(data)
139 rsp.update(hypervisors)
141 logger.debug('Put data into A&AI')
142 cloud_owner, cloud_region = extsys.split_vim_to_owner_region(
144 aai_adapter = AAIClient(cloud_owner, cloud_region)
145 aai_adapter.update_vim(rsp)
146 except Exception as e:
147 if hasattr(e, "http_status"):
148 return Response(data={'error': str(e)}, status=e.http_status)
150 return Response(data={'error': str(e)},
151 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
153 return Response(data="", status=status.HTTP_200_OK)
156 class UnRegistry(APIView):
158 def delete(self, request, vimid):
160 cloud_owner, cloud_region = extsys.split_vim_to_owner_region(
162 aai_adapter = AAIClient(cloud_owner, cloud_region)
163 aai_adapter.delete_vim()
164 except Exception as e:
165 return Response(data=e.message,
166 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
167 return Response(data="", status=status.HTTP_204_NO_CONTENT)