Merge "quota: Deprecate "force" behavior for network quotas"

This commit is contained in:
Zuul 2022-11-05 09:24:51 +00:00 committed by Gerrit Code Review
commit 837cbfbcdb
4 changed files with 59 additions and 16 deletions

View File

@ -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():

View File

@ -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):

View File

@ -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'],

View File

@ -0,0 +1,13 @@
---
features:
- Add ``--no-force`` option to the ``openstack quota set`` command (only
for compute and network commands). When specified, the compute and network
quota engine will check the resource usage before setting the new quota
limit. This is the default behavior of the compute quota engine and will
become the default for the network quota engine in a future release.
deprecations:
- The ``openstack quota set`` command currently defaults to ``--force``
behavior for network quotas. This behavior is now deprecated and a future
release will switch to ``--no-force`` behavior. Users should explicitly
specify one of these options to prevent a potentially breaking change in
behavior.