在 os-fixed-ips API 中显示“已保留”状态

https://blueprints.launchpad.net/nova/+spec/show-reserved-status-in-os-fixed-ips-api

在 os-fixed-ips API 扩展中的 FixedIP 对象上显示“已保留”状态。该扩展允许保留和取消保留固定 IP,但 show 方法不会报告当前状态。

问题描述

目前,os-fixed-ips API 扩展允许在数据库中的 FixedIP 对象上设置“已保留”字段,但 show 方法不会返回当前值。因此,如果您想编写一个应用程序来保留/取消保留固定 IP,您必须在外部跟踪此信息,或者自行从数据库中获取它。

用例

作为云管理员,我希望能够保留/取消保留固定 IP,但在对固定 IP 执行操作之前,我需要知道给定固定 IP 的当前保留状态。

项目优先级

提议的变更

为 os-fixed-ips API 扩展添加一个新的 API 微版本,如果 API GET 请求的版本满足所需的最低版本,则在 fixed_ip 响应数据中包含“已保留”状态。

备选方案

我们可以将此信息添加到“nova-manage fixed list”输出中,但 nova-manage CLI 对于应该通过 Nova API 服务完成的事情来说,大部分已被弃用。

数据模型影响

REST API 影响

提议的更改只是更新 os-fixed-ips API 扩展中的 GET 响应数据,如果请求具有最低支持版本,则包含“已保留”布尔字段。

  • 方法的规范

    • 显示指定固定 IP 地址的信息。

    • 方法类型:GET

    • 正常的 http 响应代码:200

    • 预期的错误 http 响应代码

      • 400:如果请求中的地址无效。

      • 404:如果请求中的地址与数据库中的 FixedIP 条目不匹配。

    • /v2.1/{tenant_id}/os-fixed-ips/{fixed_ip}

    • 可以通过 URL 传递的参数:固定 IP 地址

    • 响应数据的 JSON schema 定义

get_fixed_ip = {
    'status_code': [200],
    'response_body': {
        'type': 'object',
        'properties': {
            'fixed_ip': {
                'type': 'object',
                'properties': {
                    'address': {
                        'type': 'string',
                        'format': 'ip-address'
                    },
                    'cidr': {'type': 'string'},
                    'host': {'type': 'string'},
                    'hostname': {'type': 'string'},
                    'reserved': {'type': 'boolean'}
                },
                'required': ['address', 'cidr', 'host',
                             'hostname', 'reserved']
            }
        },
        'required': ['fixed_ip']
    }
}
  • 示例用例

请求

GET –header “X-OpenStack-Nova-API-Version: 2.4” http://127.0.0.1:8774/v2.1/e0c1f4c0b9444fa086fa13881798144f/os-fixed-ips/192.168.1.1

响应

{
    "fixed_ip": {
        "address": "192.168.1.1",
        "cidr": "192.168.1.0/24",
        "host": "host",
        "hostname": "openstack",
        "reserved": false
    }
}
  • 此更改不应影响 policy.json 文件。

安全影响

通知影响

其他最终用户影响

  • 如果“fixed_ip”字典响应包含“已保留”键,则可以更新 v2.1 python-novaclient fixed-ip-get 命令,以在输出中显示“已保留”状态。

性能影响

其他部署者影响

无;如果部署者使用 API 的所需最低版本来获取“已保留”数据,他们可以开始使用它,否则他们不会看到任何更改。

开发人员影响

实现

负责人

主要负责人

Matt Riedemann <mriedem@us.ibm.com>

工作项

  • 添加一个新的微版本,并更改 nova/api/openstack/plugins/v3/fixed_ips.py 以使用它来确定是否应返回 FixedIP 对象上的“已保留”属性。

依赖项

测试

  • nova 树中的单元测试和可能的 API 示例功能测试。

  • 目前,Tempest 中没有测试计算 API 微版本超过 v2.1。我们可以添加支持在 Tempest 中测试新版本,但到目前为止,API 至少已达到 v2.3,而无需更改 Tempest。

文档影响

将更新 nova/api/openstack/rest_api_version_history.rst 文档。

参考资料

http://lists.openstack.org/pipermail/openstack-dev/2013-November/019506.html