identity v3 allow project list filtering by domain
The underlying keystoneclient interface allows filtering by domain, so support it in the cli interface because it makes project list much nicer to use in a multi-domain deployment. Change-Id: If3f5cf1205c1e9cf314f8286a3ae81bda4456b8f Closes-Bug: #1289513
This commit is contained in:
parent
ce63fa0121
commit
0c0803d363
openstackclient
@ -140,15 +140,27 @@ class ListProject(lister.Lister):
|
||||
default=False,
|
||||
help='List additional fields in output',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--domain',
|
||||
metavar='<project-domain>',
|
||||
help='Filter by a specific domain',
|
||||
)
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
self.log.debug('take_action(%s)' % parsed_args)
|
||||
identity_client = self.app.client_manager.identity
|
||||
if parsed_args.long:
|
||||
columns = ('ID', 'Name', 'Domain ID', 'Description', 'Enabled')
|
||||
else:
|
||||
columns = ('ID', 'Name')
|
||||
data = self.app.client_manager.identity.projects.list()
|
||||
kwargs = {}
|
||||
if parsed_args.domain:
|
||||
kwargs['domain'] = utils.find_resource(
|
||||
identity_client.domains,
|
||||
parsed_args.domain,
|
||||
).id
|
||||
data = identity_client.projects.list(**kwargs)
|
||||
return (columns,
|
||||
(utils.get_item_properties(
|
||||
s, columns,
|
||||
|
@ -376,6 +376,35 @@ class TestProjectList(TestProject):
|
||||
), )
|
||||
self.assertEqual(tuple(data), datalist)
|
||||
|
||||
def test_project_list_domain(self):
|
||||
arglist = [
|
||||
'--domain', identity_fakes.domain_name,
|
||||
]
|
||||
verifylist = [
|
||||
('domain', identity_fakes.domain_name),
|
||||
]
|
||||
|
||||
self.domains_mock.get.return_value = fakes.FakeResource(
|
||||
None,
|
||||
copy.deepcopy(identity_fakes.DOMAIN),
|
||||
loaded=True,
|
||||
)
|
||||
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
# DisplayCommandBase.take_action() returns two tuples
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
self.projects_mock.list.assert_called_with(
|
||||
domain=identity_fakes.domain_id)
|
||||
|
||||
collist = ('ID', 'Name')
|
||||
self.assertEqual(columns, collist)
|
||||
datalist = ((
|
||||
identity_fakes.project_id,
|
||||
identity_fakes.project_name,
|
||||
), )
|
||||
self.assertEqual(tuple(data), datalist)
|
||||
|
||||
|
||||
class TestProjectSet(TestProject):
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user