Skip to content

Commit c6cc1d7

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Refactor role list subcommand for identity v3 api"
2 parents 0a491b2 + f78a3f1 commit c6cc1d7

5 files changed

Lines changed: 302 additions & 333 deletions

File tree

‎openstackclient/identity/v3/group.py‎

Lines changed: 5 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -176,23 +176,6 @@ def get_parser(self, prog_name):
176176
nargs='?',
177177
help='Name or ID of group to list [required with --role]',
178178
)
179-
parser.add_argument(
180-
'--role',
181-
action='store_true',
182-
default=False,
183-
help='List the roles assigned to <group>',
184-
)
185-
domain_or_project = parser.add_mutually_exclusive_group()
186-
domain_or_project.add_argument(
187-
'--domain',
188-
metavar='<domain>',
189-
help='Filter list by <domain> [Only valid with --role]',
190-
)
191-
domain_or_project.add_argument(
192-
'--project',
193-
metavar='<project>',
194-
help='Filter list by <project> [Only valid with --role]',
195-
)
196179
parser.add_argument(
197180
'--long',
198181
action='store_true',
@@ -205,65 +188,12 @@ def take_action(self, parsed_args):
205188
self.log.debug('take_action(%s)', parsed_args)
206189
identity_client = self.app.client_manager.identity
207190

208-
if parsed_args.role:
209-
# List roles belonging to group
210-
211-
# Group is required here, bail if it is not supplied
212-
if not parsed_args.group:
213-
sys.stderr.write('Error: Group must be specified')
214-
# TODO(dtroyer): This lists the commands...I want it to
215-
# show the help for _this_ command.
216-
self.app.DeferredHelpAction(
217-
self.app.parser,
218-
self.app.parser,
219-
None,
220-
None,
221-
)
222-
return ([], [])
223-
224-
group = utils.find_resource(
225-
identity_client.groups,
226-
parsed_args.group,
227-
)
228-
229-
if parsed_args.domain:
230-
columns = ('ID', 'Name', 'Domain', 'Group')
231-
domain = utils.find_resource(
232-
identity_client.domains,
233-
parsed_args.domain,
234-
)
235-
data = identity_client.roles.list(
236-
group=group,
237-
domain=domain,
238-
)
239-
for group_role in data:
240-
group_role.group = group.name
241-
group_role.domain = domain.name
242-
elif parsed_args.project:
243-
columns = ('ID', 'Name', 'Project', 'Group')
244-
project = utils.find_resource(
245-
identity_client.projects,
246-
parsed_args.project,
247-
)
248-
data = identity_client.roles.list(
249-
group=group,
250-
project=project,
251-
)
252-
for group_role in data:
253-
group_role.group = group.name
254-
group_role.project = project.name
255-
else:
256-
# TODO(dtroyer): raise exception here, this really is an error
257-
sys.stderr.write("Error: Must specify --domain or --project "
258-
"with --role\n")
259-
return ([], [])
191+
# List groups
192+
if parsed_args.long:
193+
columns = ('ID', 'Name', 'Domain ID', 'Description')
260194
else:
261-
# List groups
262-
if parsed_args.long:
263-
columns = ('ID', 'Name', 'Domain ID', 'Description')
264-
else:
265-
columns = ('ID', 'Name')
266-
data = identity_client.groups.list()
195+
columns = ('ID', 'Name')
196+
data = identity_client.groups.list()
267197

268198
return (columns,
269199
(utils.get_item_properties(

‎openstackclient/identity/v3/role.py‎

Lines changed: 103 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,110 @@ class ListRole(lister.Lister):
192192

193193
log = logging.getLogger(__name__ + '.ListRole')
194194

195+
def get_parser(self, prog_name):
196+
parser = super(ListRole, self).get_parser(prog_name)
197+
domain_or_project = parser.add_mutually_exclusive_group()
198+
domain_or_project.add_argument(
199+
'--domain',
200+
metavar='<domain>',
201+
help='Filter role list by <domain>',
202+
)
203+
domain_or_project.add_argument(
204+
'--project',
205+
metavar='<project>',
206+
help='Filter role list by <project>',
207+
)
208+
user_or_group = parser.add_mutually_exclusive_group()
209+
user_or_group.add_argument(
210+
'--user',
211+
metavar='<user>',
212+
help='Name or ID of user to list roles asssigned to',
213+
)
214+
user_or_group.add_argument(
215+
'--group',
216+
metavar='<group>',
217+
help='Name or ID of group to list roles asssigned to',
218+
)
219+
return parser
220+
195221
def take_action(self, parsed_args):
196-
self.log.debug('take_action(%s)', parsed_args)
197-
columns = ('ID', 'Name')
198-
data = self.app.client_manager.identity.roles.list()
222+
self.log.debug('take_action(%s)' % parsed_args)
223+
identity_client = self.app.client_manager.identity
224+
225+
if parsed_args.user:
226+
user = utils.find_resource(
227+
identity_client.users,
228+
parsed_args.user,
229+
)
230+
elif parsed_args.group:
231+
group = utils.find_resource(
232+
identity_client.groups,
233+
parsed_args.group,
234+
)
235+
236+
if parsed_args.domain:
237+
domain = utils.find_resource(
238+
identity_client.domains,
239+
parsed_args.domain,
240+
)
241+
elif parsed_args.project:
242+
project = utils.find_resource(
243+
identity_client.projects,
244+
parsed_args.project,
245+
)
246+
247+
# no user or group specified, list all roles in the system
248+
if not parsed_args.user and not parsed_args.group:
249+
columns = ('ID', 'Name')
250+
data = identity_client.roles.list()
251+
elif parsed_args.user and parsed_args.domain:
252+
columns = ('ID', 'Name', 'Domain', 'User')
253+
data = identity_client.roles.list(
254+
user=user,
255+
domain=domain,
256+
)
257+
for user_role in data:
258+
user_role.user = user.name
259+
user_role.domain = domain.name
260+
elif parsed_args.user and parsed_args.project:
261+
columns = ('ID', 'Name', 'Project', 'User')
262+
data = identity_client.roles.list(
263+
user=user,
264+
project=project,
265+
)
266+
for user_role in data:
267+
user_role.user = user.name
268+
user_role.project = project.name
269+
elif parsed_args.user:
270+
columns = ('ID', 'Name')
271+
data = identity_client.roles.list(
272+
user=user,
273+
domain='default',
274+
)
275+
elif parsed_args.group and parsed_args.domain:
276+
columns = ('ID', 'Name', 'Domain', 'Group')
277+
data = identity_client.roles.list(
278+
group=group,
279+
domain=domain,
280+
)
281+
for group_role in data:
282+
group_role.group = group.name
283+
group_role.domain = domain.name
284+
elif parsed_args.group and parsed_args.project:
285+
columns = ('ID', 'Name', 'Project', 'Group')
286+
data = identity_client.roles.list(
287+
group=group,
288+
project=project,
289+
)
290+
for group_role in data:
291+
group_role.group = group.name
292+
group_role.project = project.name
293+
else:
294+
sys.stderr.write("Error: If a user or group is specified, either "
295+
"--domain or --project must also be specified to "
296+
"list role grants.\n")
297+
return ([], [])
298+
199299
return (columns,
200300
(utils.get_item_properties(
201301
s, columns,

‎openstackclient/identity/v3/user.py‎

Lines changed: 7 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import logging
1919
import six
20-
import sys
2120

2221
from cliff import command
2322
from cliff import lister
@@ -161,23 +160,6 @@ def get_parser(self, prog_name):
161160
nargs='?',
162161
help='Name or ID of user to list [required with --role]',
163162
)
164-
parser.add_argument(
165-
'--role',
166-
action='store_true',
167-
default=False,
168-
help='List the roles assigned to <user>',
169-
)
170-
domain_or_project = parser.add_mutually_exclusive_group()
171-
domain_or_project.add_argument(
172-
'--domain',
173-
metavar='<domain>',
174-
help='Filter list by <domain> [Only valid with --role]',
175-
)
176-
domain_or_project.add_argument(
177-
'--project',
178-
metavar='<project>',
179-
help='Filter list by <project> [Only valid with --role]',
180-
)
181163
parser.add_argument(
182164
'--long',
183165
action='store_true',
@@ -187,70 +169,15 @@ def get_parser(self, prog_name):
187169
return parser
188170

189171
def take_action(self, parsed_args):
190-
self.log.debug('take_action(%s)', parsed_args)
191-
identity_client = self.app.client_manager.identity
172+
self.log.debug('take_action(%s)' % parsed_args)
192173

193-
if parsed_args.role:
194-
# List roles belonging to user
195-
196-
# User is required here, bail if it is not supplied
197-
if not parsed_args.user:
198-
sys.stderr.write('Error: User must be specified')
199-
return ([], [])
200-
201-
user = utils.find_resource(
202-
identity_client.users,
203-
parsed_args.user,
204-
)
205-
206-
# List a user's roles
207-
if not parsed_args.domain and not parsed_args.project:
208-
columns = ('ID', 'Name')
209-
data = identity_client.roles.list(
210-
user=user,
211-
domain='default',
212-
)
213-
# List a user's roles on a domain
214-
elif parsed_args.user and parsed_args.domain:
215-
columns = ('ID', 'Name', 'Domain', 'User')
216-
domain = utils.find_resource(
217-
identity_client.domains,
218-
parsed_args.domain,
219-
)
220-
data = identity_client.roles.list(
221-
user=user,
222-
domain=domain,
223-
)
224-
for user_role in data:
225-
user_role.user = user.name
226-
user_role.domain = domain.name
227-
# List a user's roles on a project
228-
elif parsed_args.user and parsed_args.project:
229-
columns = ('ID', 'Name', 'Project', 'User')
230-
project = utils.find_resource(
231-
identity_client.projects,
232-
parsed_args.project,
233-
)
234-
data = identity_client.roles.list(
235-
user=user,
236-
project=project,
237-
)
238-
for user_role in data:
239-
user_role.user = user.name
240-
user_role.project = project.name
241-
else:
242-
# TODO(dtroyer): raise exception here, this really is an error
243-
sys.stderr.write("Error: Must specify --domain or --project "
244-
"with --role\n")
245-
return ([], [])
174+
# List users
175+
if parsed_args.long:
176+
columns = ('ID', 'Name', 'Project Id', 'Domain Id',
177+
'Description', 'Email', 'Enabled')
246178
else:
247-
# List users
248-
if parsed_args.long:
249-
columns = ('ID', 'Name', 'Project Id', 'Domain Id',
250-
'Description', 'Email', 'Enabled')
251-
else:
252-
columns = ('ID', 'Name')
253-
data = self.app.client_manager.identity.users.list()
179+
columns = ('ID', 'Name')
180+
data = self.app.client_manager.identity.users.list()
254181

255182
return (columns,
256183
(utils.get_item_properties(

0 commit comments

Comments
 (0)