b5db8052d8606ef4cc3c0bcaf53f743a174bd9b1
[multicloud/azure.git] / azure / azure / swagger / views / registry / views.py
1 # Copyright (c) 2018 Amdocs
2 #
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:
6 #
7 #       http://www.apache.org/licenses/LICENSE-2.0
8 #
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
13
14 import logging
15
16 from rest_framework import status
17 from rest_framework.response import Response
18 from rest_framework.views import APIView
19
20 from azure.pub.exceptions import VimDriverAzureException
21 from azure.pub.msapi import extsys
22 from azure.pub.utils.restcall import AAIClient
23
24
25 logger = logging.getLogger(__name__)
26
27
28 class Registry(APIView):
29     # def _get_tenants(self, auth_info):
30     #     tenant_instance = OperateTenant.OperateTenant()
31     #     try:
32     #         projects = tenant_instance.get_projects(auth_info)
33     #     except Exception as e:
34     #         logger.exception("get tenants error %(e)s", {"e": e})
35     #         raise e
36     #
37     #     rsp = {"tenants": []}
38     #     for project in projects:
39     #         rsp['tenants'].append(project.to_dict())
40     #     return rsp
41     #
42     # def _get_images(self, auth_info):
43     #     image_instance = OperateImage.OperateImage(auth_info)
44     #     try:
45     #         images = image_instance.get_vim_images()
46     #     except Exception as e:
47     #         logger.exception("get images error %(e)s", {"e": e})
48     #         raise e
49     #
50     #     rsp = {"images": []}
51     #     for image in images:
52     #         rsp['images'].append(image.to_dict())
53     #     return rsp
54     #
55     # def _get_flavors(self, auth_info):
56     #     flavors_op = OperateFlavors.OperateFlavors()
57     #     try:
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})
62     #         raise e
63     #
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)
69     #     return rsp
70     #
71     # def _get_networks(self, auth_info):
72     #     net_op = OperateNetwork.OperateNetwork()
73     #     try:
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})
78     #         raise e
79     #
80     #     rsp = {'networks': resp['networks']}
81     #     return rsp
82     #
83     # def _get_hypervisors(self, auth_info):
84     #     hypervisor_op = OperateHypervisor.OperateHypervisor()
85     #     try:
86     #         hypervisors = hypervisor_op.list_hypervisors(auth_info)
87     #     except Exception as e:
88     #         logger.exception("get hypervisors error %(e)s", {"e": e})
89     #         raise e
90     #
91     #     rsp = {"hypervisors": []}
92     #     for hypervisor in hypervisors:
93     #         rsp['hypervisors'].append(hypervisor.to_dict())
94     #     return rsp
95
96     def _find_tenant_id(self, name, tenants):
97         for tenant in tenants['tenants']:
98             if tenant['name'] == name:
99                 return tenant['id']
100
101     def post(self, request, vimid):
102         try:
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)
106         data = {}
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']
113
114         rsp = {}
115         # get tenants
116         try:
117             logger.debug('Getting tenants')
118             tenants = self._get_tenants(data)
119             rsp.update(tenants)
120             data['tenant'] = self._find_tenant_id(
121                 data['project_name'], tenants)
122             data['project_id'] = data['tenant']
123             # set default tenant
124             # get images
125             logger.debug('Getting images')
126             images = self._get_images(data)
127             rsp.update(images)
128             # get flavors
129             logger.debug('Getting flavors')
130             flavors = self._get_flavors(data)
131             rsp.update(flavors)
132             # get networks
133             logger.debug('Getting networks')
134             networks = self._get_networks(data)
135             rsp.update(networks)
136             # get hypervisors
137             logger.debug('Getting hypervisors')
138             hypervisors = self._get_hypervisors(data)
139             rsp.update(hypervisors)
140             # update A&AI
141             logger.debug('Put data into A&AI')
142             cloud_owner, cloud_region = extsys.split_vim_to_owner_region(
143                 vimid)
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)
149             else:
150                 return Response(data={'error': str(e)},
151                                 status=status.HTTP_500_INTERNAL_SERVER_ERROR)
152
153         return Response(data="", status=status.HTTP_200_OK)
154
155
156 class UnRegistry(APIView):
157
158     def delete(self, request, vimid):
159         try:
160             cloud_owner, cloud_region = extsys.split_vim_to_owner_region(
161                     vimid)
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)