from selvpcclient import base
[docs]class Quotas(base.Resource):
"""Represents a quota."""
[docs]class QuotasManager(base.Manager):
"""Manager class for manipulating quota."""
resource_class = Quotas
[docs] def get_domain_quotas(self):
"""Get total amount of resources available to be allocated to projects.
:rtype: :class:`Quotas`
"""
return self._get('/quotas', 'quotas')
[docs] def get_free_domain_quotas(self):
"""Get amount of resources available to be allocated to projects.
:rtype: :class:`Quotas`
"""
return self._get('/quotas/free', 'quotas')
[docs] def get_projects_quotas(self):
"""Show quotas info for all domain projects.
:rtype: :class:`Quotas`
"""
return self._get('/quotas/projects', 'quotas')
[docs] def get_project_quotas(self, project_id):
"""Show quotas info for one project.
:param string project_id: Project id.
:rtype: :class:`Quotas`
"""
return self._get('/quotas/projects/{}'.format(project_id), 'quotas')
[docs] def update(self, project_id, quotas):
"""Update Project's quotas.
:param string project_id: Project id.
:param dict quotas: Dict with key `quotas` and keys as dict
of items region, zone and value::
{
"quotas": {
"compute_cores": [
{
"region": "ru-1",
"zone": "ru-1a",
"value": 10
},
{
"region": "ru-1",
"zone": "ru-1b",
"value": 10
}
]
}
}
:rtype: :class:`Quotas`
"""
url = '/quotas/projects/{}'.format(project_id)
return self._patch(url=url, body=quotas, response_key='quotas')
[docs] def optimize_project_quotas(self, project_id):
"""Optimize project quotas.
:param string project_id: Project id.
"""
body = {"quotas": {}}
quotas = self.get_project_quotas(project_id)._info
for resource, quotas_ in quotas.items():
for quota in quotas_:
if quota["value"] == 0 or quota["value"] == quota["used"]:
continue
if resource not in body["quotas"]:
body["quotas"][resource] = []
quota["value"] = quota["used"]
del quota["used"]
body["quotas"][resource].append(quota)
if not body["quotas"]:
return None
return self.update(project_id, quotas=body)