diff options
Diffstat (limited to 'openstackclient/identity/v2_0/user.py')
| -rw-r--r-- | openstackclient/identity/v2_0/user.py | 107 |
1 files changed, 84 insertions, 23 deletions
diff --git a/openstackclient/identity/v2_0/user.py b/openstackclient/identity/v2_0/user.py index 8c8e2622..78f21646 100644 --- a/openstackclient/identity/v2_0/user.py +++ b/openstackclient/identity/v2_0/user.py @@ -46,9 +46,10 @@ class CreateUser(show.ShowOne): metavar='<user-email>', help='New user email address') parser.add_argument( - '--tenant', - metavar='<tenant>', - help='New default tenant name or ID') + '--project', + metavar='<project>', + help='Set default project (name or ID)', + ) enable_group = parser.add_mutually_exclusive_group() enable_group.add_argument( '--enable', @@ -66,17 +67,23 @@ class CreateUser(show.ShowOne): def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity - if parsed_args.tenant: - tenant_id = utils.find_resource(identity_client.tenants, - parsed_args.tenant).id + if parsed_args.project: + project_id = utils.find_resource( + identity_client.tenants, + parsed_args.project, + ).id else: - tenant_id = None + project_id = None user = identity_client.users.create( parsed_args.name, parsed_args.password, parsed_args.email, - tenant_id=tenant_id, - enabled=parsed_args.enabled) + tenant_id=project_id, + enabled=parsed_args.enabled, + ) + user._info.update( + {'project_id': user._info.pop('tenantId')} + ) info = {} info.update(user._info) @@ -112,9 +119,10 @@ class ListUser(lister.Lister): def get_parser(self, prog_name): parser = super(ListUser, self).get_parser(prog_name) parser.add_argument( - '--tenant', - metavar='<tenant>', - help='Name or ID of tenant to filter users') + '--project', + metavar='<project>', + help='Filter users by project (name or ID)', + ) parser.add_argument( '--long', action='store_true', @@ -124,15 +132,57 @@ class ListUser(lister.Lister): def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) + + def _format_project(project): + if not project: + return "" + if project in project_cache.keys(): + return project_cache[project].name + else: + return project + if parsed_args.long: - columns = ('ID', 'Name', 'Tenant Id', 'Email', 'Enabled') + columns = ( + 'ID', + 'Name', + 'tenantId', + 'Email', + 'Enabled', + ) + column_headers = ( + 'ID', + 'Name', + 'Project', + 'Email', + 'Enabled', + ) + # Cache the project list + project_cache = {} + try: + for p in self.app.client_manager.identity.tenants.list(): + project_cache[p.id] = p + except Exception: + # Just forget it if there's any trouble + pass else: - columns = ('ID', 'Name') + columns = column_headers = ('ID', 'Name') data = self.app.client_manager.identity.users.list() - return (columns, + + if parsed_args.long: + # FIXME(dtroyer): Sometimes user objects have 'tenant_id' instead + # of 'tenantId'. Why? Dunno yet, but until that + # is fixed we need to handle it; auth_token.py + # only looks for 'tenantId'. + for d in data: + if 'tenant_id' in d._info: + d._info['tenantId'] = d._info.pop('tenant_id') + d._add_details(d._info) + + return (column_headers, (utils.get_item_properties( s, columns, - formatters={}, + mixed_case_fields=('tenantId',), + formatters={'tenantId': _format_project}, ) for s in data)) @@ -160,9 +210,10 @@ class SetUser(command.Command): metavar='<user-email>', help='New user email address') parser.add_argument( - '--tenant', - metavar='<tenant>', - help='New default tenant name or ID') + '--project', + metavar='<project>', + help='New default project (name or ID)', + ) enable_group = parser.add_mutually_exclusive_group() enable_group.add_argument( '--enable', @@ -186,10 +237,12 @@ class SetUser(command.Command): kwargs['name'] = parsed_args.name if parsed_args.email: kwargs['email'] = parsed_args.email - if parsed_args.tenant: - tenant_id = utils.find_resource(identity_client.tenants, - parsed_args.tenant).id - kwargs['tenantId'] = tenant_id + if parsed_args.project: + project = utils.find_resource( + identity_client.tenants, + parsed_args.project, + ) + kwargs['tenantId'] = project.id if 'enabled' in parsed_args: kwargs['enabled'] = parsed_args.enabled @@ -217,6 +270,14 @@ class ShowUser(show.ShowOne): self.log.debug('take_action(%s)' % parsed_args) identity_client = self.app.client_manager.identity user = utils.find_resource(identity_client.users, parsed_args.user) + if 'tenantId' in user._info: + user._info.update( + {'project_id': user._info.pop('tenantId')} + ) + if 'tenant_id' in user._info: + user._info.update( + {'project_id': user._info.pop('tenant_id')} + ) info = {} info.update(user._info) |
