config options: centralize quota options
The quota options got moved from "nova/quota.py" to the new central location "nova/conf/quota.py". Change-Id: I54c38ee3fcc086b222eb89ea1377e1906f1bc617 Implements: blueprint centralize-config-options-newton
This commit is contained in:
parent
b69296eb74
commit
68a4b4729a
@ -62,6 +62,7 @@ from nova.conf import neutron
|
|||||||
from nova.conf import novnc
|
from nova.conf import novnc
|
||||||
# from nova.conf import osapi_v21
|
# from nova.conf import osapi_v21
|
||||||
from nova.conf import pci
|
from nova.conf import pci
|
||||||
|
from nova.conf import quota
|
||||||
from nova.conf import rdp
|
from nova.conf import rdp
|
||||||
from nova.conf import remote_debug
|
from nova.conf import remote_debug
|
||||||
from nova.conf import rpc
|
from nova.conf import rpc
|
||||||
@ -128,6 +129,7 @@ neutron.register_opts(CONF)
|
|||||||
novnc.register_opts(CONF)
|
novnc.register_opts(CONF)
|
||||||
# osapi_v21.register_opts(CONF)
|
# osapi_v21.register_opts(CONF)
|
||||||
pci.register_opts(CONF)
|
pci.register_opts(CONF)
|
||||||
|
quota.register_opts(CONF)
|
||||||
rdp.register_opts(CONF)
|
rdp.register_opts(CONF)
|
||||||
rpc.register_opts(CONF)
|
rpc.register_opts(CONF)
|
||||||
scheduler.register_opts(CONF)
|
scheduler.register_opts(CONF)
|
||||||
|
93
nova/conf/quota.py
Normal file
93
nova/conf/quota.py
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# Copyright 2010 United States Government as represented by the
|
||||||
|
# Administrator of the National Aeronautics and Space Administration.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
|
||||||
|
from oslo_config import cfg
|
||||||
|
|
||||||
|
quota_opts = [
|
||||||
|
cfg.IntOpt('quota_instances',
|
||||||
|
default=10,
|
||||||
|
help='Number of instances allowed per project'),
|
||||||
|
cfg.IntOpt('quota_cores',
|
||||||
|
default=20,
|
||||||
|
help='Number of instance cores allowed per project'),
|
||||||
|
cfg.IntOpt('quota_ram',
|
||||||
|
default=50 * 1024,
|
||||||
|
help='Megabytes of instance RAM allowed per project'),
|
||||||
|
cfg.IntOpt('quota_floating_ips',
|
||||||
|
default=10,
|
||||||
|
help='Number of floating IPs allowed per project'),
|
||||||
|
cfg.IntOpt('quota_fixed_ips',
|
||||||
|
default=-1,
|
||||||
|
help='Number of fixed IPs allowed per project (this should be '
|
||||||
|
'at least the number of instances allowed)'),
|
||||||
|
cfg.IntOpt('quota_metadata_items',
|
||||||
|
default=128,
|
||||||
|
help='Number of metadata items allowed per instance'),
|
||||||
|
cfg.IntOpt('quota_injected_files',
|
||||||
|
default=5,
|
||||||
|
help='Number of injected files allowed'),
|
||||||
|
cfg.IntOpt('quota_injected_file_content_bytes',
|
||||||
|
default=10 * 1024,
|
||||||
|
help='Number of bytes allowed per injected file'),
|
||||||
|
cfg.IntOpt('quota_injected_file_path_length',
|
||||||
|
default=255,
|
||||||
|
help='Length of injected file path'),
|
||||||
|
cfg.IntOpt('quota_security_groups',
|
||||||
|
default=10,
|
||||||
|
help='Number of security groups per project'),
|
||||||
|
cfg.IntOpt('quota_security_group_rules',
|
||||||
|
default=20,
|
||||||
|
help='Number of security rules per security group'),
|
||||||
|
cfg.IntOpt('quota_key_pairs',
|
||||||
|
default=100,
|
||||||
|
help='Number of key pairs per user'),
|
||||||
|
cfg.IntOpt('quota_server_groups',
|
||||||
|
default=10,
|
||||||
|
help='Number of server groups per project'),
|
||||||
|
cfg.IntOpt('quota_server_group_members',
|
||||||
|
default=10,
|
||||||
|
help='Number of servers per server group'),
|
||||||
|
cfg.IntOpt('reservation_expire',
|
||||||
|
default=86400,
|
||||||
|
help='Number of seconds until a reservation expires'),
|
||||||
|
cfg.IntOpt('until_refresh',
|
||||||
|
default=0,
|
||||||
|
help='Count of reservations until usage is refreshed. This '
|
||||||
|
'defaults to 0(off) to avoid additional load but it is '
|
||||||
|
'useful to turn on to help keep quota usage up to date '
|
||||||
|
'and reduce the impact of out of sync usage issues.'),
|
||||||
|
cfg.IntOpt('max_age',
|
||||||
|
default=0,
|
||||||
|
help='Number of seconds between subsequent usage refreshes. '
|
||||||
|
'This defaults to 0(off) to avoid additional load but it '
|
||||||
|
'is useful to turn on to help keep quota usage up to date '
|
||||||
|
'and reduce the impact of out of sync usage issues. '
|
||||||
|
'Note that quotas are not updated on a periodic task, '
|
||||||
|
'they will update on a new reservation if max_age has '
|
||||||
|
'passed since the last reservation'),
|
||||||
|
cfg.StrOpt('quota_driver',
|
||||||
|
default='nova.quota.DbQuotaDriver',
|
||||||
|
help='Default driver to use for quota checks'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def register_opts(conf):
|
||||||
|
conf.register_opts(quota_opts)
|
||||||
|
|
||||||
|
|
||||||
|
def list_opts():
|
||||||
|
return {'DEFAULT': quota_opts}
|
@ -61,6 +61,7 @@ from sqlalchemy.sql import true
|
|||||||
from nova import block_device
|
from nova import block_device
|
||||||
from nova.compute import task_states
|
from nova.compute import task_states
|
||||||
from nova.compute import vm_states
|
from nova.compute import vm_states
|
||||||
|
import nova.conf
|
||||||
import nova.context
|
import nova.context
|
||||||
from nova.db.sqlalchemy import models
|
from nova.db.sqlalchemy import models
|
||||||
from nova import exception
|
from nova import exception
|
||||||
@ -125,11 +126,10 @@ api_db_opts = [
|
|||||||
'SQLAlchemy.'),
|
'SQLAlchemy.'),
|
||||||
]
|
]
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = nova.conf.CONF
|
||||||
CONF.register_opts(db_opts)
|
CONF.register_opts(db_opts)
|
||||||
CONF.register_opts(oslo_db_options.database_opts, 'database')
|
CONF.register_opts(oslo_db_options.database_opts, 'database')
|
||||||
CONF.register_opts(api_db_opts, group='api_database')
|
CONF.register_opts(api_db_opts, group='api_database')
|
||||||
CONF.import_opt('until_refresh', 'nova.quota')
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -33,7 +33,6 @@ import nova.ipv6.api
|
|||||||
import nova.netconf
|
import nova.netconf
|
||||||
import nova.notifications
|
import nova.notifications
|
||||||
import nova.paths
|
import nova.paths
|
||||||
import nova.quota
|
|
||||||
import nova.servicegroup.api
|
import nova.servicegroup.api
|
||||||
import nova.spice
|
import nova.spice
|
||||||
import nova.volume
|
import nova.volume
|
||||||
@ -57,7 +56,6 @@ def list_opts():
|
|||||||
nova.netconf.netconf_opts,
|
nova.netconf.netconf_opts,
|
||||||
nova.notifications.notify_opts,
|
nova.notifications.notify_opts,
|
||||||
nova.paths.path_opts,
|
nova.paths.path_opts,
|
||||||
nova.quota.quota_opts,
|
|
||||||
nova.volume._volume_opts,
|
nova.volume._volume_opts,
|
||||||
)),
|
)),
|
||||||
('cinder', nova.volume.cinder.cinder_opts),
|
('cinder', nova.volume.cinder.cinder_opts),
|
||||||
|
@ -18,12 +18,12 @@
|
|||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from oslo_config import cfg
|
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
from oslo_utils import importutils
|
from oslo_utils import importutils
|
||||||
from oslo_utils import timeutils
|
from oslo_utils import timeutils
|
||||||
import six
|
import six
|
||||||
|
|
||||||
|
import nova.conf
|
||||||
from nova import db
|
from nova import db
|
||||||
from nova import exception
|
from nova import exception
|
||||||
from nova.i18n import _LE
|
from nova.i18n import _LE
|
||||||
@ -31,75 +31,8 @@ from nova import objects
|
|||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
quota_opts = [
|
|
||||||
cfg.IntOpt('quota_instances',
|
|
||||||
default=10,
|
|
||||||
help='Number of instances allowed per project'),
|
|
||||||
cfg.IntOpt('quota_cores',
|
|
||||||
default=20,
|
|
||||||
help='Number of instance cores allowed per project'),
|
|
||||||
cfg.IntOpt('quota_ram',
|
|
||||||
default=50 * 1024,
|
|
||||||
help='Megabytes of instance RAM allowed per project'),
|
|
||||||
cfg.IntOpt('quota_floating_ips',
|
|
||||||
default=10,
|
|
||||||
help='Number of floating IPs allowed per project'),
|
|
||||||
cfg.IntOpt('quota_fixed_ips',
|
|
||||||
default=-1,
|
|
||||||
help='Number of fixed IPs allowed per project (this should be '
|
|
||||||
'at least the number of instances allowed)'),
|
|
||||||
cfg.IntOpt('quota_metadata_items',
|
|
||||||
default=128,
|
|
||||||
help='Number of metadata items allowed per instance'),
|
|
||||||
cfg.IntOpt('quota_injected_files',
|
|
||||||
default=5,
|
|
||||||
help='Number of injected files allowed'),
|
|
||||||
cfg.IntOpt('quota_injected_file_content_bytes',
|
|
||||||
default=10 * 1024,
|
|
||||||
help='Number of bytes allowed per injected file'),
|
|
||||||
cfg.IntOpt('quota_injected_file_path_length',
|
|
||||||
default=255,
|
|
||||||
help='Length of injected file path'),
|
|
||||||
cfg.IntOpt('quota_security_groups',
|
|
||||||
default=10,
|
|
||||||
help='Number of security groups per project'),
|
|
||||||
cfg.IntOpt('quota_security_group_rules',
|
|
||||||
default=20,
|
|
||||||
help='Number of security rules per security group'),
|
|
||||||
cfg.IntOpt('quota_key_pairs',
|
|
||||||
default=100,
|
|
||||||
help='Number of key pairs per user'),
|
|
||||||
cfg.IntOpt('quota_server_groups',
|
|
||||||
default=10,
|
|
||||||
help='Number of server groups per project'),
|
|
||||||
cfg.IntOpt('quota_server_group_members',
|
|
||||||
default=10,
|
|
||||||
help='Number of servers per server group'),
|
|
||||||
cfg.IntOpt('reservation_expire',
|
|
||||||
default=86400,
|
|
||||||
help='Number of seconds until a reservation expires'),
|
|
||||||
cfg.IntOpt('until_refresh',
|
|
||||||
default=0,
|
|
||||||
help='Count of reservations until usage is refreshed. This '
|
|
||||||
'defaults to 0(off) to avoid additional load but it is '
|
|
||||||
'useful to turn on to help keep quota usage up to date '
|
|
||||||
'and reduce the impact of out of sync usage issues.'),
|
|
||||||
cfg.IntOpt('max_age',
|
|
||||||
default=0,
|
|
||||||
help='Number of seconds between subsequent usage refreshes. '
|
|
||||||
'This defaults to 0(off) to avoid additional load but it '
|
|
||||||
'is useful to turn on to help keep quota usage up to date '
|
|
||||||
'and reduce the impact of out of sync usage issues. '
|
|
||||||
'Note that quotas are not updated on a periodic task, '
|
|
||||||
'they will update on a new reservation if max_age has '
|
|
||||||
'passed since the last reservation'),
|
|
||||||
cfg.StrOpt('quota_driver',
|
|
||||||
default='nova.quota.DbQuotaDriver',
|
|
||||||
help='Default driver to use for quota checks'),
|
|
||||||
]
|
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = nova.conf.CONF
|
||||||
CONF.register_opts(quota_opts)
|
|
||||||
|
|
||||||
|
|
||||||
class DbQuotaDriver(object):
|
class DbQuotaDriver(object):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user