Updates client to work with keystone essex roles API routes.
Also adds pep8 to requirements since it was missing, and adds the automatically-created venv to the gitignore list. Change-Id: Iafa05c1889d7706b79d0f9392a9ac24f2f5a1719
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +1,5 @@ | |||||||
| .coverage | .coverage | ||||||
| .keystoneclient-venv | .venv | ||||||
| *,cover | *,cover | ||||||
| cover | cover | ||||||
| *.pyc | *.pyc | ||||||
|   | |||||||
| @@ -87,8 +87,10 @@ class Manager(object): | |||||||
|     def _delete(self, url): |     def _delete(self, url): | ||||||
|         resp, body = self.api.delete(url) |         resp, body = self.api.delete(url) | ||||||
|  |  | ||||||
|     def _update(self, url, body, response_key): |     def _update(self, url, body, response_key=None): | ||||||
|         resp, body = self.api.put(url, body=body) |         resp, body = self.api.put(url, body=body) | ||||||
|  |         # PUT requests may not return a body | ||||||
|  |         if body: | ||||||
|             return self.resource_class(self, body[response_key]) |             return self.resource_class(self, body[response_key]) | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -50,16 +50,43 @@ class RoleManager(base.ManagerWithFind): | |||||||
|         """ |         """ | ||||||
|         return self._list("/OS-KSADM/roles", "roles") |         return self._list("/OS-KSADM/roles", "roles") | ||||||
|  |  | ||||||
|     # FIXME(ja): finialize roles once finalized in keystone |     def roles_for_user(self, user, tenant=None): | ||||||
|     #            right now the only way to add/remove a tenant is to |         user_id = base.getid(user) | ||||||
|     #            give them a role within a project |         if tenant: | ||||||
|     def get_user_role_refs(self, user_id): |             tenant_id = base.getid(tenant) | ||||||
|         return self._list("/users/%s/roleRefs" % user_id, "roles") |             route = "/tenants/%s/users/%s/roles" | ||||||
|  |             return self._list(route % (tenant_id, user_id), "roles") | ||||||
|  |         else: | ||||||
|  |             return self._list("/users/%s/roles" % user_id, "roles") | ||||||
|  |  | ||||||
|     def add_user_to_tenant(self, tenant_id, user_id, role_id): |     def add_user_role(self, user, role, tenant=None): | ||||||
|         params = {"role": {"tenantId": tenant_id, "roleId": role_id}} |         """ Adds a role to a user. | ||||||
|         return self._create("/users/%s/roleRefs" % user_id, params, "role") |  | ||||||
|  |  | ||||||
|     def remove_user_from_tenant(self, tenant_id, user_id, role_id): |         If tenant is specified, the role is added just for that tenant, | ||||||
|         params = {"role": {"tenantId": tenant_id, "roleId": role_id}} |         otherwise the role is added globally. | ||||||
|         return self._delete("/users/%s/roleRefs/%s" % (user_id, role_id)) |         """ | ||||||
|  |         user_id = base.getid(user) | ||||||
|  |         role_id = base.getid(role) | ||||||
|  |         if tenant: | ||||||
|  |             route = "/tenants/%s/users/%s/roles/OS-KSADM/%s" | ||||||
|  |             params = (base.getid(tenant), user_id, role_id) | ||||||
|  |             return self._update(route % params, None, "role") | ||||||
|  |         else: | ||||||
|  |             route = "/users/%s/roles/OS-KSADM/%s" | ||||||
|  |             return self._update(route % (user_id, role_id), None, "roles") | ||||||
|  |  | ||||||
|  |     def remove_user_role(self, user, role, tenant=None): | ||||||
|  |         """ Removes a role from a user. | ||||||
|  |  | ||||||
|  |         If tenant is specified, the role is removed just for that tenant, | ||||||
|  |         otherwise the role is removed from the user's global roles. | ||||||
|  |         """ | ||||||
|  |         user_id = base.getid(user) | ||||||
|  |         role_id = base.getid(role) | ||||||
|  |         if tenant: | ||||||
|  |             route = "/tenants/%s/users/%s/roles/OS-KSADM/%s" | ||||||
|  |             params = (base.getid(tenant), user_id, role_id) | ||||||
|  |             return self._delete(route % params) | ||||||
|  |         else: | ||||||
|  |             route = "/users/%s/roles/OS-KSADM/%s" | ||||||
|  |             return self._delete(route % (user_id, role_id), "roles") | ||||||
|   | |||||||
| @@ -202,32 +202,20 @@ def do_role_delete(kc, args): | |||||||
|         print 'Unable to delete role.' |         print 'Unable to delete role.' | ||||||
|  |  | ||||||
|  |  | ||||||
| @utils.arg('id', metavar='<user_id>', help='ID of User', nargs='?') | # TODO(jakedahn): refactor this to allow role, user, and tenant names. | ||||||
| def do_user_roles(kc, args): | @utils.arg('user_id', metavar='<user_id>', help='ID of User', nargs='?') | ||||||
|     roles = kc.roles.get_user_role_refs(args.id) | @utils.arg('role_id', metavar='<role_id>', help='ID of Role', nargs='?') | ||||||
|     for role in roles: | @utils.arg('tenant_id', metavar='<tenant_id>', help='ID of Tenant', nargs='?') | ||||||
|         try: | def do_add_user_role(kc, args): | ||||||
|             role.tenant = kc.tenants.get(role.tenantId).name |     kc.roles.add_user_role(args.user_id, args.role_id, args.tenant_id) | ||||||
|         except Exception, e: |  | ||||||
|             role.tenant = 'n/a' |  | ||||||
|         role.name = kc.roles.get(role.roleId).name |  | ||||||
|     utils.print_list(roles, ['tenant', 'name']) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # TODO(jakedahn): refactor this to allow role, user, and tenant names. | # TODO(jakedahn): refactor this to allow role, user, and tenant names. | ||||||
| @utils.arg('tenant_id', metavar='<tenant_id>', help='ID of Tenant', nargs='?') |  | ||||||
| @utils.arg('user_id', metavar='<user_id>', help='ID of User', nargs='?') | @utils.arg('user_id', metavar='<user_id>', help='ID of User', nargs='?') | ||||||
| @utils.arg('role_id', metavar='<role_id>', help='ID of Role', nargs='?') | @utils.arg('role_id', metavar='<role_id>', help='ID of Role', nargs='?') | ||||||
| def do_user_add_tenant_role(kc, args): |  | ||||||
|     kc.roles.add_user_to_tenant(args.tenant_id, args.user_id, args.role_id) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # TODO(jakedahn): refactor this to allow role, user, and tenant names. |  | ||||||
| @utils.arg('tenant_id', metavar='<tenant_id>', help='ID of Tenant', nargs='?') | @utils.arg('tenant_id', metavar='<tenant_id>', help='ID of Tenant', nargs='?') | ||||||
| @utils.arg('user_id', metavar='<user_id>', help='ID of User', nargs='?') | def do_remove_user_role(kc, args): | ||||||
| @utils.arg('role_id', metavar='<role_id>', help='ID of Role', nargs='?') |     kc.roles.remove_user_role(args.user_id, args.role_id, args.tenant_id) | ||||||
| def do_user_remove_tenant_role(kc, args): |  | ||||||
|     kc.roles.remove_user_to_tenant(args.tenant_id, args.user_id, args.role_id) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @utils.arg('tenant_id', metavar='<tenant_id>', help='ID of Tenant', nargs='?') | @utils.arg('tenant_id', metavar='<tenant_id>', help='ID of Tenant', nargs='?') | ||||||
|   | |||||||
| @@ -30,8 +30,18 @@ class Tenant(base.Resource): | |||||||
|         # FIXME(ja): set the attributes in this object if successful |         # FIXME(ja): set the attributes in this object if successful | ||||||
|         return self.manager.update(self.id, description, enabled) |         return self.manager.update(self.id, description, enabled) | ||||||
|  |  | ||||||
|     def add_user(self, user): |     def add_user(self, user, role): | ||||||
|         return self.manager.add_user_to_tenant(self.id, base.getid(user)) |         return self.manager.api.roles.add_user_to_tenant(self.id, | ||||||
|  |                                                          base.getid(user), | ||||||
|  |                                                          base.getid(role)) | ||||||
|  |  | ||||||
|  |     def remove_user(self, user, role): | ||||||
|  |         return self.manager.api.roles.remove_user_from_tenant(self.id, | ||||||
|  |                                                               base.getid(user), | ||||||
|  |                                                               base.getid(role)) | ||||||
|  |  | ||||||
|  |     def list_users(self): | ||||||
|  |         return self.manager.list_users(self.id) | ||||||
|  |  | ||||||
|  |  | ||||||
| class TenantManager(base.ManagerWithFind): | class TenantManager(base.ManagerWithFind): | ||||||
| @@ -71,7 +81,7 @@ class TenantManager(base.ManagerWithFind): | |||||||
|     def update(self, tenant_id, tenant_name=None, description=None, |     def update(self, tenant_id, tenant_name=None, description=None, | ||||||
|                enabled=None): |                enabled=None): | ||||||
|         """ |         """ | ||||||
|         update a tenant with a new name and description |         Update a tenant with a new name and description. | ||||||
|         """ |         """ | ||||||
|         body = {"tenant": {'id': tenant_id}} |         body = {"tenant": {'id': tenant_id}} | ||||||
|         if tenant_name is not None: |         if tenant_name is not None: | ||||||
| @@ -88,3 +98,19 @@ class TenantManager(base.ManagerWithFind): | |||||||
|         Delete a tenant. |         Delete a tenant. | ||||||
|         """ |         """ | ||||||
|         return self._delete("/tenants/%s" % (base.getid(tenant))) |         return self._delete("/tenants/%s" % (base.getid(tenant))) | ||||||
|  |  | ||||||
|  |     def list_users(self, tenant): | ||||||
|  |         """ List users for a tenant. """ | ||||||
|  |         return self.api.users.list(base.getid(tenant)) | ||||||
|  |  | ||||||
|  |     def add_user(self, tenant, user, role): | ||||||
|  |         """ Add a user to a tenant with the given role. """ | ||||||
|  |         return self.api.roles.add_user_to_tenant(base.getid(tenant), | ||||||
|  |                                                  base.getid(user), | ||||||
|  |                                                  base.getid(role)) | ||||||
|  |  | ||||||
|  |     def remove_user(self, tenant, user, role): | ||||||
|  |         """ Remove the specified role from the user on the tenant. """ | ||||||
|  |         return self.api.roles.remove_user_from_tenant(base.getid(tenant), | ||||||
|  |                                                       base.getid(user), | ||||||
|  |                                                       base.getid(role)) | ||||||
|   | |||||||
| @@ -26,6 +26,9 @@ class User(base.Resource): | |||||||
|     def delete(self): |     def delete(self): | ||||||
|         return self.manager.delete(self) |         return self.manager.delete(self) | ||||||
|  |  | ||||||
|  |     def list_roles(self, tenant=None): | ||||||
|  |         return self.manager.list_roles(self.id, base.getid(tenant)) | ||||||
|  |  | ||||||
|  |  | ||||||
| class UserManager(base.ManagerWithFind): | class UserManager(base.ManagerWithFind): | ||||||
|     resource_class = User |     resource_class = User | ||||||
| @@ -114,3 +117,7 @@ class UserManager(base.ManagerWithFind): | |||||||
|         else: |         else: | ||||||
|             return self._list("/tenants/%s/users%s" % (tenant_id, query), |             return self._list("/tenants/%s/users%s" % (tenant_id, query), | ||||||
|                               "users") |                               "users") | ||||||
|  |  | ||||||
|  |     def list_roles(self, user, tenant=None): | ||||||
|  |         return self.api.roles.roles_for_user(base.getid(user), | ||||||
|  |                                              base.getid(tenant)) | ||||||
|   | |||||||
| @@ -4,5 +4,6 @@ httplib2 | |||||||
| mock | mock | ||||||
| mox | mox | ||||||
| nose | nose | ||||||
|  | pep8 | ||||||
| prettytable | prettytable | ||||||
| simplejson | simplejson | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Gabriel Hurley
					Gabriel Hurley