Example #1
0
 def quota_get(self, context, project_id, resource_name):
     query = model_query(context, models.Quota).filter_by(
         project_id=project_id, resource_name=resource_name)
     try:
         return query.one()
     except NoResultFound:
         raise exception.QuotaNotFound(quota_name=resource_name)
Example #2
0
    def quota_destroy(self, context, project_id, resource_name):
        with _session_for_write():
            query = model_query(context, models.Quota)
            query = query.filter_by(project_id=project_id,
                                    resource_name=resource_name)

            count = query.delete()
            if count != 1:
                raise exception.QuotaNotFound(quota_name=resource_name)
Example #3
0
    def get_project_quotas(self, context, resources, project_id, usages=True):
        """Retrieve quotas for a project.

        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 usages: If True, the current in_use, reserved and allocated
                       counts will also be returned.
        """

        quotas = {}
        project_quotas = {}
        res = self.dbapi.quota_get_all_by_project(context, project_id)
        for p_quota in res:
            project_quotas[p_quota.resource_name] = p_quota.hard_limit
        if project_quotas == {}:
            self.dbapi.quota_create(
                context, {
                    'resource_name': 'servers',
                    'project_id': project_id,
                    'hard_limit': 10,
                    'allocated': 0
                })
            project_quotas['servers'] = 10
        allocated_quotas = None
        if usages:
            project_usages = self.dbapi.quota_usage_get_all_by_project(
                context, project_id)
            allocated_quotas = self.dbapi.quota_allocated_get_all_by_project(
                context, project_id)
            allocated_quotas.pop('project_id')

        for resource in resources.values():
            if resource.name not in project_quotas:
                continue

            quota_val = project_quotas.get(resource.name)
            if quota_val is None:
                raise exception.QuotaNotFound(quota_name=resource.name)
            quotas[resource.name] = {'limit': quota_val}

            # 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),
                )
            if allocated_quotas:
                quotas[resource.name].update(allocated=allocated_quotas.get(
                    resource.name, 0), )
        return quotas
Example #4
0
    def _do_update_quota(self, context, project_id, resource_name, updates):
        with _session_for_write():
            query = model_query(context, models.Quota)
            query = query.filter_by(project_id=project_id,
                                    resource_name=resource_name)
            try:
                ref = query.with_lockmode('update').one()
            except NoResultFound:
                raise exception.QuotaNotFound(quota_name=resource_name)

            ref.update(updates)
        return ref