Revert "Full Juju Charm support"
[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, cert_validate, logger = None):
46 """
47 Constructor for class
48 Arguments
49 auth_url(string): Keystone Auth URL
50 cert_validate (boolean): Boolean to indicate if certificate validation is required
51 logger (instance of logging.Logger)
52 """
53
54 if logger is None:
55 self.log = logging.getLogger('rwcal.openstack.keystone')
56 self.log.setLevel(logging.DEBUG)
57 else:
58 self.log = logger
59
60 try:
61 self._discover = discover.Discover(auth_url=auth_url, insecure = not cert_validate)
62 except Exception as e:
63 self.log.exception(str(e))
64 self._discover = None
65 raise
66
67 def get_version(self):
68 if self._discover:
69 for v in KeystoneVersionDiscover.supported_versions:
70 try:
71 rsp = self._discover._calculate_version(v, unstable=False)
72 except KeystoneExceptions.VersionNotAvailable as e:
73 self.log.debug(str(e))
74 self.log.info("Keystone API version %d not available", v[0])
75 else:
76 (major, minor) = rsp['version']
77 self.log.info("Found Keystone API major version: %d, minor version: %d", major, minor)
78 return major, minor
79 raise KeystoneExceptions.NotFound("No supported keystone API version found")
80
81
82
83 class KeystoneDriver(object):
84 """
85 Driver class for openstack keystone
86 """
87 ### List of supported API versions in prioritized order
88 def __init__(self,
89 version,
90 sess_handle,
91 logger = None):
92 """
93 Constructor for KeystoneDriver class
94 Arguments:
95 version(str): Keystone API version
96 sess_handle (instance of class SessionDriver)
97 logger (instance of logging.Logger)
98 """
99
100 if logger is None:
101 self.log = logging.getLogger('rwcal.openstack.keystone')
102 self.log.setLevel(logging.DEBUG)
103 else:
104 self.log = logger
105
106 self._version = int(float(version))
107 self._sess = sess_handle
108 self._ks_drv = ksclient.Client(version = (self._version, ),
109 session = sess_handle.session)
110
111 @property
112 def keystone_endpoint(self):
113 return self._sess.auth_url
114
115 def _get_keystone_connection(self):
116 """
117 Returns instance of object keystoneclient.client.Client
118 Use for DEBUG ONLY
119 """
120 return self._ks_drv
121
122 def list_users(self):
123 """
124 Returns list of users
125 """
126 return self._ks_drv.users.list()
127
128 def list_projects(self):
129 """
130 Returns list of projects
131 """
132 return self._ks_drv.projects.list()
133
134 def list_roles(self):
135 """
136 Returns list of roles
137 """
138 return self._ks_drv.roles.list()
139
140 def list_regions(self):
141 """
142 Returns list of Regions
143 """
144 return self._ks_drv.regions.list()
145
146 def list_domains(self):
147 """
148 Returns list of domains
149 """
150 return self._ks_drv.domains.list()
151
152
153
154