summaryrefslogtreecommitdiff
path: root/openstackclient/identity/v2_0/user.py
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/identity/v2_0/user.py')
-rw-r--r--openstackclient/identity/v2_0/user.py107
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)