移除 createImage 和 createBackup 响应中的 Location 头¶
https://blueprints.launchpad.net/nova/+spec/remove-create-image-location-header-response
createImage 和 createBackup API 在响应中返回一个 Location 头,该头包含一个 URL,指向很可能是一个内部 Glance API 服务器,因此对最终用户来说是无法访问的。该 URL 也没有针对 Image 服务进行版本控制,因此,除非云提供商提供别名,否则该 URL 无论如何都是错误的。本规范建议用一个简单的响应体 json 字典替换 Location 头,该字典包含快照图像的 image_id。
问题描述¶
createImage 和 createBackup API 在响应中返回一个 Location 头,该头是从 Nova 中的 CONF.glance.api_servers 配置构建的,该配置很可能使用 Glance 的内部地址,使其对最终用户不可用。
像 Tempest [1] 和 python-novaclient [2] 这样的客户端代码一直忽略响应中的 Location 头,只是解析 URL 以获取 image ID,并将其用于他们自己的 GET /v2/images/{image_id} 请求。
此外,Location 头响应中的 URL 没有版本控制,但阅读图像服务 API 参考文档的版本文档和示例,URL 始终具有版本控制前缀,例如 GET /v1/images 或 GET /v2/images。Nova 返回的 URL 没有版本控制,这很可能意味着这是 Glance 从 Nova 中拆分之前的遗留工件。
用例¶
作为用户,我希望能够使用 createImage 和 createBackup API 的准确响应来轮询 Image 服务中创建的快照图像的状态。
提议的变更¶
本蓝图建议移除响应中的 Location 头,并仅在 createImage 和 createBackup API 的新微版本中返回一个包含 image_id 的响应体字典。
备选方案¶
我们可以更改生成 Location 头 URL 的代码,以使用服务目录中 image 服务类型的 public 接口。这将需要更多的工作,因为我们可能需要使接口可配置。此外,考虑到许多客户端库已经忽略 Location 头,并且不直接使用它,而是解析 URL 中的 image ID,我们可以通过返回一个简单的 json 响应体,其中包含消费者实际关心的值,来创建一个更清晰的与过去错误行为的断裂。
数据模型影响¶
无
REST API 影响¶
在一个微版本中,createImage 和 createBackup 服务器操作 API 的响应将用一个 json 字典响应体替换 Location 头,该字典包含一个名为 image_id 的键,该键映射到创建的快照图像 ID (uuid)。
因此,而不是返回一个带有如下标题的响应
Location: http://172.21.1.10:9292/images/f5d5b63b-e710-4d59-aa12-a9bd42f6652a
我们将返回一个带有如下主体的响应
{
'image_id': 'f5d5b63b-e710-4d59-aa12-a9bd42f6652a'
}
安全影响¶
无。从某种意义上说,这更加安全,因为我们将不再将内部 Glance API 服务器 IP 泄漏到公共计算 REST API 中。
通知影响¶
无。实际上存在 compute.instance.snapshot.start 和 compute.instance.snapshot.end 通知,但出于某种原因,它们实际上不包含快照图像 ID,因此对这些现有通知没有影响。
其他最终用户影响¶
python-novaclient 需要更新以处理 nova image-create CLI 的微版本中响应格式的变化。
python-novaclient 中的 nova backup CLI 当前不会解析服务器响应中的 Location 头来打印快照图像 ID,因此对 createBackup 更改没有对 python-novaclient 的更改。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Matt Riedemann (mriedem)
工作项¶
将微版本响应更改添加到 createImage 和 createBackup 服务器操作 API。
更新文档,包括在 API 参考文档中添加注释,说明微版本之前的响应中的 Location 头很可能已损坏。
依赖项¶
无
测试¶
单元和功能(API 示例)测试正常。
由于 createImage 和 createBackup API 当前不返回响应体,因此 Tempest 中实际上没有现有的响应模式验证检查,因此必须添加一个。
文档影响¶
createImage 和 createBackup API 参考文档将被更新。
参考资料¶
最初的问题是一个 bug:https://bugs.launchpad.net/nova/+bug/1679285
历史¶
发布名称 |
描述 |
|---|---|
Pike |
引入 |