4 # Copyright 2017 RIFT.IO Inc
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
10 # http://www.apache.org/licenses/LICENSE-2.0
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.
19 from keystoneclient
import client
as ksclient
20 from keystoneclient
import discover
21 import keystoneclient
.exceptions
as KeystoneExceptions
24 class KsDrvAPIVersionException(Exception):
25 def __init__(self
, errors
):
27 super(KsDrvAPIVersionException
, self
).__init
__("Multiple Exception Received")
30 return self
.__repr
__()
33 msg
= "{} : Following Exception(s) have occured during keystone API discovery".format(self
.__class
__)
34 for n
,e
in enumerate(self
.errors
):
36 msg
+= " {}: {}".format(n
, str(e
))
39 class KeystoneVersionDiscover(object):
41 Class for keystone version discovery
43 supported_versions
= [(2, ), (3, )]
45 def __init__(self
, auth_url
, logger
= None):
49 auth_url(string): Keystone Auth URL
50 logger (instance of logging.Logger)
54 self
.log
= logging
.getLogger('rwcal.openstack.keystone')
55 self
.log
.setLevel(logging
.DEBUG
)
60 self
._discover
= discover
.Discover(auth_url
=auth_url
)
61 except Exception as e
:
62 self
.log
.exception(str(e
))
66 def get_version(self
):
68 for v
in KeystoneVersionDiscover
.supported_versions
:
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])
75 (major
, minor
) = rsp
['version']
76 self
.log
.info("Found Keystone API major version: %d, minor version: %d", major
, minor
)
78 raise KeystoneExceptions
.NotFound("No supported keystone API version found")
82 class KeystoneDriver(object):
84 Driver class for openstack keystone
86 ### List of supported API versions in prioritized order
92 Constructor for KeystoneDriver class
94 version(str): Keystone API version
95 sess_handle (instance of class SessionDriver)
96 logger (instance of logging.Logger)
100 self
.log
= logging
.getLogger('rwcal.openstack.keystone')
101 self
.log
.setLevel(logging
.DEBUG
)
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
)
111 def keystone_endpoint(self
):
112 return self
._sess
.auth_url
114 def _get_keystone_connection(self
):
116 Returns instance of object keystoneclient.client.Client
121 def list_users(self
):
123 Returns list of users
125 return self
._ks
_drv
.users
.list()
127 def list_projects(self
):
129 Returns list of projects
131 return self
._ks
_drv
.projects
.list()
133 def list_roles(self
):
135 Returns list of roles
137 return self
._ks
_drv
.roles
.list()
139 def list_regions(self
):
141 Returns list of Regions
143 return self
._ks
_drv
.regions
.list()
145 def list_domains(self
):
147 Returns list of domains
149 return self
._ks
_drv
.domains
.list()