Merge "nova-net: Remove 'networks' quota"

This commit is contained in:
Zuul 2019-11-22 22:44:08 +00:00 committed by Gerrit Code Review
commit 5b2e906bb4
12 changed files with 31 additions and 116 deletions

View File

@ -34,7 +34,7 @@ EXTENDED_QUOTAS = ['server_groups', 'server_group_members']
# NOTE(gmann): Network related quotas are filter out in
# microversion 2.50. Bug#1701211.
FILTERED_QUOTAS_2_50 = ["fixed_ips", "floating_ips", "networks",
FILTERED_QUOTAS_2_50 = ["fixed_ips", "floating_ips",
"security_group_rules", "security_groups"]
# Microversion 2.57 removes personality (injected) files from the API.

View File

@ -37,7 +37,7 @@ from nova import quota
CONF = nova.conf.CONF
QUOTAS = quota.QUOTAS
FILTERED_QUOTAS_2_36 = ["fixed_ips", "floating_ips", "networks",
FILTERED_QUOTAS_2_36 = ["fixed_ips", "floating_ips",
"security_group_rules", "security_groups"]
FILTERED_QUOTAS_2_57 = list(FILTERED_QUOTAS_2_36)
@ -194,13 +194,11 @@ class QuotaSetsController(wsgi.Controller):
quota_set = body['quota_set']
# NOTE(alex_xu): The CONF.enable_network_quota was deprecated
# due to it is only used by nova-network, and nova-network will be
# deprecated also. So when CONF.enable_newtork_quota is removed,
# the networks quota will disappeare also.
if not CONF.enable_network_quota and 'networks' in quota_set:
# NOTE(stephenfin): network quotas were only used by nova-network and
# therefore should be explicitly rejected
if 'networks' in quota_set:
raise webob.exc.HTTPBadRequest(
explanation=_('The networks quota is disabled'))
explanation=_('The networks quota has been removed'))
force_update = strutils.bool_from_string(quota_set.get('force',
'False'))

View File

@ -41,6 +41,8 @@ quota_resources = {
'injected_file_path_bytes': common_quota,
'server_groups': common_quota,
'server_group_members': common_quota,
# NOTE(stephenfin): This will always be rejected since it was nova-network
# only, but we need to allow users to submit it at a minimum
'networks': common_quota
}

View File

@ -97,21 +97,3 @@ class TenantNetworkController(wsgi.Controller):
@wsgi.expected_errors(410)
def create(self, req, body):
raise exc.HTTPGone()
def _network_count(context, project_id):
# NOTE(melwitt): This assumes a single cell.
ctx = nova_context.RequestContext(user_id=None, project_id=project_id)
ctx = ctx.elevated()
networks = nova.network.api.API().get_all(ctx)
return {'project': {'networks': len(networks)}}
def _register_network_quota():
if CONF.enable_network_quota:
QUOTAS.register_resource(quota.CountableResource('networks',
_network_count,
'quota_networks'))
_register_network_quota()

View File

@ -1378,40 +1378,6 @@ Related options:
]
quota_opts = [
cfg.BoolOpt('enable_network_quota',
deprecated_for_removal=True,
deprecated_since='14.0.0',
deprecated_reason="""
CRUD operations on tenant networks are only available when using nova-network
and nova-network is itself deprecated.""",
default=False,
help="""
This option is used to enable or disable quota checking for tenant networks.
Related options:
* quota_networks
"""),
cfg.IntOpt('quota_networks',
deprecated_for_removal=True,
deprecated_since='14.0.0',
deprecated_reason="""
CRUD operations on tenant networks are only available when using nova-network
and nova-network is itself deprecated.""",
default=3,
min=0,
help="""
This option controls the number of private networks that can be created per
project (or per tenant).
Related options:
* enable_network_quota
"""),
]
service_opts = [
cfg.StrOpt('network_manager',
choices=[
@ -1431,7 +1397,7 @@ nova-network is deprecated, as are any related configuration options.
ALL_DEFAULT_OPTS = (linux_net_opts + network_opts + ldap_dns_opts +
rpcapi_opts + driver_opts + floating_ip_opts +
ipv6_opts + quota_opts + service_opts)
ipv6_opts + service_opts)
def register_opts(conf):

View File

@ -546,7 +546,7 @@ class DbQuotaDriver(object):
# together.
# per project quota limits (quotas that have no concept of
# user-scoping: fixed_ips, networks, floating_ips)
# user-scoping: fixed_ips, floating_ips)
project_quotas = objects.Quotas.get_all_by_project(context, project_id)
# per user quotas, project quota limits (for quotas that have
# user-scoping, limits for the project)
@ -790,12 +790,6 @@ class BaseResource(object):
@property
def default(self):
"""Return the default value of the quota."""
# NOTE(mikal): special case for quota_networks, which is an API
# flag and not a quota flag
if self.flag == 'quota_networks':
return CONF[self.flag]
return CONF.quota[self.flag] if self.flag else -1
@ -889,11 +883,6 @@ class QuotaEngine(object):
self.__driver = importutils.import_object(CONF.quota.driver)
return self.__driver
def register_resource(self, resource):
"""Register a resource."""
self._resources[resource.name] = resource
def get_defaults(self, context):
"""Retrieve the default quotas.

View File

@ -46,7 +46,6 @@ from requests import adapters
from sqlalchemy import exc as sqla_exc
from wsgi_intercept import interceptor
from nova.api.openstack.compute import tenant_networks
from nova.api.openstack import wsgi_app
from nova.api import wsgi
from nova.compute import multi_cell_list
@ -1231,18 +1230,6 @@ class AllServicesCurrent(fixtures.Fixture):
return service_obj.SERVICE_VERSION
class RegisterNetworkQuota(fixtures.Fixture):
def setUp(self):
super(RegisterNetworkQuota, self).setUp()
# Quota resource registration modifies the global QUOTAS engine, so
# this fixture registers and unregisters network quota for a test.
tenant_networks._register_network_quota()
self.addCleanup(self.cleanup)
def cleanup(self):
nova_quota.QUOTAS._resources.pop('networks', None)
class _FakeNeutronClient(object):
"""Class representing a Neutron client which wraps a NeutronFixture.

View File

@ -22,7 +22,6 @@ from nova.db import api as db
from nova import exception
from nova import quota
from nova import test
from nova.tests import fixtures as nova_fixtures
from nova.tests.unit.api.openstack import fakes
@ -284,18 +283,6 @@ class QuotaSetsTestV21(BaseQuotaSetsTest):
mock_destroy_all_by_project.assert_called_once_with(
req.environ['nova.context'], 1234)
def test_update_network_quota_disabled(self):
self.flags(enable_network_quota=False)
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
self._get_http_request(),
1234, body={'quota_set': {'networks': 1}})
def test_update_network_quota_enabled(self):
self.flags(enable_network_quota=True)
self.useFixture(nova_fixtures.RegisterNetworkQuota())
self.controller.update(self._get_http_request(),
1234, body={'quota_set': {'networks': 1}})
def test_duplicate_quota_filter(self):
query_string = 'user_id=1&user_id=2'
req = fakes.HTTPRequest.blank('', query_string=query_string)
@ -585,10 +572,8 @@ class QuotaSetsTestV236(test.NoDBTestCase):
self.stub_out('nova.api.openstack.identity.verify_project_id',
lambda ctx, project_id: True)
self.flags(enable_network_quota=True)
self.useFixture(nova_fixtures.RegisterNetworkQuota())
self.old_req = fakes.HTTPRequest.blank('', version='2.1')
self.filtered_quotas = ['fixed_ips', 'floating_ips', 'networks',
self.filtered_quotas = ['fixed_ips', 'floating_ips',
'security_group_rules', 'security_groups']
self.quotas = {
'cores': {'limit': 20},
@ -600,7 +585,6 @@ class QuotaSetsTestV236(test.NoDBTestCase):
'instances': {'limit': 10},
'key_pairs': {'limit': 100},
'metadata_items': {'limit': 128},
'networks': {'limit': 3},
'ram': {'limit': 51200},
'security_group_rules': {'limit': 20},
'security_groups': {'limit': 10},
@ -617,7 +601,6 @@ class QuotaSetsTestV236(test.NoDBTestCase):
'instances': 10,
'key_pairs': 100,
'metadata_items': 128,
'networks': 3,
'ram': 51200,
'security_group_rules': 20,
'security_groups': 10,

View File

@ -22,7 +22,6 @@ from nova.api.openstack.compute import tenant_networks \
as networks_v21
from nova import exception
from nova import test
from nova.tests import fixtures as nova_fixtures
from nova.tests.unit.api.openstack import fakes
CONF = cfg.CONF
@ -71,8 +70,6 @@ class TenantNetworksTestV21(test.NoDBTestCase):
# os-tenant-networks only supports Neutron when listing networks or
# showing details about a network, create and delete operations
# result in a 503 and 500 response, respectively.
self.flags(enable_network_quota=True)
self.useFixture(nova_fixtures.RegisterNetworkQuota())
self.controller = self.ctrlr()
self.req = fakes.HTTPRequest.blank('')
self.original_value = CONF.api.use_neutron_default_nets

View File

@ -248,13 +248,13 @@ class _TestQuotasObject(object):
mock_get_all.return_value = {'project_id': 'fake-project',
'fixed_ips': 20, 'floating_ips': 5}
mock_get_all_main.return_value = {'project_id': 'fake-project',
'fixed_ips': 10, 'networks': 5}
'fixed_ips': 10}
quotas_dict = quotas_obj.Quotas.get_all_by_project(self.context,
'fake-project')
mock_get_all.assert_called_once_with(self.context, 'fake-project')
mock_get_all_main.assert_called_once_with(self.context, 'fake-project')
expected = {'project_id': 'fake-project', 'fixed_ips': 20,
'floating_ips': 5, 'networks': 5}
'floating_ips': 5}
self.assertEqual(expected, quotas_dict)
@mock.patch('nova.objects.Quotas._get_all_from_db_by_project_and_user')

View File

@ -405,13 +405,6 @@ class QuotaEngineTestCase(test.TestCase):
quota_obj = quota.QuotaEngine(quota_driver=FakeDriver)
self.assertEqual(quota_obj._driver, FakeDriver)
def test_register_resource(self):
quota_obj = quota.QuotaEngine()
resource = quota.AbsoluteResource('test_resource')
quota_obj.register_resource(resource)
self.assertEqual(quota_obj._resources, dict(test_resource=resource))
def _get_quota_engine(self, driver, resources=None):
resources = resources or [
quota.AbsoluteResource('test_resource4'),

View File

@ -25,3 +25,21 @@ upgrade:
* ``os_compute_api:os-security-group-default-rules``
* ``os_compute_api:os-networks``
* ``os_compute_api:os-networks-associate``
- |
The ``networks`` quota, which was only enabled if the
``enabled_network_quota`` config option was enabled and only useful with
*nova-network*, is removed. It will not longer be present in the responses
for the APIs while attempts to update the quota will be rejected.
* ``GET /os-quota-sets``
* ``GET /os-quota-sets/{project_id}``
* ``GET /os-quota-sets/{project_id}/defaults``
* ``GET /os-quota-sets/{project_id}/detail``
* ``PUT /os-quota-sets/{project_id}``
* ``GET /os-quota-class-sets/{id}``
* ``PUT /os-quota-class-sets/{id}``
The following related config options have been removed.
* ``enable_network_quota``
* ``quota_networks``