diff --git a/nova/exception.py b/nova/exception.py index eb0bf382c..75320c2be 100644 --- a/nova/exception.py +++ b/nova/exception.py @@ -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.") diff --git a/nova/quota.py b/nova/quota.py index fc49de067..cc327122d 100644 --- a/nova/quota.py +++ b/nova/quota.py @@ -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): diff --git a/nova/tests/policy.json b/nova/tests/policy.json index d2e647f9f..e726b8bf0 100644 --- a/nova/tests/policy.json +++ b/nova/tests/policy.json @@ -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": [],