# quota_driver = neutron.db.quota_db.DbQuotaDriver
# Resource name(s) that are supported in quota features
+# This option is deprecated for removal in the M release, please refrain from using it
# quota_items = network,subnet,port
# Default number of resource allowed per tenant. A negative value means
from neutron.api.v2 import base
from neutron import manager
from neutron import policy
+from neutron import quota
from neutron import wsgi
_map_resource(RESOURCES[resource], resource,
attributes.RESOURCE_ATTRIBUTE_MAP.get(
RESOURCES[resource], dict()))
+ quota.QUOTAS.register_resource_by_name(resource)
for resource in SUB_RESOURCES:
_map_resource(SUB_RESOURCES[resource]['collection_name'], resource,
QUOTA_DB_MODULE = 'neutron.db.quota_db'
QUOTA_DB_DRIVER = 'neutron.db.quota_db.DbQuotaDriver'
QUOTA_CONF_DRIVER = 'neutron.quota.ConfDriver'
+default_quota_items = ['network', 'subnet', 'port']
quota_opts = [
cfg.ListOpt('quota_items',
- default=['network', 'subnet', 'port'],
+ default=default_quota_items,
+ deprecated_for_removal=True,
help=_('Resource name(s) that are supported in quota '
- 'features')),
+ 'features. This option is now deprecated for '
+ 'removal.')),
cfg.IntOpt('default_quota',
default=-1,
help=_('Default number of resource allowed per tenant. '
def register_resources_from_config():
+ # This operation is now deprecated. All the neutron core and extended
+ # resource for which quota limits are enforced explicitly register
+ # themselves with the quota engine.
+ versionutils.report_deprecated_feature(
+ LOG, _LW("Registering resources to apply quota limits to using the "
+ "quota_items option is deprecated as of Liberty."
+ "Resource REST controllers should take care of registering "
+ "resources with the quota engine."))
resources = []
- for resource_item in cfg.CONF.QUOTAS.quota_items:
+ for resource_item in (set(cfg.CONF.QUOTAS.quota_items) -
+ set(default_quota_items)):
resources.append(CountableResource(resource_item, _count_resource,
'quota_' + resource_item))
QUOTAS.register_resources(resources)
import webtest
from neutron.api import extensions
+from neutron.api.v2 import router
from neutron.common import config
from neutron.common import constants
from neutron.common import exceptions
app = config.load_paste_app('extensions_test_app')
ext_middleware = extensions.ExtensionMiddleware(app, ext_mgr=ext_mgr)
self.api = webtest.TestApp(ext_middleware)
+ # Initialize the router for the core API in order to ensure core quota
+ # resources are registered
+ router.APIRouter()
def tearDown(self):
self.api = None