移除 glanceclient 包装¶
https://blueprints.launchpad.net/nova/+spec/use-glance-v2-api
本规范建议移除 glanceclient 周围的包装代码,并允许 nova 直接使用 glanceclient。
问题描述¶
Nova 当前使用 glanceclient 之上的一个包装器,该包装器实现了与客户端本身暴露的相同 API 的近似功能。多年来,该包装器不断演进,允许 nova 从 Glance API 的旧版本迁移到新版本。不幸的是,这段代码相当古老,包含一些变通方法,以便 nova 使用 Glance API 暴露的一些最新特性。
截至 Kilo 版本,Glance 团队计划弃用 API 的版本 1,但要做到这一点,必须确保所有依赖于它的项目都能使用最新版本正常运行,并且从旧版本到新版本的过渡尽可能无痛。
用例¶
本次清理背后的想法是减少 nova 团队需要维护的代码,并允许 Glance 在不被其他项目阻塞的情况下进行演进。本规范中提出的更改不应影响开发人员、最终用户或操作员。
项目优先级¶
不适用
提议的变更¶
建议的更改是完全移除 nova.image.glance 模块,并保留现有的 nova.image.api 模块,直到我们能够摆脱 nova.image.download 为止。
nova.image.glance 模块包含上述包装器的代码,我们希望清理这些代码。这段代码包含一些 glanceclient 的逻辑重复,并且大部分是不需要的。需要的部分——至少可以重用的部分——是增强图像下载的部分。也就是说,允许根据存储类型以及是否在配置文件中启用它来直接访问图像数据的代码片段。为了继续支持此行为,我们必须保留 nova.image.download 下的代码,直到 nova 采用 glance_store 为止——将为此编写一个单独的蓝图。
一旦 glance_store 被重构并采用,就不再需要维护 nova.image.api 下的代码了。这将在 glance_store 规范中解决。
在这些更改期间,现有的 Glance 特定配置选项也将更新。有一些旧且无用的选项——主机、端口、协议——可以弃用,以支持更好的选项——api_servers。
除了上述更改之外,Glance API 的默认版本也将升级到 v2。此更改将需要更新 nova 测试,以测试此版本的 API。
备选方案¶
保留包装器并清理它,直到它与 Glance 的客户端 API 完全匹配。请不要这样做!:)
另一种使向 v2 的过渡更轻松的方法是移除包装器代码,但继续使用 API 的 v1。这将允许用户通过仅更改 Nova 的 conf 文件中的 Glance API URL 来选择加入 Glance v2。虽然保守派可能更喜欢此选项,但我建议直接迁移到 v2。主要原因是 Glance 的 v1 存在一些问题,包括安全问题——例如未检查的镜像成员关系——这些问题将不再修复。此外,API 的 v2 允许更智能的镜像数据访问实现,并且是当前维护和完全支持的版本。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
此更改将保持与现有配置选项的向后兼容性,并为部署者提供升级路径。
此更改将引入 Glance API v2 作为默认使用的版本。如果部署者不想使用它,则需要降级版本。值得一提的是,Glance 默认启用 API v2。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
flaper87
- 其他贡献者
jokke kragniz
工作项¶
使用 glanceclient 直接重写 nova.image.api.Api 方法
移动当前的 Glance 特定选项并移除 nova.image.glance 代码
弃用旧的 nova.image.glance 选项,例如:host、port、protocol
依赖项¶
无
测试¶
所有现有的测试将继续像现在一样工作,但它们将测试 Glance 的 v2。在完全弃用 v1 之前,有必要添加一个针对 Glance v1 的测试。
为了使功能和集成测试正常工作,有必要在 keystone 中注册 Glance API v2 作为默认版本。Devstack 当前仅注册 v1。这将允许我们在 gate 中测试所有内容。
文档影响¶
包含配置更改的提交将标记为 DocImpact