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