支持 Cinder API 版本 2¶
https://blueprints.launchpad.net/heat/+spec/support-cinder-api-v2
本规范建议添加对 Cinder API 第二版的支持,它带来了有用的改进,并将很快取代第一版。
问题描述¶
目前 Heat 仅使用 Cinder API 的版本 1 来创建卷。然而,第二版带来了有用的特性,例如调度器提示、更一致的响应、缓存、过滤等。
此外,Cinder 正在弃用 API 版本 1,转而支持版本 2 [1],该版本自 Havana 以来就在 devstack 中可用。支持两者将使用户更容易切换。
新的 API 提供了 [2]
更一致的属性,例如 ‘name’、‘description’ 等。
新的方法 (set_metadata, promote, retype, set_bootable 等)
现有方法中的附加选项(例如使用调度器提示)。
在控制器之间缓存数据,而不是多次访问数据库。
在列出卷、快照和备份的信息时进行过滤。
用例
作为开发者,我希望能够在创建卷时将调度器提示传递给 Cinder,以便更精确地选择后端。
作为部署者,我不想选择要使用的 Cinder API 版本。让 Heat 自动发现最新版本并使用它。
提议的变更¶
为 CinderClientPlugin 添加新方法
discover_api_versions() 用于向 Keystone 查询 ‘volume’ 和 ‘volumev2’ 服务。
api_version() 用于获取 Heat 当前使用的 Cinder API 版本(此值将被设置为最新可用版本)。
CinderClientPlugin._create() 返回的客户端将取决于 api_version()。
Heat 当前使用六个 cinderclient 方法
volumes.get()、volumes.extend()、backups.create() 和 restores.restore() 不受此更改影响;
volumes.create() 和 volume.update() 使用根据 Cinder API 版本而不同的参数:(display_name, display_description) 用于 v1,(name, description) 用于 v2。
建议的实现不会更改当前的 OS::Cinder::Volume 属性,因为它们已经是 ‘name’ 和 ‘description’(如新 API 版本中)。
备选方案¶
等待 Cinder API v1 被弃用,然后突然切换到 v2。
实现¶
负责人¶
- 主要负责人
adrien-verge
里程碑¶
- 完成目标里程碑
Kilo-1
工作项¶
使用 Keystone 发现最新的 Cinder API 版本。
使用最新的可用 API 创建正确的 Cinder 客户端。
根据使用的 API,为 volumes.create() 和 volume.update() 使用正确的参数。
依赖项¶
无