Allow os quota list query to filter by project
In the os quota list command, project parameter is completely ignored ending up in a request to all projects and then all quotas. This patch enables back the parameter and does a single call to quotas if specified. Change-Id: Ie17c256e2bdc307dcd94ad5be7abdbffa776d369 Story: 2007422 Task: 39043
This commit is contained in:
parent
962efd949f
commit
3e83e7471b
@ -274,9 +274,18 @@ class ListQuota(command.Lister, BaseQuota):
|
|||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
projects = self.app.client_manager.identity.projects.list()
|
|
||||||
result = []
|
result = []
|
||||||
project_ids = [getattr(p, 'id', '') for p in projects]
|
project_ids = []
|
||||||
|
if parsed_args.project is None:
|
||||||
|
for p in self.app.client_manager.identity.projects.list():
|
||||||
|
project_ids.append(getattr(p, 'id', ''))
|
||||||
|
else:
|
||||||
|
identity_client = self.app.client_manager.identity
|
||||||
|
project = utils.find_resource(
|
||||||
|
identity_client.projects,
|
||||||
|
parsed_args.project,
|
||||||
|
)
|
||||||
|
project_ids.append(getattr(project, 'id', ''))
|
||||||
|
|
||||||
if parsed_args.compute:
|
if parsed_args.compute:
|
||||||
if parsed_args.detail:
|
if parsed_args.detail:
|
||||||
|
@ -392,6 +392,29 @@ class TestQuotaList(TestQuota):
|
|||||||
parsed_args,
|
parsed_args,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_quota_list_compute_by_project(self):
|
||||||
|
# Two projects with non-default quotas
|
||||||
|
self.compute.quotas.get = mock.Mock(
|
||||||
|
side_effect=self.compute_quotas,
|
||||||
|
)
|
||||||
|
|
||||||
|
arglist = [
|
||||||
|
'--compute',
|
||||||
|
'--project', self.projects[0].name,
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('compute', True),
|
||||||
|
('project', self.projects[0].name),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
ret_quotas = list(data)
|
||||||
|
|
||||||
|
self.assertEqual(self.compute_column_header, columns)
|
||||||
|
self.assertEqual(self.compute_reference_data, ret_quotas[0])
|
||||||
|
self.assertEqual(1, len(ret_quotas))
|
||||||
|
|
||||||
def test_quota_list_network(self):
|
def test_quota_list_network(self):
|
||||||
# Two projects with non-default quotas
|
# Two projects with non-default quotas
|
||||||
self.network.get_quota = mock.Mock(
|
self.network.get_quota = mock.Mock(
|
||||||
@ -461,6 +484,29 @@ class TestQuotaList(TestQuota):
|
|||||||
self.assertEqual(self.network_reference_data, ret_quotas[0])
|
self.assertEqual(self.network_reference_data, ret_quotas[0])
|
||||||
self.assertEqual(1, len(ret_quotas))
|
self.assertEqual(1, len(ret_quotas))
|
||||||
|
|
||||||
|
def test_quota_list_network_by_project(self):
|
||||||
|
# Two projects with non-default quotas
|
||||||
|
self.network.get_quota = mock.Mock(
|
||||||
|
side_effect=self.network_quotas,
|
||||||
|
)
|
||||||
|
|
||||||
|
arglist = [
|
||||||
|
'--network',
|
||||||
|
'--project', self.projects[0].name,
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('network', True),
|
||||||
|
('project', self.projects[0].name),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
ret_quotas = list(data)
|
||||||
|
|
||||||
|
self.assertEqual(self.network_column_header, columns)
|
||||||
|
self.assertEqual(self.network_reference_data, ret_quotas[0])
|
||||||
|
self.assertEqual(1, len(ret_quotas))
|
||||||
|
|
||||||
def test_quota_list_volume(self):
|
def test_quota_list_volume(self):
|
||||||
# Two projects with non-default quotas
|
# Two projects with non-default quotas
|
||||||
self.volume.quotas.get = mock.Mock(
|
self.volume.quotas.get = mock.Mock(
|
||||||
@ -530,6 +576,29 @@ class TestQuotaList(TestQuota):
|
|||||||
self.assertEqual(self.volume_reference_data, ret_quotas[0])
|
self.assertEqual(self.volume_reference_data, ret_quotas[0])
|
||||||
self.assertEqual(1, len(ret_quotas))
|
self.assertEqual(1, len(ret_quotas))
|
||||||
|
|
||||||
|
def test_quota_list_volume_by_project(self):
|
||||||
|
# Two projects with non-default quotas
|
||||||
|
self.volume.quotas.get = mock.Mock(
|
||||||
|
side_effect=self.volume_quotas,
|
||||||
|
)
|
||||||
|
|
||||||
|
arglist = [
|
||||||
|
'--volume',
|
||||||
|
'--project', self.projects[0].name,
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('volume', True),
|
||||||
|
('project', self.projects[0].name),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
ret_quotas = list(data)
|
||||||
|
|
||||||
|
self.assertEqual(self.volume_column_header, columns)
|
||||||
|
self.assertEqual(self.volume_reference_data, ret_quotas[0])
|
||||||
|
self.assertEqual(1, len(ret_quotas))
|
||||||
|
|
||||||
|
|
||||||
class TestQuotaSet(TestQuota):
|
class TestQuotaSet(TestQuota):
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user