Skip to content

Commit ccd2d65

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Fix openstack quota set/show --class not work"
2 parents 43f6b95 + 2a01ede commit ccd2d65

File tree

4 files changed

+97
-29
lines changed

4 files changed

+97
-29
lines changed

openstackclient/common/quota.py

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -154,36 +154,34 @@ def take_action(self, parsed_args):
154154
if value is not None:
155155
compute_kwargs[k] = value
156156

157-
if parsed_args.project:
158-
project = utils.find_resource(
159-
identity_client.projects,
160-
parsed_args.project,
161-
)
162-
163157
if parsed_args.quota_class:
164158
if compute_kwargs:
165159
compute_client.quota_classes.update(
166-
project.id,
160+
parsed_args.project,
167161
**compute_kwargs)
168162
if volume_kwargs:
169163
volume_client.quota_classes.update(
170-
project.id,
164+
parsed_args.project,
171165
**volume_kwargs)
172166
if network_kwargs:
173167
sys.stderr.write("Network quotas are ignored since quota class"
174168
"is not supported.")
175169
else:
170+
project = utils.find_resource(
171+
identity_client.projects,
172+
parsed_args.project,
173+
).id
176174
if compute_kwargs:
177175
compute_client.quotas.update(
178-
project.id,
176+
project,
179177
**compute_kwargs)
180178
if volume_kwargs:
181179
volume_client.quotas.update(
182-
project.id,
180+
project,
183181
**volume_kwargs)
184182
if network_kwargs:
185183
network_client.update_quota(
186-
project.id,
184+
project,
187185
**network_kwargs)
188186

189187

@@ -230,15 +228,15 @@ def _get_project(self, parsed_args):
230228
return project
231229

232230
def get_compute_volume_quota(self, client, parsed_args):
233-
project = self._get_project(parsed_args)
234-
235231
try:
236232
if parsed_args.quota_class:
237-
quota = client.quota_classes.get(project)
238-
elif parsed_args.default:
239-
quota = client.quotas.defaults(project)
233+
quota = client.quota_classes.get(parsed_args.project)
240234
else:
241-
quota = client.quotas.get(project)
235+
project = self._get_project(parsed_args)
236+
if parsed_args.default:
237+
quota = client.quotas.defaults(project)
238+
else:
239+
quota = client.quotas.get(project)
242240
except Exception as e:
243241
if type(e).__name__ == 'EndpointNotFound':
244242
return {}

openstackclient/tests/functional/common/test_quota.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ def setUpClass(cls):
2626
cls.get_openstack_configuration_value('auth.project_name')
2727

2828
def test_quota_set(self):
29-
self.openstack('quota set --instances 11 --volumes 11 --networks 11 '
30-
+ self.PROJECT_NAME)
29+
self.openstack('quota set --instances 11 --volumes 11 --networks 11 ' +
30+
self.PROJECT_NAME)
3131
opts = self.get_opts(self.EXPECTED_FIELDS)
3232
raw_output = self.openstack('quota show ' + self.PROJECT_NAME + opts)
3333
self.assertEqual("11\n11\n11\n", raw_output)
@@ -51,3 +51,12 @@ def test_quota_show_with_class_option(self):
5151
raw_output = self.openstack('quota show --class')
5252
for expected_field in self.EXPECTED_CLASS_FIELDS:
5353
self.assertIn(expected_field, raw_output)
54+
55+
def test_quota_class_set(self):
56+
class_name = 'default'
57+
class_expected_fields = ['instances', 'volumes']
58+
self.openstack('quota set --instances 11 --volumes 11 --class ' +
59+
class_name)
60+
opts = self.get_opts(class_expected_fields)
61+
raw_output = self.openstack('quota show --class ' + class_name + opts)
62+
self.assertEqual("11\n11\n", raw_output)

openstackclient/tests/unit/common/test_quota.py

Lines changed: 67 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,18 @@ def setUp(self):
8282
loaded=True,
8383
)
8484

85+
self.quotas_class_mock.update.return_value = FakeQuotaResource(
86+
None,
87+
copy.deepcopy(compute_fakes.QUOTA),
88+
loaded=True,
89+
)
90+
91+
self.volume_quotas_class_mock.update.return_value = FakeQuotaResource(
92+
None,
93+
copy.deepcopy(compute_fakes.QUOTA),
94+
loaded=True,
95+
)
96+
8597
self.network_mock = self.app.client_manager.network
8698
self.network_mock.update_quota = mock.Mock()
8799

@@ -294,27 +306,72 @@ def test_quota_set_network(self):
294306

295307
def test_quota_set_with_class(self):
296308
arglist = [
309+
'--injected-files', str(compute_fakes.injected_file_num),
310+
'--injected-file-size', str(compute_fakes.injected_file_size_num),
311+
'--injected-path-size', str(compute_fakes.injected_path_size_num),
312+
'--key-pairs', str(compute_fakes.key_pair_num),
313+
'--cores', str(compute_fakes.core_num),
314+
'--ram', str(compute_fakes.ram_num),
297315
'--instances', str(compute_fakes.instance_num),
316+
'--properties', str(compute_fakes.property_num),
317+
'--server-groups', str(compute_fakes.servgroup_num),
318+
'--server-group-members', str(compute_fakes.servgroup_members_num),
319+
'--gigabytes', str(compute_fakes.floating_ip_num),
320+
'--snapshots', str(compute_fakes.fix_ip_num),
298321
'--volumes', str(volume_fakes.QUOTA['volumes']),
299322
'--network', str(network_fakes.QUOTA['network']),
300-
'--class',
301-
identity_fakes.project_name,
323+
'--class', identity_fakes.project_name,
302324
]
303325
verifylist = [
326+
('injected_files', compute_fakes.injected_file_num),
327+
('injected_file_content_bytes',
328+
compute_fakes.injected_file_size_num),
329+
('injected_file_path_bytes', compute_fakes.injected_path_size_num),
330+
('key_pairs', compute_fakes.key_pair_num),
331+
('cores', compute_fakes.core_num),
332+
('ram', compute_fakes.ram_num),
304333
('instances', compute_fakes.instance_num),
334+
('metadata_items', compute_fakes.property_num),
335+
('server_groups', compute_fakes.servgroup_num),
336+
('server_group_members', compute_fakes.servgroup_members_num),
337+
('gigabytes', compute_fakes.floating_ip_num),
338+
('snapshots', compute_fakes.fix_ip_num),
305339
('volumes', volume_fakes.QUOTA['volumes']),
306340
('network', network_fakes.QUOTA['network']),
341+
('project', identity_fakes.project_name),
307342
('quota_class', True),
308343
]
344+
309345
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
346+
310347
result = self.cmd.take_action(parsed_args)
311-
self.quotas_class_mock.update.assert_called_once_with(
312-
identity_fakes.project_id,
313-
**{'instances': compute_fakes.instance_num}
348+
349+
kwargs_compute = {
350+
'injected_files': compute_fakes.injected_file_num,
351+
'injected_file_content_bytes':
352+
compute_fakes.injected_file_size_num,
353+
'injected_file_path_bytes': compute_fakes.injected_path_size_num,
354+
'key_pairs': compute_fakes.key_pair_num,
355+
'cores': compute_fakes.core_num,
356+
'ram': compute_fakes.ram_num,
357+
'instances': compute_fakes.instance_num,
358+
'metadata_items': compute_fakes.property_num,
359+
'server_groups': compute_fakes.servgroup_num,
360+
'server_group_members': compute_fakes.servgroup_members_num,
361+
}
362+
kwargs_volume = {
363+
'gigabytes': compute_fakes.floating_ip_num,
364+
'snapshots': compute_fakes.fix_ip_num,
365+
'volumes': volume_fakes.QUOTA['volumes'],
366+
}
367+
368+
self.quotas_class_mock.update.assert_called_with(
369+
identity_fakes.project_name,
370+
**kwargs_compute
314371
)
315-
self.volume_quotas_class_mock.update.assert_called_once_with(
316-
identity_fakes.project_id,
317-
**{'volumes': volume_fakes.QUOTA['volumes']}
372+
self.volume_quotas_class_mock.update.assert_called_with(
373+
identity_fakes.project_name,
374+
**kwargs_volume
318375
)
319376
self.assertNotCalled(self.network_mock.update_quota)
320377
self.assertIsNone(result)
@@ -444,9 +501,9 @@ def test_quota_show_with_class(self):
444501
self.cmd.take_action(parsed_args)
445502

446503
self.quotas_class_mock.get.assert_called_once_with(
447-
identity_fakes.project_id)
504+
identity_fakes.project_name)
448505
self.volume_quotas_class_mock.get.assert_called_once_with(
449-
identity_fakes.project_id)
506+
identity_fakes.project_name)
450507
self.assertNotCalled(self.network.get_quota)
451508
self.assertNotCalled(self.network.get_quota_default)
452509

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
fixes:
3+
- Fix the ``--class`` option not work when we set/show the quota class.
4+
[Bug `1609233 <https://bugs.launchpad.net/bugs/1609233>`_]

0 commit comments

Comments
 (0)