https://blueprints.launchpad.net/karbor/+spec/support-quotas-in-karbor
To prevent system capacities from being exhausted without notification, users can set up quotas. Quotas are operational limits. For example, the number of gigabytes allowed for each project can be controlled so that cloud resources are optimized in Block Storage service(Cinder)[1] . Quotas can be enforced at the project level. Nova uses a quota system for setting limits on resources such as number of instances or amount of CPU that a specific project or user can use. [2]
A quotas system will be introduced to Karbor for setting limits on resources such as the amount of gigabytes about backup data that a specific project can use.
User can set limits on resources such as the amount of gigabytes about backup data via a new quotas RESTful API.
Two data modules about quotas will be introduced to karbor.
The data module ‘quotas’ is used for saving the hard limit number of the resources that a specific project can use. The data module ‘quota_usages’ is used for saving the in use number and reserved number of the resources that belong to a specific project.
Add the quotas API controller for the Karbor API.
Implement the ‘update’ method of quotas API controller. Implement the ‘show’ method of quotas API controller. Implement the ‘index’ method of quotas API controller.
The resources need to limit.
QUOTAS_PLAN_CAPACITY = ‘quota_plans’
QUOTAS_PLAN_CAPACITY: The maximum number of plan.
Init the default limit number of the resources about quotas data module.
The default limit number of the resources should be inited in the data module table ‘quotas’ when the karbor api service start to run. The default limit number of the resources can be set from the value of configurations. The config ‘quota_plans’ need be added.
Update the reserved and in use number of the resources quota usages.
When a resource is requested, the specific quota about this resource is checked first. If this check passes, the reserved number of this resource in data module ‘quota_usages’ need be updated first according to requested resource number. If the resource is created successfully, the in use number of the resources quota need be updated. At the same time, the reserved number of this resource should be subtracted.
None
Field | Type | Null | Key | Default | Extra |
id | varchar(36) | NO | PRI | NULL | |
project_id | varchar(255) | NO | NULL | ||
resource | varchar(255) | NO | NULL | ||
hard_limit | Interger | YES | NULL | ||
created_at | Datetime | YES | NULL | ||
updated_at | Datetime | YES | NULL | ||
deleted_at | Datetime | YES | NULL |
Field | Type | Null | Key | Default | Extra |
id | varchar(36) | NO | PRI | NULL | |
project_id | varchar(255) | NO | NULL | ||
resource | varchar(255) | NO | NULL | ||
in_use | Interger | YES | NULL | ||
reserved | Interger | YES | NULL | ||
created_at | Datetime | YES | NULL | ||
updated_at | Datetime | YES | NULL | ||
deleted_at | Datetime | YES | NULL |
1. Update quotas API, admin only. The request JSON when updating a quota:
**post** : /v1/{project_id}/quotas/{user_project_id}
```json
{
"quota":
{
"plans": 100
}
}
The response JSON when updating a quota:
```json
{
"quota":{
"plans": 100
}
}
2. Show quota API. Admin can query aother projects’ quota. The response JSON when showing a quota:
**get** : /v1/{project_id}/quotas/{user_project_id}
```json
{
{
"quota": {
"plans": 100,
"id": "73f74f90a1754bd7ad658afb3272323f"
}
}
}
3. Delete quota API. admin only. The response JSON when deleting a quota:
**delete** : /v1/{project_id}/quotas/{user_project_id}
4. Show the detail of quota API. Admin can query aother projects’ quota. The response JSON when showing a quota:
**get** : /v1/{project_id}/quotas/{user_project_id}/detail
```json
{
"quota": {
"plans": {
"reserved": 0,
"limit": 100,
"in_use": 1
},
"id": "73f74f90a1754bd7ad658afb3272323f"
}
}
5. Show the default of quota API. Admin can query aother projects’ quota. The response JSON when showing a quota:
**get** : /v1/{project_id}/quotas/{user_project_id}/defaults
```json
{
"quota": {
"plans": 50,
"id": "73f74f90a1754bd7ad658afb3272323f"
}
}
6. Update quota class API, admin only. The request JSON when updating a quota class:
**post** : /v1/{project_id}/quota_classes/{class_name}
```json
{
"quota_class": {
"plans": 120
}
}
The response JSON when updating a quota class:
```json
{
"quota_class": {
"plans": 120
}
}
7. Show quota class API. The response JSON when showing a quota class:
**get** : /v1/{project_id}/quota_classes/{class_name}
```json
{
"quota_class": {
"plans": 120,
"id": "default"
}
}
None
None
None
None
None
None
Unit tests in Karbor.
None
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.