Fix quota set failed problem
When using the command: openstack quota set, the compute quota below can't be set successfully,the value of compute quota stay unchanged, 'fixed-ips', 'floating-ips', 'injected-files', 'key-pairs'. What's more,I add a TODO comment in the code for two reason. 1. volume quota set works fine for the moment. 2. To indicate that this issue about volume needs discuss and report another bug, if it's confirmed. This bug is only about compute quota. Change-Id: Ic1028d561f5a0030cf65ac18fc117bf01e945478 Partial-Bug: #1420104
This commit is contained in:
parent
8175ce5985
commit
77214c56e7
@ -97,12 +97,13 @@ class SetQuota(command.Command):
|
||||
|
||||
compute_kwargs = {}
|
||||
for k, v in COMPUTE_QUOTAS.items():
|
||||
value = getattr(parsed_args, v, None)
|
||||
value = getattr(parsed_args, k, None)
|
||||
if value is not None:
|
||||
compute_kwargs[k] = value
|
||||
|
||||
volume_kwargs = {}
|
||||
for k, v in VOLUME_QUOTAS.items():
|
||||
# TODO(jiaxi): Should use k or v needs discuss
|
||||
value = getattr(parsed_args, v, None)
|
||||
if value is not None:
|
||||
if parsed_args.volume_type:
|
||||
|
89
openstackclient/tests/common/test_quota.py
Normal file
89
openstackclient/tests/common/test_quota.py
Normal file
@ -0,0 +1,89 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import copy
|
||||
|
||||
from openstackclient.common import quota
|
||||
from openstackclient.tests.compute.v2 import fakes as compute_fakes
|
||||
from openstackclient.tests import fakes
|
||||
|
||||
|
||||
class FakeQuotaResource(fakes.FakeResource):
|
||||
|
||||
_keys = {'property': 'value'}
|
||||
|
||||
def set_keys(self, args):
|
||||
self._keys.update(args)
|
||||
|
||||
def unset_keys(self, keys):
|
||||
for key in keys:
|
||||
self._keys.pop(key, None)
|
||||
|
||||
def get_keys(self):
|
||||
return self._keys
|
||||
|
||||
|
||||
class TestQuota(compute_fakes.TestComputev2):
|
||||
|
||||
def setUp(self):
|
||||
super(TestQuota, self).setUp()
|
||||
self.quotas_mock = self.app.client_manager.compute.quotas
|
||||
self.quotas_mock.reset_mock()
|
||||
|
||||
|
||||
class TestQuotaSet(TestQuota):
|
||||
|
||||
def setUp(self):
|
||||
super(TestQuotaSet, self).setUp()
|
||||
|
||||
self.quotas_mock.find.return_value = FakeQuotaResource(
|
||||
None,
|
||||
copy.deepcopy(compute_fakes.QUOTA),
|
||||
loaded=True,
|
||||
)
|
||||
|
||||
self.quotas_mock.update.return_value = FakeQuotaResource(
|
||||
None,
|
||||
copy.deepcopy(compute_fakes.QUOTA),
|
||||
loaded=True,
|
||||
)
|
||||
|
||||
self.cmd = quota.SetQuota(self.app, None)
|
||||
|
||||
def test_quota_set(self):
|
||||
arglist = [
|
||||
'--floating-ips', str(compute_fakes.floating_ip_num),
|
||||
'--fixed-ips', str(compute_fakes.fix_ip_num),
|
||||
'--injected-files', str(compute_fakes.injected_file_num),
|
||||
'--key-pairs', str(compute_fakes.key_pair_num),
|
||||
compute_fakes.project_name,
|
||||
]
|
||||
verifylist = [
|
||||
('floating_ips', compute_fakes.floating_ip_num),
|
||||
('fixed_ips', compute_fakes.fix_ip_num),
|
||||
('injected_files', compute_fakes.injected_file_num),
|
||||
('key_pairs', compute_fakes.key_pair_num),
|
||||
('project', compute_fakes.project_name),
|
||||
]
|
||||
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
self.cmd.take_action(parsed_args)
|
||||
|
||||
kwargs = {
|
||||
'floating_ips': compute_fakes.floating_ip_num,
|
||||
'fixed_ips': compute_fakes.fix_ip_num,
|
||||
'injected_files': compute_fakes.injected_file_num,
|
||||
'key_pairs': compute_fakes.key_pair_num,
|
||||
}
|
||||
|
||||
self.quotas_mock.update.assert_called_with('project_test', **kwargs)
|
@ -62,6 +62,22 @@ FLAVOR = {
|
||||
'vcpus': flavor_vcpus,
|
||||
}
|
||||
|
||||
floating_ip_num = 100
|
||||
fix_ip_num = 100
|
||||
injected_file_num = 100
|
||||
key_pair_num = 100
|
||||
project_name = 'project_test'
|
||||
QUOTA = {
|
||||
'project': project_name,
|
||||
'floating-ips': floating_ip_num,
|
||||
'fix-ips': fix_ip_num,
|
||||
'injected-files': injected_file_num,
|
||||
'key-pairs': key_pair_num,
|
||||
}
|
||||
|
||||
QUOTA_columns = tuple(sorted(QUOTA))
|
||||
QUOTA_data = tuple(QUOTA[x] for x in sorted(QUOTA))
|
||||
|
||||
|
||||
class FakeComputev2Client(object):
|
||||
def __init__(self, **kwargs):
|
||||
@ -73,6 +89,8 @@ class FakeComputev2Client(object):
|
||||
self.extensions.resource_class = fakes.FakeResource(None, {})
|
||||
self.flavors = mock.Mock()
|
||||
self.flavors.resource_class = fakes.FakeResource(None, {})
|
||||
self.quotas = mock.Mock()
|
||||
self.quotas.resource_class = fakes.FakeResource(None, {})
|
||||
self.auth_token = kwargs['token']
|
||||
self.management_url = kwargs['endpoint']
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user