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:
Steven Hardy 2014-03-07 18:25:41 +00:00
parent ce63fa0121
commit 0c0803d363
2 changed files with 42 additions and 1 deletions
openstackclient
identity/v3
tests/identity/v3

@ -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):