扩展配额 API 以报告使用情况统计信息

https://bugs.launchpad.net/neutron/+bug/1599488

当前的 Neutron 配额 API 没有提供关于配额的详细信息。提供关于配额的详细信息将对 Horizon Web 应用有益。

问题描述

当前的 Neutron 配额 API 仅报告租户的资源及其限制。这种当前方法对于 Horizon 和一般的配额用户来说效率低下。其他项目(nova 和 cinder)的配额 API 包含特定租户下资源的用量详情。

存在手动统计所有 Neutron 资源的问题 [1],而不是使用一个配额 API 调用来获取特定项目下所有资源的详细信息。

提议的变更

Nova[2] 和 Cinder[3] 提供的“配额集”扩展应该被 Neutron 采用,以便在资源配额和更多功能方面提供更好的跨项目 API。

现有的配额扩展列出了指定项目的当前配额限制集合。我们建议添加一个新的扩展,quota_detail,它通过相同的端点可用。这个新的扩展将有一个新的动作“detail”,它列出了项目的配额详情。诸如已预留、已用和限制等资源详情将可用。

扩展配额 API 的潜在用例是简化和改进 Horizon 和 OpenStack/Neutron 客户端。

Neutron 中的新的“配额扩展”API 扩展不会将 ‘user-id’ 作为列出详细配额的参数的一部分。这是因为 Neutron 只支持简单的每项目配额。

REST API 影响

当前,配额 API 为特定租户/项目提供以下 REST API 端点,用于配额详情。

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
    }
}

在新的配额 API 扩展中,将引入一个功能更强大的 API,它提供特定项目下资源的限制已预留已用计数。Neutron 中当前的预留实现是短暂的,不会更新,但会向用户显示默认值“0”。

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
        }
    }
}

命令行客户端影响

将向 openstack 客户端添加一个新的可选参数,例如:$ openstack quota show {tenant_id/project_id} –detail

Horizon 使用 neutronclient 从 neutron api 获取配额。由于 neutronclient 的 CLI 端即将弃用,因此仅为 Horizon 使用实现 neutronclient 的 HTTP 端。

安全影响

通知影响

其他最终用户影响

Horizon 中的更改

超出此规范的范围。

性能影响

IPv6 影响

其他部署者影响

开发人员影响

社区影响

备选方案

实现

负责人

Prince Boateng(prince.a.owusu.boateng@intel.com) Aradhana Singh(aradhana1.singh@intel.com)

工作项

  1. 扩展配额 DB 驱动

  2. 扩展当前 API

  3. 创建新的配额扩展

  4. 添加相关测试

  5. 添加 CLI openstackclient

依赖项

测试

Tempest 测试

编写测试以验证从 API 返回的正确数据模型

功能测试

API 测试

编写测试以检查资源参数的 已预留已用限制 响应,以确保与引入的更改一致。

文档影响

用户文档

开发人员文档

参考资料

[1]: https://github.com/openstack/horizon/blob/10.0.0.0b1/openstack_dashboard/usage/quotas.py#L313-L336

[2]: https://developer.openstack.org/api-ref-compute-v2.1.html#listDetailQuotas

[3]: https://developer.openstack.org/api-ref-blockstorage-v2.html#showQuota

[4]: https://review.openstack.org/#/c/383673