移除 createImage 和 createBackup 响应中的 Location 头

https://blueprints.launchpad.net/nova/+spec/remove-create-image-location-header-response

createImagecreateBackup API 在响应中返回一个 Location 头,该头包含一个 URL,指向很可能是一个内部 Glance API 服务器,因此对最终用户来说是无法访问的。该 URL 也没有针对 Image 服务进行版本控制,因此,除非云提供商提供别名,否则该 URL 无论如何都是错误的。本规范建议用一个简单的响应体 json 字典替换 Location 头,该字典包含快照图像的 image_id。

问题描述

createImagecreateBackup 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/imagesGET /v2/images。Nova 返回的 URL 没有版本控制,这很可能意味着这是 Glance 从 Nova 中拆分之前的遗留工件。

用例

作为用户,我希望能够使用 createImagecreateBackup API 的准确响应来轮询 Image 服务中创建的快照图像的状态。

提议的变更

本蓝图建议移除响应中的 Location 头,并仅在 createImagecreateBackup API 的新微版本中返回一个包含 image_id 的响应体字典。

备选方案

我们可以更改生成 Location 头 URL 的代码,以使用服务目录中 image 服务类型的 public 接口。这将需要更多的工作,因为我们可能需要使接口可配置。此外,考虑到许多客户端库已经忽略 Location 头,并且不直接使用它,而是解析 URL 中的 image ID,我们可以通过返回一个简单的 json 响应体,其中包含消费者实际关心的值,来创建一个更清晰的与过去错误行为的断裂。

数据模型影响

REST API 影响

在一个微版本中,createImagecreateBackup 服务器操作 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.startcompute.instance.snapshot.end 通知,但出于某种原因,它们实际上不包含快照图像 ID,因此对这些现有通知没有影响。

其他最终用户影响

python-novaclient 需要更新以处理 nova image-create CLI 的微版本中响应格式的变化。

python-novaclient 中的 nova backup CLI 当前不会解析服务器响应中的 Location 头来打印快照图像 ID,因此对 createBackup 更改没有对 python-novaclient 的更改。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Matt Riedemann (mriedem)

工作项

  • 将微版本响应更改添加到 createImagecreateBackup 服务器操作 API。

  • 更新文档,包括在 API 参考文档中添加注释,说明微版本之前的响应中的 Location 头很可能已损坏。

依赖项

测试

  • 单元和功能(API 示例)测试正常。

  • 由于 createImagecreateBackup API 当前不返回响应体,因此 Tempest 中实际上没有现有的响应模式验证检查,因此必须添加一个。

文档影响

createImagecreateBackup API 参考文档将被更新。

参考资料

最初的问题是一个 bug:https://bugs.launchpad.net/nova/+bug/1679285

历史

修订版

发布名称

描述

Pike

引入