diff options
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/common/quota.py | 51 | ||||
| -rw-r--r-- | openstackclient/tests/functional/common/test_quota.py | 4 | ||||
| -rw-r--r-- | openstackclient/tests/unit/common/test_quota.py | 7 |
3 files changed, 46 insertions, 16 deletions
diff --git a/openstackclient/common/quota.py b/openstackclient/common/quota.py index 10f40a75..510437dd 100644 --- a/openstackclient/common/quota.py +++ b/openstackclient/common/quota.py @@ -15,6 +15,7 @@ """Quota action implementations""" +import argparse import itertools import logging import sys @@ -621,20 +622,37 @@ class SetQuota(common.NetDetectionMixin, command.Command): metavar='<volume-type>', help=_('Set quotas for a specific <volume-type>'), ) - parser.add_argument( + force_group = parser.add_mutually_exclusive_group() + force_group.add_argument( '--force', action='store_true', + dest='force', + # TODO(stephenfin): Change the default to False in Z or later + default=None, help=_( - 'Force quota update (only supported by compute and network)' + 'Force quota update (only supported by compute and network) ' + '(default for network)' ), ) - parser.add_argument( - '--check-limit', - action='store_true', + force_group.add_argument( + '--no-force', + action='store_false', + dest='force', + default=None, help=_( - 'Check quota limit when updating (only supported by network)' + 'Do not force quota update ' + '(only supported by compute and network) ' + '(default for compute)' ), ) + # kept here for backwards compatibility/to keep the neutron folks happy + force_group.add_argument( + '--check-limit', + action='store_false', + dest='force', + default=None, + help=argparse.SUPPRESS, + ) return parser def take_action(self, parsed_args): @@ -657,8 +675,8 @@ class SetQuota(common.NetDetectionMixin, command.Command): if value is not None: compute_kwargs[k] = value - if parsed_args.force: - compute_kwargs['force'] = True + if parsed_args.force is not None: + compute_kwargs['force'] = parsed_args.force volume_kwargs = {} for k, v in VOLUME_QUOTAS.items(): @@ -669,10 +687,21 @@ class SetQuota(common.NetDetectionMixin, command.Command): volume_kwargs[k] = value network_kwargs = {} - if parsed_args.check_limit: - network_kwargs['check_limit'] = True - if parsed_args.force: + if parsed_args.force is True: + # Unlike compute, network doesn't provide a simple boolean option. + # Instead, it provides two options: 'force' and 'check_limit' + # (a.k.a. 'not force') network_kwargs['force'] = True + elif parsed_args.force is False: + network_kwargs['check_limit'] = True + else: + msg = _( + "This command currently defaults to '--force' when modifying " + "network quotas. This behavior will change in a future " + "release. Consider explicitly providing '--force' or " + "'--no-force' options to avoid changes in behavior." + ) + self.log.warning(msg) if self.app.client_manager.is_network_endpoint_enabled(): for k, v in NETWORK_QUOTAS.items(): diff --git a/openstackclient/tests/functional/common/test_quota.py b/openstackclient/tests/functional/common/test_quota.py index 08ec626f..9089cba5 100644 --- a/openstackclient/tests/functional/common/test_quota.py +++ b/openstackclient/tests/functional/common/test_quota.py @@ -176,7 +176,7 @@ class QuotaTests(base.TestCase): def _restore_quota_limit(self, resource, limit, project): self.openstack('quota set --%s %s %s' % (resource, limit, project)) - def test_quota_network_set_with_check_limit(self): + def test_quota_network_set_with_no_force(self): if not self.haz_network: self.skipTest('No Network service present') if not self.is_extension_enabled('quota-check-limit'): @@ -201,7 +201,7 @@ class QuotaTests(base.TestCase): (self.PROJECT_NAME, uuid.uuid4().hex)) self.assertRaises(exceptions.CommandFailed, self.openstack, - 'quota set --networks 1 --check-limit ' + + 'quota set --networks 1 --no-force ' + self.PROJECT_NAME) def test_quota_network_set_with_force(self): diff --git a/openstackclient/tests/unit/common/test_quota.py b/openstackclient/tests/unit/common/test_quota.py index 0900200e..320e6b51 100644 --- a/openstackclient/tests/unit/common/test_quota.py +++ b/openstackclient/tests/unit/common/test_quota.py @@ -985,19 +985,19 @@ class TestQuotaSet(TestQuota): ) self.assertIsNone(result) - def test_quota_set_with_check_limit(self): + def test_quota_set_with_no_force(self): arglist = [ '--subnets', str(network_fakes.QUOTA['subnet']), '--volumes', str(volume_fakes.QUOTA['volumes']), '--cores', str(compute_fakes.core_num), - '--check-limit', + '--no-force', self.projects[0].name, ] verifylist = [ ('subnet', network_fakes.QUOTA['subnet']), ('volumes', volume_fakes.QUOTA['volumes']), ('cores', compute_fakes.core_num), - ('check_limit', True), + ('force', False), ('project', self.projects[0].name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -1006,6 +1006,7 @@ class TestQuotaSet(TestQuota): kwargs_compute = { 'cores': compute_fakes.core_num, + 'force': False, } kwargs_volume = { 'volumes': volume_fakes.QUOTA['volumes'], |
