261 lines
5.7 KiB
ReStructuredText
261 lines
5.7 KiB
ReStructuredText
..
|
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
|
License.
|
|
|
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
|
|
|
===========================================
|
|
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
|
|
----------
|
|
|
|
1. Extend Quota DB driver
|
|
2. Extend current API
|
|
3. Create new Quota extension
|
|
4. Add related tests
|
|
5. 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
|
|
|
|
[4]: https://review.openstack.org/#/c/383673
|