Skip to content

Commit d3691b8

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Allow os quota list query to filter by project"
2 parents abfca13 + 3e83e74 commit d3691b8

2 files changed

Lines changed: 80 additions & 2 deletions

File tree

openstackclient/common/quota.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,18 @@ def get_parser(self, prog_name):
274274
return parser
275275

276276
def take_action(self, parsed_args):
277-
projects = self.app.client_manager.identity.projects.list()
278277
result = []
279-
project_ids = [getattr(p, 'id', '') for p in projects]
278+
project_ids = []
279+
if parsed_args.project is None:
280+
for p in self.app.client_manager.identity.projects.list():
281+
project_ids.append(getattr(p, 'id', ''))
282+
else:
283+
identity_client = self.app.client_manager.identity
284+
project = utils.find_resource(
285+
identity_client.projects,
286+
parsed_args.project,
287+
)
288+
project_ids.append(getattr(project, 'id', ''))
280289

281290
if parsed_args.compute:
282291
if parsed_args.detail:

openstackclient/tests/unit/common/test_quota.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,29 @@ def test_quota_list_compute_no_project_5xx(self):
392392
parsed_args,
393393
)
394394

395+
def test_quota_list_compute_by_project(self):
396+
# Two projects with non-default quotas
397+
self.compute.quotas.get = mock.Mock(
398+
side_effect=self.compute_quotas,
399+
)
400+
401+
arglist = [
402+
'--compute',
403+
'--project', self.projects[0].name,
404+
]
405+
verifylist = [
406+
('compute', True),
407+
('project', self.projects[0].name),
408+
]
409+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
410+
411+
columns, data = self.cmd.take_action(parsed_args)
412+
ret_quotas = list(data)
413+
414+
self.assertEqual(self.compute_column_header, columns)
415+
self.assertEqual(self.compute_reference_data, ret_quotas[0])
416+
self.assertEqual(1, len(ret_quotas))
417+
395418
def test_quota_list_network(self):
396419
# Two projects with non-default quotas
397420
self.network.get_quota = mock.Mock(
@@ -461,6 +484,29 @@ def test_quota_list_network_no_project(self):
461484
self.assertEqual(self.network_reference_data, ret_quotas[0])
462485
self.assertEqual(1, len(ret_quotas))
463486

487+
def test_quota_list_network_by_project(self):
488+
# Two projects with non-default quotas
489+
self.network.get_quota = mock.Mock(
490+
side_effect=self.network_quotas,
491+
)
492+
493+
arglist = [
494+
'--network',
495+
'--project', self.projects[0].name,
496+
]
497+
verifylist = [
498+
('network', True),
499+
('project', self.projects[0].name),
500+
]
501+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
502+
503+
columns, data = self.cmd.take_action(parsed_args)
504+
ret_quotas = list(data)
505+
506+
self.assertEqual(self.network_column_header, columns)
507+
self.assertEqual(self.network_reference_data, ret_quotas[0])
508+
self.assertEqual(1, len(ret_quotas))
509+
464510
def test_quota_list_volume(self):
465511
# Two projects with non-default quotas
466512
self.volume.quotas.get = mock.Mock(
@@ -530,6 +576,29 @@ def test_quota_list_volume_no_project(self):
530576
self.assertEqual(self.volume_reference_data, ret_quotas[0])
531577
self.assertEqual(1, len(ret_quotas))
532578

579+
def test_quota_list_volume_by_project(self):
580+
# Two projects with non-default quotas
581+
self.volume.quotas.get = mock.Mock(
582+
side_effect=self.volume_quotas,
583+
)
584+
585+
arglist = [
586+
'--volume',
587+
'--project', self.projects[0].name,
588+
]
589+
verifylist = [
590+
('volume', True),
591+
('project', self.projects[0].name),
592+
]
593+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
594+
595+
columns, data = self.cmd.take_action(parsed_args)
596+
ret_quotas = list(data)
597+
598+
self.assertEqual(self.volume_column_header, columns)
599+
self.assertEqual(self.volume_reference_data, ret_quotas[0])
600+
self.assertEqual(1, len(ret_quotas))
601+
533602

534603
class TestQuotaSet(TestQuota):
535604

0 commit comments

Comments
 (0)