blob: 87d4b79ce50dc6d5ed007cea924da9fb24bf053a [file] [log] [blame]
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +05301# Copyright 2013 OpenStack Foundation
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Matthew Treinish21905512015-07-13 10:33:35 -040016from oslo_serialization import jsonutils as json
Matthew Treinish89128142015-04-23 10:44:30 -040017from six.moves.urllib import parse as urllib
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053018
Ken'ichi Ohmichi0e836652015-01-08 04:38:56 +000019from tempest.common import service_client
Matthew Treinish684d8992014-01-30 16:27:40 +000020
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053021
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000022class IdentityV3Client(service_client.ServiceClient):
ghanshyamd26b5cd2015-02-09 14:48:58 +090023 api_version = "v3"
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053024
Filip HubĂ­k81354052015-03-09 19:04:23 +010025 def get_api_description(self):
26 """Retrieves info about the v3 Identity API"""
27 url = ''
28 resp, body = self.get(url)
29 self.expected_success(200, resp.status)
30 return service_client.ResponseBody(resp, self._parse_resp(body))
31
Brad Pokorny769cddc2014-10-02 12:19:33 -070032 def create_user(self, user_name, password=None, project_id=None,
33 email=None, domain_id='default', **kwargs):
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053034 """Creates a user."""
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053035 en = kwargs.get('enabled', True)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053036 description = kwargs.get('description', None)
root34345472014-11-23 15:23:07 +020037 default_project_id = kwargs.get('default_project_id')
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053038 post_body = {
39 'project_id': project_id,
root34345472014-11-23 15:23:07 +020040 'default_project_id': default_project_id,
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053041 'description': description,
42 'domain_id': domain_id,
43 'email': email,
44 'enabled': en,
45 'name': user_name,
46 'password': password
47 }
48 post_body = json.dumps({'user': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +020049 resp, body = self.post('users', post_body)
David Kranze9d2f422014-07-02 13:57:41 -040050 self.expected_success(201, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053051 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000052 return service_client.ResponseBody(resp, body['user'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053053
54 def update_user(self, user_id, name, **kwargs):
55 """Updates a user."""
David Kranzd8ccb792014-12-29 11:32:05 -050056 body = self.get_user(user_id)
nayna-patel755d8142013-07-16 06:45:34 +000057 email = kwargs.get('email', body['email'])
58 en = kwargs.get('enabled', body['enabled'])
59 project_id = kwargs.get('project_id', body['project_id'])
root34345472014-11-23 15:23:07 +020060 if 'default_project_id' in body.keys():
61 default_project_id = kwargs.get('default_project_id',
62 body['default_project_id'])
63 else:
64 default_project_id = kwargs.get('default_project_id')
nayna-patel755d8142013-07-16 06:45:34 +000065 description = kwargs.get('description', body['description'])
66 domain_id = kwargs.get('domain_id', body['domain_id'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053067 post_body = {
68 'name': name,
69 'email': email,
70 'enabled': en,
71 'project_id': project_id,
root34345472014-11-23 15:23:07 +020072 'default_project_id': default_project_id,
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053073 'id': user_id,
74 'domain_id': domain_id,
75 'description': description
76 }
77 post_body = json.dumps({'user': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +020078 resp, body = self.patch('users/%s' % user_id, post_body)
David Kranze9d2f422014-07-02 13:57:41 -040079 self.expected_success(200, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053080 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000081 return service_client.ResponseBody(resp, body['user'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053082
ravikumar-venkatesand35d6442014-05-05 12:14:45 +000083 def update_user_password(self, user_id, password, original_password):
84 """Updates a user password."""
85 update_user = {
86 'password': password,
87 'original_password': original_password
88 }
89 update_user = json.dumps({'user': update_user})
90 resp, _ = self.post('users/%s/password' % user_id, update_user)
91 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000092 return service_client.ResponseBody(resp)
ravikumar-venkatesand35d6442014-05-05 12:14:45 +000093
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053094 def list_user_projects(self, user_id):
95 """Lists the projects on which a user has roles assigned."""
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +020096 resp, body = self.get('users/%s/projects' % user_id)
David Kranze9d2f422014-07-02 13:57:41 -040097 self.expected_success(200, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053098 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000099 return service_client.ResponseBodyList(resp, body['projects'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530100
nayna-patel2db83b32014-05-15 11:41:03 +0000101 def get_users(self, params=None):
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530102 """Get the list of users."""
nayna-patel2db83b32014-05-15 11:41:03 +0000103 url = 'users'
104 if params:
105 url += '?%s' % urllib.urlencode(params)
106 resp, body = self.get(url)
David Kranze9d2f422014-07-02 13:57:41 -0400107 self.expected_success(200, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530108 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000109 return service_client.ResponseBodyList(resp, body['users'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530110
111 def get_user(self, user_id):
112 """GET a user."""
113 resp, body = self.get("users/%s" % user_id)
David Kranze9d2f422014-07-02 13:57:41 -0400114 self.expected_success(200, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530115 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000116 return service_client.ResponseBody(resp, body['user'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530117
118 def delete_user(self, user_id):
119 """Deletes a User."""
120 resp, body = self.delete("users/%s" % user_id)
David Kranze9d2f422014-07-02 13:57:41 -0400121 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000122 return service_client.ResponseBody(resp, body)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530123
124 def create_project(self, name, **kwargs):
125 """Creates a project."""
126 description = kwargs.get('description', None)
127 en = kwargs.get('enabled', True)
128 domain_id = kwargs.get('domain_id', 'default')
129 post_body = {
130 'description': description,
131 'domain_id': domain_id,
132 'enabled': en,
133 'name': name
134 }
135 post_body = json.dumps({'project': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200136 resp, body = self.post('projects', post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400137 self.expected_success(201, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530138 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000139 return service_client.ResponseBody(resp, body['project'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530140
nayna-patel153e9dd2014-05-16 09:00:05 +0000141 def list_projects(self, params=None):
142 url = "projects"
143 if params:
144 url += '?%s' % urllib.urlencode(params)
145 resp, body = self.get(url)
David Kranze9d2f422014-07-02 13:57:41 -0400146 self.expected_success(200, resp.status)
Nayna Patele6331362013-08-12 06:59:48 +0000147 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000148 return service_client.ResponseBodyList(resp, body['projects'])
Nayna Patele6331362013-08-12 06:59:48 +0000149
150 def update_project(self, project_id, **kwargs):
David Kranzd8ccb792014-12-29 11:32:05 -0500151 body = self.get_project(project_id)
Nayna Patele6331362013-08-12 06:59:48 +0000152 name = kwargs.get('name', body['name'])
153 desc = kwargs.get('description', body['description'])
154 en = kwargs.get('enabled', body['enabled'])
155 domain_id = kwargs.get('domain_id', body['domain_id'])
156 post_body = {
157 'id': project_id,
158 'name': name,
159 'description': desc,
160 'enabled': en,
161 'domain_id': domain_id,
162 }
163 post_body = json.dumps({'project': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200164 resp, body = self.patch('projects/%s' % project_id, post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400165 self.expected_success(200, resp.status)
Nayna Patele6331362013-08-12 06:59:48 +0000166 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000167 return service_client.ResponseBody(resp, body['project'])
Nayna Patele6331362013-08-12 06:59:48 +0000168
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530169 def get_project(self, project_id):
170 """GET a Project."""
171 resp, body = self.get("projects/%s" % project_id)
David Kranze9d2f422014-07-02 13:57:41 -0400172 self.expected_success(200, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530173 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000174 return service_client.ResponseBody(resp, body['project'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530175
176 def delete_project(self, project_id):
177 """Delete a project."""
178 resp, body = self.delete('projects/%s' % str(project_id))
David Kranze9d2f422014-07-02 13:57:41 -0400179 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000180 return service_client.ResponseBody(resp, body)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530181
182 def create_role(self, name):
183 """Create a Role."""
184 post_body = {
185 'name': name
186 }
187 post_body = json.dumps({'role': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200188 resp, body = self.post('roles', post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400189 self.expected_success(201, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530190 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000191 return service_client.ResponseBody(resp, body['role'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530192
193 def get_role(self, role_id):
194 """GET a Role."""
195 resp, body = self.get('roles/%s' % str(role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400196 self.expected_success(200, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530197 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000198 return service_client.ResponseBody(resp, body['role'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530199
wanglianmina3e84ea2014-03-26 17:30:33 +0800200 def list_roles(self):
201 """Get the list of Roles."""
202 resp, body = self.get("roles")
David Kranze9d2f422014-07-02 13:57:41 -0400203 self.expected_success(200, resp.status)
wanglianmina3e84ea2014-03-26 17:30:33 +0800204 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000205 return service_client.ResponseBodyList(resp, body['roles'])
wanglianmina3e84ea2014-03-26 17:30:33 +0800206
nayna-patel755d8142013-07-16 06:45:34 +0000207 def update_role(self, name, role_id):
208 """Create a Role."""
209 post_body = {
210 'name': name
211 }
212 post_body = json.dumps({'role': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200213 resp, body = self.patch('roles/%s' % str(role_id), post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400214 self.expected_success(200, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000215 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000216 return service_client.ResponseBody(resp, body['role'])
nayna-patel755d8142013-07-16 06:45:34 +0000217
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530218 def delete_role(self, role_id):
219 """Delete a role."""
220 resp, body = self.delete('roles/%s' % str(role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400221 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000222 return service_client.ResponseBody(resp, body)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530223
224 def assign_user_role(self, project_id, user_id, role_id):
225 """Add roles to a user on a project."""
226 resp, body = self.put('projects/%s/users/%s/roles/%s' %
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200227 (project_id, user_id, role_id), None)
David Kranze9d2f422014-07-02 13:57:41 -0400228 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000229 return service_client.ResponseBody(resp, body)
nayna-patel4df72dc2013-05-29 10:27:24 +0000230
231 def create_domain(self, name, **kwargs):
232 """Creates a domain."""
233 description = kwargs.get('description', None)
234 en = kwargs.get('enabled', True)
235 post_body = {
236 'description': description,
237 'enabled': en,
238 'name': name
239 }
240 post_body = json.dumps({'domain': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200241 resp, body = self.post('domains', post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400242 self.expected_success(201, resp.status)
nayna-patel4df72dc2013-05-29 10:27:24 +0000243 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000244 return service_client.ResponseBody(resp, body['domain'])
nayna-patel4df72dc2013-05-29 10:27:24 +0000245
246 def delete_domain(self, domain_id):
247 """Delete a domain."""
248 resp, body = self.delete('domains/%s' % str(domain_id))
David Kranze9d2f422014-07-02 13:57:41 -0400249 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000250 return service_client.ResponseBody(resp, body)
nayna-patel4df72dc2013-05-29 10:27:24 +0000251
Andrea Frittolic3280152015-02-26 12:42:34 +0000252 def list_domains(self, params=None):
nayna-patel4df72dc2013-05-29 10:27:24 +0000253 """List Domains."""
Andrea Frittolic3280152015-02-26 12:42:34 +0000254 url = 'domains'
255 if params:
256 url += '?%s' % urllib.urlencode(params)
257 resp, body = self.get(url)
David Kranze9d2f422014-07-02 13:57:41 -0400258 self.expected_success(200, resp.status)
nayna-patel4df72dc2013-05-29 10:27:24 +0000259 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000260 return service_client.ResponseBodyList(resp, body['domains'])
nayna-patel4df72dc2013-05-29 10:27:24 +0000261
262 def update_domain(self, domain_id, **kwargs):
263 """Updates a domain."""
David Kranzd8ccb792014-12-29 11:32:05 -0500264 body = self.get_domain(domain_id)
nayna-patel4df72dc2013-05-29 10:27:24 +0000265 description = kwargs.get('description', body['description'])
266 en = kwargs.get('enabled', body['enabled'])
267 name = kwargs.get('name', body['name'])
268 post_body = {
269 'description': description,
270 'enabled': en,
271 'name': name
272 }
273 post_body = json.dumps({'domain': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200274 resp, body = self.patch('domains/%s' % domain_id, post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400275 self.expected_success(200, resp.status)
nayna-patel4df72dc2013-05-29 10:27:24 +0000276 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000277 return service_client.ResponseBody(resp, body['domain'])
nayna-patel4df72dc2013-05-29 10:27:24 +0000278
279 def get_domain(self, domain_id):
280 """Get Domain details."""
281 resp, body = self.get('domains/%s' % domain_id)
David Kranze9d2f422014-07-02 13:57:41 -0400282 self.expected_success(200, resp.status)
nayna-patel4df72dc2013-05-29 10:27:24 +0000283 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000284 return service_client.ResponseBody(resp, body['domain'])
nayna-patelb35f7232013-06-28 07:08:44 +0000285
286 def get_token(self, resp_token):
287 """Get token details."""
288 headers = {'X-Subject-Token': resp_token}
289 resp, body = self.get("auth/tokens", headers=headers)
David Kranze9d2f422014-07-02 13:57:41 -0400290 self.expected_success(200, resp.status)
nayna-patelb35f7232013-06-28 07:08:44 +0000291 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000292 return service_client.ResponseBody(resp, body['token'])
nayna-patelb35f7232013-06-28 07:08:44 +0000293
294 def delete_token(self, resp_token):
295 """Deletes token."""
296 headers = {'X-Subject-Token': resp_token}
297 resp, body = self.delete("auth/tokens", headers=headers)
David Kranze9d2f422014-07-02 13:57:41 -0400298 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000299 return service_client.ResponseBody(resp, body)
nayna-patelb35f7232013-06-28 07:08:44 +0000300
nayna-patel755d8142013-07-16 06:45:34 +0000301 def create_group(self, name, **kwargs):
302 """Creates a group."""
303 description = kwargs.get('description', None)
304 domain_id = kwargs.get('domain_id', 'default')
305 project_id = kwargs.get('project_id', None)
306 post_body = {
307 'description': description,
308 'domain_id': domain_id,
309 'project_id': project_id,
310 'name': name
311 }
312 post_body = json.dumps({'group': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200313 resp, body = self.post('groups', post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400314 self.expected_success(201, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000315 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000316 return service_client.ResponseBody(resp, body['group'])
nayna-patel755d8142013-07-16 06:45:34 +0000317
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800318 def get_group(self, group_id):
319 """Get group details."""
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200320 resp, body = self.get('groups/%s' % group_id)
David Kranze9d2f422014-07-02 13:57:41 -0400321 self.expected_success(200, resp.status)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800322 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000323 return service_client.ResponseBody(resp, body['group'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800324
ravikumar-venkatesana0003702015-02-04 10:31:17 +0000325 def list_groups(self):
326 """Lists the groups."""
327 resp, body = self.get('groups')
328 self.expected_success(200, resp.status)
329 body = json.loads(body)
330 return service_client.ResponseBodyList(resp, body['groups'])
331
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800332 def update_group(self, group_id, **kwargs):
333 """Updates a group."""
David Kranzd8ccb792014-12-29 11:32:05 -0500334 body = self.get_group(group_id)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800335 name = kwargs.get('name', body['name'])
336 description = kwargs.get('description', body['description'])
337 post_body = {
338 'name': name,
339 'description': description
340 }
341 post_body = json.dumps({'group': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200342 resp, body = self.patch('groups/%s' % group_id, post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400343 self.expected_success(200, resp.status)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800344 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000345 return service_client.ResponseBody(resp, body['group'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800346
nayna-patel755d8142013-07-16 06:45:34 +0000347 def delete_group(self, group_id):
348 """Delete a group."""
349 resp, body = self.delete('groups/%s' % str(group_id))
David Kranze9d2f422014-07-02 13:57:41 -0400350 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000351 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000352
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800353 def add_group_user(self, group_id, user_id):
354 """Add user into group."""
355 resp, body = self.put('groups/%s/users/%s' % (group_id, user_id),
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200356 None)
David Kranze9d2f422014-07-02 13:57:41 -0400357 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000358 return service_client.ResponseBody(resp, body)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800359
360 def list_group_users(self, group_id):
361 """List users in group."""
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200362 resp, body = self.get('groups/%s/users' % group_id)
David Kranze9d2f422014-07-02 13:57:41 -0400363 self.expected_success(200, resp.status)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800364 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000365 return service_client.ResponseBodyList(resp, body['users'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800366
wanglianmin29b0f4c2014-03-06 19:09:16 +0800367 def list_user_groups(self, user_id):
368 """Lists groups which a user belongs to."""
369 resp, body = self.get('users/%s/groups' % user_id)
David Kranze9d2f422014-07-02 13:57:41 -0400370 self.expected_success(200, resp.status)
wanglianmin29b0f4c2014-03-06 19:09:16 +0800371 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000372 return service_client.ResponseBodyList(resp, body['groups'])
wanglianmin29b0f4c2014-03-06 19:09:16 +0800373
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800374 def delete_group_user(self, group_id, user_id):
375 """Delete user in group."""
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200376 resp, body = self.delete('groups/%s/users/%s' % (group_id, user_id))
David Kranze9d2f422014-07-02 13:57:41 -0400377 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000378 return service_client.ResponseBody(resp, body)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800379
nayna-patel755d8142013-07-16 06:45:34 +0000380 def assign_user_role_on_project(self, project_id, user_id, role_id):
381 """Add roles to a user on a project."""
382 resp, body = self.put('projects/%s/users/%s/roles/%s' %
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200383 (project_id, user_id, role_id), None)
David Kranze9d2f422014-07-02 13:57:41 -0400384 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000385 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000386
387 def assign_user_role_on_domain(self, domain_id, user_id, role_id):
388 """Add roles to a user on a domain."""
389 resp, body = self.put('domains/%s/users/%s/roles/%s' %
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200390 (domain_id, user_id, role_id), None)
David Kranze9d2f422014-07-02 13:57:41 -0400391 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000392 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000393
394 def list_user_roles_on_project(self, project_id, user_id):
395 """list roles of a user on a project."""
396 resp, body = self.get('projects/%s/users/%s/roles' %
397 (project_id, user_id))
David Kranze9d2f422014-07-02 13:57:41 -0400398 self.expected_success(200, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000399 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000400 return service_client.ResponseBodyList(resp, body['roles'])
nayna-patel755d8142013-07-16 06:45:34 +0000401
402 def list_user_roles_on_domain(self, domain_id, user_id):
403 """list roles of a user on a domain."""
404 resp, body = self.get('domains/%s/users/%s/roles' %
405 (domain_id, user_id))
David Kranze9d2f422014-07-02 13:57:41 -0400406 self.expected_success(200, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000407 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000408 return service_client.ResponseBodyList(resp, body['roles'])
nayna-patel755d8142013-07-16 06:45:34 +0000409
410 def revoke_role_from_user_on_project(self, project_id, user_id, role_id):
411 """Delete role of a user on a project."""
412 resp, body = self.delete('projects/%s/users/%s/roles/%s' %
413 (project_id, user_id, role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400414 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000415 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000416
417 def revoke_role_from_user_on_domain(self, domain_id, user_id, role_id):
418 """Delete role of a user on a domain."""
419 resp, body = self.delete('domains/%s/users/%s/roles/%s' %
420 (domain_id, user_id, role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400421 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000422 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000423
424 def assign_group_role_on_project(self, project_id, group_id, role_id):
425 """Add roles to a user on a project."""
426 resp, body = self.put('projects/%s/groups/%s/roles/%s' %
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200427 (project_id, group_id, role_id), None)
David Kranze9d2f422014-07-02 13:57:41 -0400428 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000429 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000430
431 def assign_group_role_on_domain(self, domain_id, group_id, role_id):
432 """Add roles to a user on a domain."""
433 resp, body = self.put('domains/%s/groups/%s/roles/%s' %
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200434 (domain_id, group_id, role_id), None)
David Kranze9d2f422014-07-02 13:57:41 -0400435 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000436 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000437
438 def list_group_roles_on_project(self, project_id, group_id):
439 """list roles of a user on a project."""
440 resp, body = self.get('projects/%s/groups/%s/roles' %
441 (project_id, group_id))
David Kranze9d2f422014-07-02 13:57:41 -0400442 self.expected_success(200, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000443 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000444 return service_client.ResponseBodyList(resp, body['roles'])
nayna-patel755d8142013-07-16 06:45:34 +0000445
446 def list_group_roles_on_domain(self, domain_id, group_id):
447 """list roles of a user on a domain."""
448 resp, body = self.get('domains/%s/groups/%s/roles' %
449 (domain_id, group_id))
David Kranze9d2f422014-07-02 13:57:41 -0400450 self.expected_success(200, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000451 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000452 return service_client.ResponseBodyList(resp, body['roles'])
nayna-patel755d8142013-07-16 06:45:34 +0000453
454 def revoke_role_from_group_on_project(self, project_id, group_id, role_id):
455 """Delete role of a user on a project."""
456 resp, body = self.delete('projects/%s/groups/%s/roles/%s' %
457 (project_id, group_id, role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400458 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000459 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000460
461 def revoke_role_from_group_on_domain(self, domain_id, group_id, role_id):
462 """Delete role of a user on a domain."""
463 resp, body = self.delete('domains/%s/groups/%s/roles/%s' %
464 (domain_id, group_id, role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400465 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000466 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000467
Steven Hardybf70c5c2013-10-30 21:55:16 +0000468 def create_trust(self, trustor_user_id, trustee_user_id, project_id,
469 role_names, impersonation, expires_at):
470 """Creates a trust."""
471 roles = [{'name': n} for n in role_names]
472 post_body = {
473 'trustor_user_id': trustor_user_id,
474 'trustee_user_id': trustee_user_id,
475 'project_id': project_id,
476 'impersonation': impersonation,
477 'roles': roles,
478 'expires_at': expires_at
479 }
480 post_body = json.dumps({'trust': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200481 resp, body = self.post('OS-TRUST/trusts', post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400482 self.expected_success(201, resp.status)
Steven Hardybf70c5c2013-10-30 21:55:16 +0000483 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000484 return service_client.ResponseBody(resp, body['trust'])
Steven Hardybf70c5c2013-10-30 21:55:16 +0000485
486 def delete_trust(self, trust_id):
487 """Deletes a trust."""
488 resp, body = self.delete("OS-TRUST/trusts/%s" % trust_id)
David Kranze9d2f422014-07-02 13:57:41 -0400489 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000490 return service_client.ResponseBody(resp, body)
Steven Hardybf70c5c2013-10-30 21:55:16 +0000491
492 def get_trusts(self, trustor_user_id=None, trustee_user_id=None):
493 """GET trusts."""
494 if trustor_user_id:
495 resp, body = self.get("OS-TRUST/trusts?trustor_user_id=%s"
496 % trustor_user_id)
497 elif trustee_user_id:
498 resp, body = self.get("OS-TRUST/trusts?trustee_user_id=%s"
499 % trustee_user_id)
500 else:
501 resp, body = self.get("OS-TRUST/trusts")
David Kranze9d2f422014-07-02 13:57:41 -0400502 self.expected_success(200, resp.status)
Steven Hardybf70c5c2013-10-30 21:55:16 +0000503 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000504 return service_client.ResponseBodyList(resp, body['trusts'])
Steven Hardybf70c5c2013-10-30 21:55:16 +0000505
506 def get_trust(self, trust_id):
507 """GET trust."""
508 resp, body = self.get("OS-TRUST/trusts/%s" % trust_id)
David Kranze9d2f422014-07-02 13:57:41 -0400509 self.expected_success(200, resp.status)
Steven Hardybf70c5c2013-10-30 21:55:16 +0000510 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000511 return service_client.ResponseBody(resp, body['trust'])
Steven Hardybf70c5c2013-10-30 21:55:16 +0000512
513 def get_trust_roles(self, trust_id):
514 """GET roles delegated by a trust."""
515 resp, body = self.get("OS-TRUST/trusts/%s/roles" % trust_id)
David Kranze9d2f422014-07-02 13:57:41 -0400516 self.expected_success(200, resp.status)
Steven Hardybf70c5c2013-10-30 21:55:16 +0000517 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000518 return service_client.ResponseBodyList(resp, body['roles'])
Steven Hardybf70c5c2013-10-30 21:55:16 +0000519
520 def get_trust_role(self, trust_id, role_id):
521 """GET role delegated by a trust."""
522 resp, body = self.get("OS-TRUST/trusts/%s/roles/%s"
523 % (trust_id, role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400524 self.expected_success(200, resp.status)
Steven Hardybf70c5c2013-10-30 21:55:16 +0000525 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000526 return service_client.ResponseBody(resp, body['role'])
Steven Hardybf70c5c2013-10-30 21:55:16 +0000527
528 def check_trust_role(self, trust_id, role_id):
529 """HEAD Check if role is delegated by a trust."""
530 resp, body = self.head("OS-TRUST/trusts/%s/roles/%s"
531 % (trust_id, role_id))
Morgan Fainberg883311d2014-07-03 13:13:10 -0700532 self.expected_success(200, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000533 return service_client.ResponseBody(resp, body)