summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-11-05 09:24:51 +0000
committerGerrit Code Review <review@openstack.org>2022-11-05 09:24:51 +0000
commit837cbfbcdbf6ca42805d10604f8b383ee8e33641 (patch)
treebbb6b3c37c3201ef152e8300bd006912879ecfb7 /openstackclient
parentb0b47472d81b4f29ed70a0755434ac9e4a4b9f62 (diff)
parent09ff9a0f4c118f50924d2fc078d6a4501e696224 (diff)
downloadpython-openstackclient-837cbfbcdbf6ca42805d10604f8b383ee8e33641.tar.gz
Merge "quota: Deprecate "force" behavior for network quotas"
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/common/quota.py51
-rw-r--r--openstackclient/tests/functional/common/test_quota.py4
-rw-r--r--openstackclient/tests/unit/common/test_quota.py7
3 files changed, 46 insertions, 16 deletions
diff --git a/openstackclient/common/quota.py b/openstackclient/common/quota.py
index f2d097fc..246e44b3 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 f798137a..2470a96f 100644
--- a/openstackclient/tests/unit/common/test_quota.py
+++ b/openstackclient/tests/unit/common/test_quota.py
@@ -983,19 +983,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)
@@ -1004,6 +1004,7 @@ class TestQuotaSet(TestQuota):
kwargs_compute = {
'cores': compute_fakes.core_num,
+ 'force': False,
}
kwargs_volume = {
'volumes': volume_fakes.QUOTA['volumes'],