Example #1
0
 def test_quota_class_get_all_by_name(self):
     sample1 = db.quota_class_create(self.ctxt, 'test2', 'res1', 43)
     sample2 = db.quota_class_create(self.ctxt, 'test2', 'res2', 44)
     self.assertEqual({'class_name': 'test_qc', 'test_resource': 42},
                      db.quota_class_get_all_by_name(self.ctxt, 'test_qc'))
     self.assertEqual({'class_name': 'test2', 'res1': 43, 'res2': 44},
                      db.quota_class_get_all_by_name(self.ctxt, 'test2'))
Example #2
0
 def test_quota_class_get_all_by_name(self):
     db.quota_class_create(self.ctxt, "test2", "res1", 43)
     db.quota_class_create(self.ctxt, "test2", "res2", 44)
     self.assertEqual(
         {"class_name": "test_qc", "test_resource": 42}, db.quota_class_get_all_by_name(self.ctxt, "test_qc")
     )
     self.assertEqual(
         {"class_name": "test2", "res1": 43, "res2": 44}, db.quota_class_get_all_by_name(self.ctxt, "test2")
     )
Example #3
0
 def test_quota_class_get_all_by_name(self):
     sample1 = db.quota_class_create(self.ctxt, 'test2', 'res1', 43)
     sample2 = db.quota_class_create(self.ctxt, 'test2', 'res2', 44)
     self.assertEqual({
         'class_name': 'test_qc',
         'test_resource': 42
     }, db.quota_class_get_all_by_name(self.ctxt, 'test_qc'))
     self.assertEqual({
         'class_name': 'test2',
         'res1': 43,
         'res2': 44
     }, db.quota_class_get_all_by_name(self.ctxt, 'test2'))
Example #4
0
    def get_class_quotas(self, context, resources, quota_class,
                         defaults=True):
        """Given list of resources, retrieve the quotas for given quota class.

        :param context: The request context, for access checks.
        :param resources: A dictionary of the registered resources.
        :param quota_class: The name of the quota class to return
                            quotas for.
        :param defaults: If True, the default value will be reported
                         if there is no specific value for the
                         resource.
        """

        quotas = {}
        default_quotas = {}
        class_quotas = db.quota_class_get_all_by_name(context, quota_class)
        if defaults:
            default_quotas = db.quota_class_get_default(context)
        for resource in resources.values():
            if resource.name in class_quotas:
                quotas[resource.name] = class_quotas[resource.name]
                continue

            if defaults:
                quotas[resource.name] = default_quotas.get(resource.name,
                                                           resource.default)

        return quotas
Example #5
0
    def get_project_quotas(self, context, resources, project_id,
                           quota_class=None, defaults=True,
                           usages=True):
        """
        Given a list of resources, retrieve the quotas for the given
        project.

        :param context: The request context, for access checks.
        :param resources: A dictionary of the registered resources.
        :param project_id: The ID of the project to return quotas for.
        :param quota_class: If project_id != context.project_id, the
                            quota class cannot be determined.  This
                            parameter allows it to be specified.  It
                            will be ignored if project_id ==
                            context.project_id.
        :param defaults: If True, the quota class value (or the
                         default value, if there is no value from the
                         quota class) will be reported if there is no
                         specific value for the resource.
        :param usages: If True, the current in_use and reserved counts
                       will also be returned.
        """

        quotas = {}
        project_quotas = db.quota_get_all_by_project(context, project_id)
        if usages:
            project_usages = db.quota_usage_get_all_by_project(context,
                                                               project_id)

        # Get the quotas for the appropriate class.  If the project ID
        # matches the one in the context, we use the quota_class from
        # the context, otherwise, we use the provided quota_class (if
        # any)
        if project_id == context.project_id:
            quota_class = context.quota_class
        if quota_class:
            class_quotas = db.quota_class_get_all_by_name(context, quota_class)
        else:
            class_quotas = {}

        for resource in resources.values():
            # Omit default/quota class values
            if not defaults and resource.name not in project_quotas:
                continue

            quotas[resource.name] = dict(
                limit=project_quotas.get(resource.name,
                                         class_quotas.get(resource.name,
                                                          resource.default)), )

            # Include usages if desired.  This is optional because one
            # internal consumer of this interface wants to access the
            # usages directly from inside a transaction.
            if usages:
                usage = project_usages.get(resource.name, {})
                quotas[resource.name].update(
                    in_use=usage.get('in_use', 0),
                    reserved=usage.get('reserved', 0), )

        return quotas
Example #6
0
    def get_class_quotas(self, context, resources, quota_class,
                         defaults=True):
        """Given list of resources, retrieve the quotas for given quota class.

        :param context: The request context, for access checks.
        :param resources: A dictionary of the registered resources.
        :param quota_class: The name of the quota class to return
                            quotas for.
        :param defaults: If True, the default value will be reported
                         if there is no specific value for the
                         resource.
        """

        quotas = {}
        default_quotas = {}
        class_quotas = db.quota_class_get_all_by_name(context, quota_class)
        if defaults:
            default_quotas = db.quota_class_get_default(context)
        for resource in resources.values():
            if resource.name in class_quotas:
                quotas[resource.name] = class_quotas[resource.name]
                continue

            if defaults:
                quotas[resource.name] = default_quotas.get(resource.name,
                                                           resource.default)

        return quotas
Example #7
0
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:
            defaults[key] = quota[key]

    return defaults
Example #8
0
    def get_project_quotas(self, context, resources, project_id,
                           quota_class=None, defaults=True,
                           usages=True, parent_project_id=None):
        """Given a list of resources, retrieve the quotas for the given
        project.

        :param context: The request context, for access checks.
        :param resources: A dictionary of the registered resources.
        :param project_id: The ID of the project to return quotas for.
        :param quota_class: If project_id != context.project_id, the
                            quota class cannot be determined.  This
                            parameter allows it to be specified.  It
                            will be ignored if project_id ==
                            context.project_id.
        :param defaults: If True, the quota class value (or the
                         default value, if there is no value from the
                         quota class) will be reported if there is no
                         specific value for the resource.
        :param usages: If True, the current in_use and reserved counts
                       will also be returned.
        :param parent_project_id: The id of the current project's parent,
                                  if any.
        """

        quotas = {}
        project_quotas = db.quota_get_all_by_project(context, project_id)
        if usages:
            project_usages = db.quota_usage_get_all_by_project(context,
                                                               project_id)

        # Get the quotas for the appropriate class.  If the project ID
        # matches the one in the context, we use the quota_class from
        # the context, otherwise, we use the provided quota_class (if
        # any)
        if project_id == context.project_id:
            quota_class = context.quota_class
        if quota_class:
            class_quotas = db.quota_class_get_all_by_name(context, quota_class)
        else:
            class_quotas = {}

        default_quotas = self.get_defaults(context, resources,
                                           parent_project_id=parent_project_id)

        for resource in resources.values():
            # Omit default/quota class values
            if not defaults and resource.name not in project_quotas:
                continue

            quotas[resource.name] = dict(
                limit=project_quotas.get(
                    resource.name,
                    class_quotas.get(resource.name,
                                     default_quotas[resource.name])),
            )

            # Include usages if desired.  This is optional because one
            # internal consumer of this interface wants to access the
            # usages directly from inside a transaction.
            if usages:
                usage = project_usages.get(resource.name, {})
                quotas[resource.name].update(
                    in_use=usage.get('in_use', 0),
                    reserved=usage.get('reserved', 0), )

        return quotas
Example #9
0
 def test_quota_class_destroy_all_by_name(self):
     sample1 = db.quota_class_create(self.ctxt, 'test2', 'res1', 43)
     sample2 = db.quota_class_create(self.ctxt, 'test2', 'res2', 44)
     db.quota_class_destroy_all_by_name(self.ctxt, 'test2')
     self.assertEqual({'class_name': 'test2'},
                      db.quota_class_get_all_by_name(self.ctxt, 'test2'))
Example #10
0
 def test_quota_class_destroy_all_by_name(self):
     sample1 = db.quota_class_create(self.ctxt, 'test2', 'res1', 43)
     sample2 = db.quota_class_create(self.ctxt, 'test2', 'res2', 44)
     db.quota_class_destroy_all_by_name(self.ctxt, 'test2')
     self.assertEqual({'class_name': 'test2'},
                      db.quota_class_get_all_by_name(self.ctxt, 'test2'))
Example #11
0
 def test_quota_class_destroy_all_by_name(self):
     db.quota_class_create(self.ctxt, "test2", "res1", 43)
     db.quota_class_create(self.ctxt, "test2", "res2", 44)
     db.quota_class_destroy_all_by_name(self.ctxt, "test2")
     self.assertEqual({"class_name": "test2"}, db.quota_class_get_all_by_name(self.ctxt, "test2"))