Extend Quota API to report usage statistics¶
https://bugs.launchpad.net/neutron/+bug/1599488
The current Neutron Quota API does not provide extensive information about quotas. Providing a detailed information about quotas will be beneficial to Horizon web app.
Problem Description¶
The current Neutron Quota API just reports the resources and their limits for a tenant. This current approach is inefficient for Horizon and quota users in general. Quota APIs of other projects(nova and cinder) include usage details for resources under a specific tenant.
There is a problem of manually counting all of neutron resources [1], instead of using one Quota API call to get all detailed information for resources under a specific project.
Proposed Change¶
The “Quota Sets” extension provided by Nova[2] and Cinder[3] should be adopted by Neutron, in order to provide better cross-project APIs when it comes to resource quotas and more features.
The existing quota extension lists the current set of quota limits for a specified project. We propose to add a new extension, quota_detail, which is available via the same endpoint. This new extension will have a new action “detail” which lists quota details for a project. Details like reserved, used and limit for a resource will be available.
Possible use cases of extended quota API is to simplify and provide improvements in Horizon and OpenStack/Neutron client.
The new “Quota Extension” API extension in neutron will not have ‘user-id’ as part of the arguments to list detail quotas. This is because neutron supports only simple per-project quotas
REST API Impact¶
Currently, the Quota API provides the following REST API endpoint for quota details for a specific tenant/project.
GET /v2.0/quotas/{tenant_id}
{
"quota": {
"subnet": 10,
"network": 10,
"floatingip": 50,
"subnetpool": -1,
"security_group_rule": 100,
"security_group": 10,
"router": 10,
"rbac_policy": -1,
"port": 50
}
}
In the new Quotas API extension, a more featureful API would be introduced that provides the limit, reserved and in_use counts for resources under a specific project. The current implementation of reservation in neutron is ephemeral and will not up but show a default value of “0” to users.
GET /v2.0/quotas/{tenant_id}/detail
{
"quota": {
"subnet": {
"reserved": 0,
"limit": 10,
"in_use": 0
},
"network": {
"reserved": 0,
"limit": 10,
"in_use": 0
},
"floatingip": {
"reserved": 0,
"limit": 50,
"in_use": 0
},
"subnetpool": {
"reserved": 0,
"limit": -1,
"in_use": 0
},
"security_group_rule": {
"reserved": 0,
"limit": 100,
"in_use": 0
},
"security_group": {
"reserved": 0,
"limit": 10,
"in_use": 0
},
"router": {
"reserved": 0,
"limit": 10,
"in_use": 0
},
"rbac_policy": {
"reserved": 0,
"limit": -1,
"in_use": 0
},
"port": {
"reserved": 0,
"limit": 50,
"in_use": 0
}
}
}
Command Line Client Impact¶
A new optional argument will be added to the openstack client, for example: $ openstack quota show {tenant_id/project_id} –detail
Horizon uses neutronclient to get quotas from neutron api. Since CLI end of neutronclient will be deprecated soon, only the HTTP side of neutronclient will be implemented for horizon use.
Security Impact¶
None
Notifications Impact¶
None
Other End User Impact¶
Changes in Horizon
out of scope for this spec.
Performance Impact¶
None
IPv6 Impact¶
None
Other Deployer Impact¶
None
Developer Impact¶
None
Community Impact¶
None
Alternatives¶
None
Implementation¶
Assignee(s)¶
Prince Boateng(prince.a.owusu.boateng@intel.com) Aradhana Singh(aradhana1.singh@intel.com)
Work Items¶
Extend Quota DB driver
Extend current API
Create new Quota extension
Add related tests
Add CLI openstackclient
Dependencies¶
None
Testing¶
Tempest Tests¶
Write tests to verify the correct data model is returned from API
Functional Tests¶
None
API Tests¶
Write tests to check responses for reserved
, in_use
and limits
parameters for
resources are consistent with the changes introduced.
Documentation Impact¶
Yes
User Documentation¶
Yes
Developer Documentation¶
Yes
References¶
[1]: https://github.com/openstack/horizon/blob/10.0.0.0b1/openstack_dashboard/usage/quotas.py#L313-L336
[2]: http://developer.openstack.org/api-ref-compute-v2.1.html#listDetailQuotas
[3]: http://developer.openstack.org/api-ref-blockstorage-v2.html#showQuota