支持 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() 使用正确的参数。

依赖项

参考资料