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)
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)
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
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