整合获取控制台的 API

https://blueprints.launchpad.net/nova/+spec/consolidate-console-api

Nova 目前为每种支持的控制台类型都提供了不同的公共 API 来获取控制台访问权限。该提案是将所有这些 API 整合为一个。

问题描述

获取控制台访问权限的 API 与底层协议的名称紧密耦合:os-getVNCConsole、os-getRDPConsole 等。结果是,每次我们想要添加对新控制台的支持时,都需要引入一个新的公共 API。更好的解决方案是只有一个 API,即 get_console,它可以用于获取所有类型的控制台的访问权限。

用例

作为 Nova 开发者,我希望添加对新控制台类型支持,并且不想向公共 API 添加更多混乱。

项目优先级

提议的变更

该提案是引入一个用于获取控制台访问权限的单一公共 API,并弃用我们目前所有现有的公共 API。实现将检查请求并调用 ComputeManager 的相关 get_XXX_console。

备选方案

另一种选择是继续为每种新的控制台类型添加公共 API,但这并不是我们想要的。

数据模型影响

REST API 影响

新的 API 将通过 API 微版本暴露,并具有以下定义

请求

POST /servers/<uuid>/remote-consoles
{
    "remote_console": {
        "protocol": ["vnc"|"rdp"|"serial"|"spice"],
        "type": ["novnc"|"xpvnc"|"rdp-html5"|"spice-html5"|"serial"]
    }
}

请求中的 ‘type’ 参数是可选的,当所选协议支持多种连接类型时应使用它。

响应

200 OK
{
    "remote_console": {
        "url": string,
        "protocol": ["vnc"|"rdp"|"serial"|"spice"],
        "type": ["novnc"|"xpvnc"|"rdp-html5"|"spice-html5"|"serial"]
    }
}

一些失败场景及其对应的错误代码包括:* 请求中协议/类型的错误值 - “400 Bad Request” * 实例尚未准备好 - “409 Conflict” * 虚拟驱动程序不支持此控制台类型 - “501 Not Implemented”

旧的 API ‘os-getVNCConsole’、‘os-getSPICEConsole’、‘os-getSerialConsole’ 和 ‘os-getRDPConsole’ 将在添加新 API 的微版本中移除。

安全影响

通知影响

其他最终用户影响

将为 Nova CLI 添加一个新的 ‘console-get’ 子命令,该子命令将支持所有控制台类型。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

rgerganov

工作项

已经有一个补丁实现了蓝图,但它没有合并到 Kilo 中:https://review.openstack.org/#/c/148509/

依赖项

测试

将向 tempest 添加一个新的测试,以测试新的 API。

文档影响

新的 API 应该被记录下来,并且我们应该鼓励用户使用它,而不是将被弃用的旧 API。

参考资料