Implement quota classes.

Allows entire classes of quotas to be associated with projects, which
makes it easier to set specific quotas across multiple projects.

TODO:

* (?) Adding a mapping between projects and quota classes

Change-Id: I6b6477481187d16af225d33c1989430e4071d5a8
This commit is contained in:
Kevin L. Mitchell
2012-03-13 17:13:02 -05:00
parent 74b5d17ddb
commit 79b89fb8b0
3 changed files with 32 additions and 6 deletions

View File

@@ -692,6 +692,10 @@ class ProjectQuotaNotFound(QuotaNotFound):
message = _("Quota for project %(project_id)s could not be found.")
class QuotaClassNotFound(QuotaNotFound):
message = _("Quota class %(class_name)s could not be found.")
class SecurityGroupNotFound(NotFound):
message = _("Security group %(security_group_id)s not found.")

View File

@@ -60,6 +60,11 @@ FLAGS = flags.FLAGS
FLAGS.register_opts(quota_opts)
quota_resources = ['metadata_items', 'injected_file_content_bytes',
'volumes', 'gigabytes', 'ram', 'floating_ips', 'instances',
'injected_files', 'cores']
def _get_default_quotas():
defaults = {
'instances': FLAGS.quota_instances,
@@ -80,13 +85,29 @@ def _get_default_quotas():
return defaults
def get_project_quotas(context, project_id):
rval = _get_default_quotas()
quota = db.quota_get_all_by_project(context, project_id)
for key in rval.keys():
def get_class_quotas(context, quota_class, defaults=None):
"""Update defaults with the quota class values."""
if not defaults:
defaults = _get_default_quotas()
quota = db.quota_class_get_all_by_name(context, quota_class)
for key in defaults.keys():
if key in quota:
rval[key] = quota[key]
return rval
defaults[key] = quota[key]
return defaults
def get_project_quotas(context, project_id):
defaults = _get_default_quotas()
if context.quota_class:
get_class_quotas(context, context.quota_class, defaults)
quota = db.quota_get_all_by_project(context, project_id)
for key in defaults.keys():
if key in quota:
defaults[key] = quota[key]
return defaults
def _get_request_allotment(requested, used, quota):

View File

@@ -101,6 +101,7 @@
"compute_extension:multinic": [],
"compute_extension:networks": [],
"compute_extension:quotas": [],
"compute_extension:quota_classes": [],
"compute_extension:rescue": [],
"compute_extension:security_groups": [],
"compute_extension:server_action_list": [],