CAL refactoring
[osm/SO.git] / rwcal / plugins / vala / rwcal_openstack / rift / rwcal / openstack / keystone / keystone_drv.py
1 #!/usr/bin/python
2
3 #
4 # Copyright 2017 RIFT.IO Inc
5 #
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 #
18 import logging
19 from keystoneclient import client as ksclient
20 from keystoneclient import discover
21 import keystoneclient.exceptions as KeystoneExceptions
22
23
24 class KsDrvAPIVersionException(Exception):
25 def __init__(self, errors):
26 self.errors = errors
27 super(KsDrvAPIVersionException, self).__init__("Multiple Exception Received")
28
29 def __str__(self):
30 return self.__repr__()
31
32 def __repr__(self):
33 msg = "{} : Following Exception(s) have occured during keystone API discovery".format(self.__class__)
34 for n,e in enumerate(self.errors):
35 msg += "\n"
36 msg += " {}: {}".format(n, str(e))
37 return msg
38
39 class KeystoneVersionDiscover(object):
40 """
41 Class for keystone version discovery
42 """
43 supported_versions = [(2, ), (3, )]
44
45 def __init__(self, auth_url, logger = None):
46 """
47 Constructor for class
48 Arguments
49 auth_url(string): Keystone Auth URL
50 logger (instance of logging.Logger)
51 """
52
53 if logger is None:
54 self.log = logging.getLogger('rwcal.openstack.keystone')
55 self.log.setLevel(logging.DEBUG)
56 else:
57 self.log = logger
58
59 try:
60 self._discover = discover.Discover(auth_url=auth_url)
61 except Exception as e:
62 self.log.exception(str(e))
63 self._discover = None
64 raise
65
66 def get_version(self):
67 if self._discover:
68 for v in KeystoneVersionDiscover.supported_versions:
69 try:
70 rsp = self._discover._calculate_version(v, unstable=False)
71 except KeystoneExceptions.VersionNotAvailable as e:
72 self.log.debug(str(e))
73 self.log.info("Keystone API version %d not available", v[0])
74 else:
75 (major, minor) = rsp['version']
76 self.log.info("Found Keystone API major version: %d, minor version: %d", major, minor)
77 return major, minor
78 raise KeystoneExceptions.NotFound("No supported keystone API version found")
79
80
81
82 class KeystoneDriver(object):
83 """
84 Driver class for openstack keystone
85 """
86 ### List of supported API versions in prioritized order
87 def __init__(self,
88 version,
89 sess_handle,
90 logger = None):
91 """
92 Constructor for KeystoneDriver class
93 Arguments:
94 version(str): Keystone API version
95 sess_handle (instance of class SessionDriver)
96 logger (instance of logging.Logger)
97 """
98
99 if logger is None:
100 self.log = logging.getLogger('rwcal.openstack.keystone')
101 self.log.setLevel(logging.DEBUG)
102 else:
103 self.log = logger
104
105 self._version = int(float(version))
106 self._sess = sess_handle
107 self._ks_drv = ksclient.Client(version = (self._version, ),
108 session = sess_handle.session)
109
110 @property
111 def keystone_endpoint(self):
112 return self._sess.auth_url
113
114 def _get_keystone_connection(self):
115 """
116 Returns instance of object keystoneclient.client.Client
117 Use for DEBUG ONLY
118 """
119 return self._ks_drv
120
121 def list_users(self):
122 """
123 Returns list of users
124 """
125 return self._ks_drv.users.list()
126
127 def list_projects(self):
128 """
129 Returns list of projects
130 """
131 return self._ks_drv.projects.list()
132
133 def list_roles(self):
134 """
135 Returns list of roles
136 """
137 return self._ks_drv.roles.list()
138
139 def list_regions(self):
140 """
141 Returns list of Regions
142 """
143 return self._ks_drv.regions.list()
144
145 def list_domains(self):
146 """
147 Returns list of domains
148 """
149 return self._ks_drv.domains.list()
150
151
152
153