blob: bc90fd1182e7a5cae87161f94fd498068526879c [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
16import json
nayna-patel2db83b32014-05-15 11:41:03 +000017import 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
ghanshyamd26b5cd2015-02-09 14:48:58 +090022class IdentityV3ClientJSON(service_client.ServiceClient):
23 api_version = "v3"
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053024
Brad Pokorny769cddc2014-10-02 12:19:33 -070025 def create_user(self, user_name, password=None, project_id=None,
26 email=None, domain_id='default', **kwargs):
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053027 """Creates a user."""
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053028 en = kwargs.get('enabled', True)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053029 description = kwargs.get('description', None)
root34345472014-11-23 15:23:07 +020030 default_project_id = kwargs.get('default_project_id')
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053031 post_body = {
32 'project_id': project_id,
root34345472014-11-23 15:23:07 +020033 'default_project_id': default_project_id,
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053034 'description': description,
35 'domain_id': domain_id,
36 'email': email,
37 'enabled': en,
38 'name': user_name,
39 'password': password
40 }
41 post_body = json.dumps({'user': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +020042 resp, body = self.post('users', post_body)
David Kranze9d2f422014-07-02 13:57:41 -040043 self.expected_success(201, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053044 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000045 return service_client.ResponseBody(resp, body['user'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053046
47 def update_user(self, user_id, name, **kwargs):
48 """Updates a user."""
David Kranzd8ccb792014-12-29 11:32:05 -050049 body = self.get_user(user_id)
nayna-patel755d8142013-07-16 06:45:34 +000050 email = kwargs.get('email', body['email'])
51 en = kwargs.get('enabled', body['enabled'])
52 project_id = kwargs.get('project_id', body['project_id'])
root34345472014-11-23 15:23:07 +020053 if 'default_project_id' in body.keys():
54 default_project_id = kwargs.get('default_project_id',
55 body['default_project_id'])
56 else:
57 default_project_id = kwargs.get('default_project_id')
nayna-patel755d8142013-07-16 06:45:34 +000058 description = kwargs.get('description', body['description'])
59 domain_id = kwargs.get('domain_id', body['domain_id'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053060 post_body = {
61 'name': name,
62 'email': email,
63 'enabled': en,
64 'project_id': project_id,
root34345472014-11-23 15:23:07 +020065 'default_project_id': default_project_id,
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053066 'id': user_id,
67 'domain_id': domain_id,
68 'description': description
69 }
70 post_body = json.dumps({'user': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +020071 resp, body = self.patch('users/%s' % user_id, post_body)
David Kranze9d2f422014-07-02 13:57:41 -040072 self.expected_success(200, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053073 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000074 return service_client.ResponseBody(resp, body['user'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053075
ravikumar-venkatesand35d6442014-05-05 12:14:45 +000076 def update_user_password(self, user_id, password, original_password):
77 """Updates a user password."""
78 update_user = {
79 'password': password,
80 'original_password': original_password
81 }
82 update_user = json.dumps({'user': update_user})
83 resp, _ = self.post('users/%s/password' % user_id, update_user)
84 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000085 return service_client.ResponseBody(resp)
ravikumar-venkatesand35d6442014-05-05 12:14:45 +000086
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053087 def list_user_projects(self, user_id):
88 """Lists the projects on which a user has roles assigned."""
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +020089 resp, body = self.get('users/%s/projects' % user_id)
David Kranze9d2f422014-07-02 13:57:41 -040090 self.expected_success(200, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053091 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000092 return service_client.ResponseBodyList(resp, body['projects'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053093
nayna-patel2db83b32014-05-15 11:41:03 +000094 def get_users(self, params=None):
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +053095 """Get the list of users."""
nayna-patel2db83b32014-05-15 11:41:03 +000096 url = 'users'
97 if params:
98 url += '?%s' % urllib.urlencode(params)
99 resp, body = self.get(url)
David Kranze9d2f422014-07-02 13:57:41 -0400100 self.expected_success(200, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530101 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000102 return service_client.ResponseBodyList(resp, body['users'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530103
104 def get_user(self, user_id):
105 """GET a user."""
106 resp, body = self.get("users/%s" % user_id)
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.ResponseBody(resp, body['user'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530110
111 def delete_user(self, user_id):
112 """Deletes a User."""
113 resp, body = self.delete("users/%s" % user_id)
David Kranze9d2f422014-07-02 13:57:41 -0400114 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000115 return service_client.ResponseBody(resp, body)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530116
117 def create_project(self, name, **kwargs):
118 """Creates a project."""
119 description = kwargs.get('description', None)
120 en = kwargs.get('enabled', True)
121 domain_id = kwargs.get('domain_id', 'default')
122 post_body = {
123 'description': description,
124 'domain_id': domain_id,
125 'enabled': en,
126 'name': name
127 }
128 post_body = json.dumps({'project': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200129 resp, body = self.post('projects', post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400130 self.expected_success(201, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530131 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000132 return service_client.ResponseBody(resp, body['project'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530133
nayna-patel153e9dd2014-05-16 09:00:05 +0000134 def list_projects(self, params=None):
135 url = "projects"
136 if params:
137 url += '?%s' % urllib.urlencode(params)
138 resp, body = self.get(url)
David Kranze9d2f422014-07-02 13:57:41 -0400139 self.expected_success(200, resp.status)
Nayna Patele6331362013-08-12 06:59:48 +0000140 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000141 return service_client.ResponseBodyList(resp, body['projects'])
Nayna Patele6331362013-08-12 06:59:48 +0000142
143 def update_project(self, project_id, **kwargs):
David Kranzd8ccb792014-12-29 11:32:05 -0500144 body = self.get_project(project_id)
Nayna Patele6331362013-08-12 06:59:48 +0000145 name = kwargs.get('name', body['name'])
146 desc = kwargs.get('description', body['description'])
147 en = kwargs.get('enabled', body['enabled'])
148 domain_id = kwargs.get('domain_id', body['domain_id'])
149 post_body = {
150 'id': project_id,
151 'name': name,
152 'description': desc,
153 'enabled': en,
154 'domain_id': domain_id,
155 }
156 post_body = json.dumps({'project': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200157 resp, body = self.patch('projects/%s' % project_id, post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400158 self.expected_success(200, resp.status)
Nayna Patele6331362013-08-12 06:59:48 +0000159 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000160 return service_client.ResponseBody(resp, body['project'])
Nayna Patele6331362013-08-12 06:59:48 +0000161
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530162 def get_project(self, project_id):
163 """GET a Project."""
164 resp, body = self.get("projects/%s" % project_id)
David Kranze9d2f422014-07-02 13:57:41 -0400165 self.expected_success(200, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530166 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000167 return service_client.ResponseBody(resp, body['project'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530168
169 def delete_project(self, project_id):
170 """Delete a project."""
171 resp, body = self.delete('projects/%s' % str(project_id))
David Kranze9d2f422014-07-02 13:57:41 -0400172 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000173 return service_client.ResponseBody(resp, body)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530174
175 def create_role(self, name):
176 """Create a Role."""
177 post_body = {
178 'name': name
179 }
180 post_body = json.dumps({'role': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200181 resp, body = self.post('roles', post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400182 self.expected_success(201, resp.status)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530183 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000184 return service_client.ResponseBody(resp, body['role'])
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530185
186 def get_role(self, role_id):
187 """GET a Role."""
188 resp, body = self.get('roles/%s' % str(role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400189 self.expected_success(200, 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
wanglianmina3e84ea2014-03-26 17:30:33 +0800193 def list_roles(self):
194 """Get the list of Roles."""
195 resp, body = self.get("roles")
David Kranze9d2f422014-07-02 13:57:41 -0400196 self.expected_success(200, resp.status)
wanglianmina3e84ea2014-03-26 17:30:33 +0800197 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000198 return service_client.ResponseBodyList(resp, body['roles'])
wanglianmina3e84ea2014-03-26 17:30:33 +0800199
nayna-patel755d8142013-07-16 06:45:34 +0000200 def update_role(self, name, role_id):
201 """Create a Role."""
202 post_body = {
203 'name': name
204 }
205 post_body = json.dumps({'role': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200206 resp, body = self.patch('roles/%s' % str(role_id), post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400207 self.expected_success(200, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000208 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000209 return service_client.ResponseBody(resp, body['role'])
nayna-patel755d8142013-07-16 06:45:34 +0000210
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530211 def delete_role(self, role_id):
212 """Delete a role."""
213 resp, body = self.delete('roles/%s' % str(role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400214 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000215 return service_client.ResponseBody(resp, body)
rajalakshmi-ganesan7312bb52013-01-29 20:03:42 +0530216
217 def assign_user_role(self, project_id, user_id, role_id):
218 """Add roles to a user on a project."""
219 resp, body = self.put('projects/%s/users/%s/roles/%s' %
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200220 (project_id, user_id, role_id), None)
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)
nayna-patel4df72dc2013-05-29 10:27:24 +0000223
224 def create_domain(self, name, **kwargs):
225 """Creates a domain."""
226 description = kwargs.get('description', None)
227 en = kwargs.get('enabled', True)
228 post_body = {
229 'description': description,
230 'enabled': en,
231 'name': name
232 }
233 post_body = json.dumps({'domain': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200234 resp, body = self.post('domains', post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400235 self.expected_success(201, resp.status)
nayna-patel4df72dc2013-05-29 10:27:24 +0000236 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000237 return service_client.ResponseBody(resp, body['domain'])
nayna-patel4df72dc2013-05-29 10:27:24 +0000238
239 def delete_domain(self, domain_id):
240 """Delete a domain."""
241 resp, body = self.delete('domains/%s' % str(domain_id))
David Kranze9d2f422014-07-02 13:57:41 -0400242 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000243 return service_client.ResponseBody(resp, body)
nayna-patel4df72dc2013-05-29 10:27:24 +0000244
Andrea Frittolic3280152015-02-26 12:42:34 +0000245 def list_domains(self, params=None):
nayna-patel4df72dc2013-05-29 10:27:24 +0000246 """List Domains."""
Andrea Frittolic3280152015-02-26 12:42:34 +0000247 url = 'domains'
248 if params:
249 url += '?%s' % urllib.urlencode(params)
250 resp, body = self.get(url)
David Kranze9d2f422014-07-02 13:57:41 -0400251 self.expected_success(200, resp.status)
nayna-patel4df72dc2013-05-29 10:27:24 +0000252 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000253 return service_client.ResponseBodyList(resp, body['domains'])
nayna-patel4df72dc2013-05-29 10:27:24 +0000254
255 def update_domain(self, domain_id, **kwargs):
256 """Updates a domain."""
David Kranzd8ccb792014-12-29 11:32:05 -0500257 body = self.get_domain(domain_id)
nayna-patel4df72dc2013-05-29 10:27:24 +0000258 description = kwargs.get('description', body['description'])
259 en = kwargs.get('enabled', body['enabled'])
260 name = kwargs.get('name', body['name'])
261 post_body = {
262 'description': description,
263 'enabled': en,
264 'name': name
265 }
266 post_body = json.dumps({'domain': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200267 resp, body = self.patch('domains/%s' % domain_id, post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400268 self.expected_success(200, resp.status)
nayna-patel4df72dc2013-05-29 10:27:24 +0000269 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000270 return service_client.ResponseBody(resp, body['domain'])
nayna-patel4df72dc2013-05-29 10:27:24 +0000271
272 def get_domain(self, domain_id):
273 """Get Domain details."""
274 resp, body = self.get('domains/%s' % domain_id)
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-patelb35f7232013-06-28 07:08:44 +0000278
279 def get_token(self, resp_token):
280 """Get token details."""
281 headers = {'X-Subject-Token': resp_token}
282 resp, body = self.get("auth/tokens", headers=headers)
David Kranze9d2f422014-07-02 13:57:41 -0400283 self.expected_success(200, resp.status)
nayna-patelb35f7232013-06-28 07:08:44 +0000284 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000285 return service_client.ResponseBody(resp, body['token'])
nayna-patelb35f7232013-06-28 07:08:44 +0000286
287 def delete_token(self, resp_token):
288 """Deletes token."""
289 headers = {'X-Subject-Token': resp_token}
290 resp, body = self.delete("auth/tokens", headers=headers)
David Kranze9d2f422014-07-02 13:57:41 -0400291 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000292 return service_client.ResponseBody(resp, body)
nayna-patelb35f7232013-06-28 07:08:44 +0000293
nayna-patel755d8142013-07-16 06:45:34 +0000294 def create_group(self, name, **kwargs):
295 """Creates a group."""
296 description = kwargs.get('description', None)
297 domain_id = kwargs.get('domain_id', 'default')
298 project_id = kwargs.get('project_id', None)
299 post_body = {
300 'description': description,
301 'domain_id': domain_id,
302 'project_id': project_id,
303 'name': name
304 }
305 post_body = json.dumps({'group': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200306 resp, body = self.post('groups', post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400307 self.expected_success(201, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000308 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000309 return service_client.ResponseBody(resp, body['group'])
nayna-patel755d8142013-07-16 06:45:34 +0000310
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800311 def get_group(self, group_id):
312 """Get group details."""
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200313 resp, body = self.get('groups/%s' % group_id)
David Kranze9d2f422014-07-02 13:57:41 -0400314 self.expected_success(200, resp.status)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800315 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000316 return service_client.ResponseBody(resp, body['group'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800317
ravikumar-venkatesana0003702015-02-04 10:31:17 +0000318 def list_groups(self):
319 """Lists the groups."""
320 resp, body = self.get('groups')
321 self.expected_success(200, resp.status)
322 body = json.loads(body)
323 return service_client.ResponseBodyList(resp, body['groups'])
324
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800325 def update_group(self, group_id, **kwargs):
326 """Updates a group."""
David Kranzd8ccb792014-12-29 11:32:05 -0500327 body = self.get_group(group_id)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800328 name = kwargs.get('name', body['name'])
329 description = kwargs.get('description', body['description'])
330 post_body = {
331 'name': name,
332 'description': description
333 }
334 post_body = json.dumps({'group': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200335 resp, body = self.patch('groups/%s' % group_id, post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400336 self.expected_success(200, resp.status)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800337 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000338 return service_client.ResponseBody(resp, body['group'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800339
nayna-patel755d8142013-07-16 06:45:34 +0000340 def delete_group(self, group_id):
341 """Delete a group."""
342 resp, body = self.delete('groups/%s' % str(group_id))
David Kranze9d2f422014-07-02 13:57:41 -0400343 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000344 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000345
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800346 def add_group_user(self, group_id, user_id):
347 """Add user into group."""
348 resp, body = self.put('groups/%s/users/%s' % (group_id, user_id),
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200349 None)
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)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800352
353 def list_group_users(self, group_id):
354 """List users in group."""
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200355 resp, body = self.get('groups/%s/users' % group_id)
David Kranze9d2f422014-07-02 13:57:41 -0400356 self.expected_success(200, resp.status)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800357 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000358 return service_client.ResponseBodyList(resp, body['users'])
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800359
wanglianmin29b0f4c2014-03-06 19:09:16 +0800360 def list_user_groups(self, user_id):
361 """Lists groups which a user belongs to."""
362 resp, body = self.get('users/%s/groups' % user_id)
David Kranze9d2f422014-07-02 13:57:41 -0400363 self.expected_success(200, resp.status)
wanglianmin29b0f4c2014-03-06 19:09:16 +0800364 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000365 return service_client.ResponseBodyList(resp, body['groups'])
wanglianmin29b0f4c2014-03-06 19:09:16 +0800366
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800367 def delete_group_user(self, group_id, user_id):
368 """Delete user in group."""
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200369 resp, body = self.delete('groups/%s/users/%s' % (group_id, user_id))
David Kranze9d2f422014-07-02 13:57:41 -0400370 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000371 return service_client.ResponseBody(resp, body)
Zhi Kun Liue8136f02014-01-07 18:56:28 +0800372
nayna-patel755d8142013-07-16 06:45:34 +0000373 def assign_user_role_on_project(self, project_id, user_id, role_id):
374 """Add roles to a user on a project."""
375 resp, body = self.put('projects/%s/users/%s/roles/%s' %
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200376 (project_id, user_id, role_id), None)
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)
nayna-patel755d8142013-07-16 06:45:34 +0000379
380 def assign_user_role_on_domain(self, domain_id, user_id, role_id):
381 """Add roles to a user on a domain."""
382 resp, body = self.put('domains/%s/users/%s/roles/%s' %
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200383 (domain_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 list_user_roles_on_project(self, project_id, user_id):
388 """list roles of a user on a project."""
389 resp, body = self.get('projects/%s/users/%s/roles' %
390 (project_id, user_id))
David Kranze9d2f422014-07-02 13:57:41 -0400391 self.expected_success(200, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000392 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000393 return service_client.ResponseBodyList(resp, body['roles'])
nayna-patel755d8142013-07-16 06:45:34 +0000394
395 def list_user_roles_on_domain(self, domain_id, user_id):
396 """list roles of a user on a domain."""
397 resp, body = self.get('domains/%s/users/%s/roles' %
398 (domain_id, user_id))
David Kranze9d2f422014-07-02 13:57:41 -0400399 self.expected_success(200, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000400 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000401 return service_client.ResponseBodyList(resp, body['roles'])
nayna-patel755d8142013-07-16 06:45:34 +0000402
403 def revoke_role_from_user_on_project(self, project_id, user_id, role_id):
404 """Delete role of a user on a project."""
405 resp, body = self.delete('projects/%s/users/%s/roles/%s' %
406 (project_id, user_id, role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400407 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000408 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000409
410 def revoke_role_from_user_on_domain(self, domain_id, user_id, role_id):
411 """Delete role of a user on a domain."""
412 resp, body = self.delete('domains/%s/users/%s/roles/%s' %
413 (domain_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 assign_group_role_on_project(self, project_id, group_id, role_id):
418 """Add roles to a user on a project."""
419 resp, body = self.put('projects/%s/groups/%s/roles/%s' %
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200420 (project_id, group_id, role_id), None)
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_domain(self, domain_id, group_id, role_id):
425 """Add roles to a user on a domain."""
426 resp, body = self.put('domains/%s/groups/%s/roles/%s' %
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200427 (domain_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 list_group_roles_on_project(self, project_id, group_id):
432 """list roles of a user on a project."""
433 resp, body = self.get('projects/%s/groups/%s/roles' %
434 (project_id, group_id))
David Kranze9d2f422014-07-02 13:57:41 -0400435 self.expected_success(200, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000436 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000437 return service_client.ResponseBodyList(resp, body['roles'])
nayna-patel755d8142013-07-16 06:45:34 +0000438
439 def list_group_roles_on_domain(self, domain_id, group_id):
440 """list roles of a user on a domain."""
441 resp, body = self.get('domains/%s/groups/%s/roles' %
442 (domain_id, group_id))
David Kranze9d2f422014-07-02 13:57:41 -0400443 self.expected_success(200, resp.status)
nayna-patel755d8142013-07-16 06:45:34 +0000444 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000445 return service_client.ResponseBodyList(resp, body['roles'])
nayna-patel755d8142013-07-16 06:45:34 +0000446
447 def revoke_role_from_group_on_project(self, project_id, group_id, role_id):
448 """Delete role of a user on a project."""
449 resp, body = self.delete('projects/%s/groups/%s/roles/%s' %
450 (project_id, group_id, role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400451 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000452 return service_client.ResponseBody(resp, body)
nayna-patel755d8142013-07-16 06:45:34 +0000453
454 def revoke_role_from_group_on_domain(self, domain_id, group_id, role_id):
455 """Delete role of a user on a domain."""
456 resp, body = self.delete('domains/%s/groups/%s/roles/%s' %
457 (domain_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
Steven Hardybf70c5c2013-10-30 21:55:16 +0000461 def create_trust(self, trustor_user_id, trustee_user_id, project_id,
462 role_names, impersonation, expires_at):
463 """Creates a trust."""
464 roles = [{'name': n} for n in role_names]
465 post_body = {
466 'trustor_user_id': trustor_user_id,
467 'trustee_user_id': trustee_user_id,
468 'project_id': project_id,
469 'impersonation': impersonation,
470 'roles': roles,
471 'expires_at': expires_at
472 }
473 post_body = json.dumps({'trust': post_body})
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +0200474 resp, body = self.post('OS-TRUST/trusts', post_body)
David Kranze9d2f422014-07-02 13:57:41 -0400475 self.expected_success(201, resp.status)
Steven Hardybf70c5c2013-10-30 21:55:16 +0000476 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000477 return service_client.ResponseBody(resp, body['trust'])
Steven Hardybf70c5c2013-10-30 21:55:16 +0000478
479 def delete_trust(self, trust_id):
480 """Deletes a trust."""
481 resp, body = self.delete("OS-TRUST/trusts/%s" % trust_id)
David Kranze9d2f422014-07-02 13:57:41 -0400482 self.expected_success(204, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000483 return service_client.ResponseBody(resp, body)
Steven Hardybf70c5c2013-10-30 21:55:16 +0000484
485 def get_trusts(self, trustor_user_id=None, trustee_user_id=None):
486 """GET trusts."""
487 if trustor_user_id:
488 resp, body = self.get("OS-TRUST/trusts?trustor_user_id=%s"
489 % trustor_user_id)
490 elif trustee_user_id:
491 resp, body = self.get("OS-TRUST/trusts?trustee_user_id=%s"
492 % trustee_user_id)
493 else:
494 resp, body = self.get("OS-TRUST/trusts")
David Kranze9d2f422014-07-02 13:57:41 -0400495 self.expected_success(200, resp.status)
Steven Hardybf70c5c2013-10-30 21:55:16 +0000496 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000497 return service_client.ResponseBodyList(resp, body['trusts'])
Steven Hardybf70c5c2013-10-30 21:55:16 +0000498
499 def get_trust(self, trust_id):
500 """GET trust."""
501 resp, body = self.get("OS-TRUST/trusts/%s" % trust_id)
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.ResponseBody(resp, body['trust'])
Steven Hardybf70c5c2013-10-30 21:55:16 +0000505
506 def get_trust_roles(self, trust_id):
507 """GET roles delegated by a trust."""
508 resp, body = self.get("OS-TRUST/trusts/%s/roles" % 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.ResponseBodyList(resp, body['roles'])
Steven Hardybf70c5c2013-10-30 21:55:16 +0000512
513 def get_trust_role(self, trust_id, role_id):
514 """GET role delegated by a trust."""
515 resp, body = self.get("OS-TRUST/trusts/%s/roles/%s"
516 % (trust_id, role_id))
David Kranze9d2f422014-07-02 13:57:41 -0400517 self.expected_success(200, resp.status)
Steven Hardybf70c5c2013-10-30 21:55:16 +0000518 body = json.loads(body)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000519 return service_client.ResponseBody(resp, body['role'])
Steven Hardybf70c5c2013-10-30 21:55:16 +0000520
521 def check_trust_role(self, trust_id, role_id):
522 """HEAD Check if role is delegated by a trust."""
523 resp, body = self.head("OS-TRUST/trusts/%s/roles/%s"
524 % (trust_id, role_id))
Morgan Fainberg883311d2014-07-03 13:13:10 -0700525 self.expected_success(200, resp.status)
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000526 return service_client.ResponseBody(resp, body)