列出可用于 manage-existing 的卷和快照

https://blueprints.launchpad.net/cinder/+spec/list-manage-existing

Cinder 目前具有接管现有卷和快照管理的能力(“管理现有”),以及放弃卷和快照管理的能力(“取消管理”)。管理现有卷的 API 需要一个引用,这是一个驱动程序特定的字符串,用于在存储后端标识卷。当前此过程令人困惑且容易出错。本规范的目的是详细说明用于列出可用于管理的卷和快照的 API,以使此流程对用户更友好。允许列出可用的卷/快照将允许创建一个易于使用的 GUI,以将现有卷迁移到新的 OpenStack 环境,或者在 Cinder 数据库丢失的情况下进行恢复。

问题描述

Cinder 没有 API 可以列出可用于管理的卷和快照,也没有办法知道应该使用哪个引用字符串,而无需参考驱动程序特定的文档。这意味着管理员必须查询存储后端,获取适当的引用,并将其放入适当的 Cinder API 中。如果没有建议的 API,此流程会令人困惑且容易出错。

用例

仅使用 Cinder API,而无需参考外部驱动程序文档,即可管理现有的块存储卷或快照。

提议的变更

添加新的 API,用于:1) 列出给定池中可用于管理的卷。2) 列出给定池中可用于管理的快照。

API 将返回驱动程序提供的有关卷/快照的信息。此外,对于每个资源,将提供一个指示,表明管理它是否安全。cinder-volume 管理器将调用适当的驱动程序以获取资源列表。对于每个资源,驱动程序将返回一个安全指示,其中包括卷是否已挂载,或者如果驱动程序怀疑该资源已经由 Cinder 管理,则返回 Cinder ID。管理器将在 DB 中查找任何被怀疑已使用的资源,并将其标记为不安全(避免驱动程序访问 DB)。

将向用户返回一个项目列表,包含

  • ref (字符串):一个后端特定的引用,指向将在用户想要管理该卷时指定的卷。

  • size (整数):卷的大小,向上取整到千兆字节,就像 OpenStack 用户在管理卷时看到的一样。

  • actual_size (整数):卷的实际大小(以字节为单位),可能不是精确的千兆字节倍数,因为该卷不是由 OpenStack 创建的。

  • safe_to_manage (布尔值):如果调用指定的主机引用来管理卷预计是安全的,则为 True;如果已知它将不安全(例如,如果驱动程序检测到卷已挂载,或者 cinder-volume 检测到它已经管理该资源),则为 False。

  • reason_not_safe (字符串):如果“safe_to_manage”为 False,则指定原因。

  • 驱动程序特定的键值对 (字符串列表:字符串):驱动程序可能希望返回的任何其他信息,以帮助管理员识别卷/快照,例如描述、时间戳等。

对于快照列表,返回这些附加字段

  • source_volume_ref (字符串):快照源卷的后端特定引用。

  • source_volume_id (字符串):如果卷已经由 Cinder 管理,则拥有快照的卷的 Cinder 卷 ID。

备选方案

保持不变。

数据模型影响

REST API 影响

添加两个额外的 API 扩展。

安全影响

Cinder 目前具有在存储池中创建对象以及查看或修改这些对象的能力。这允许管理员查看未由 Cinder 创建的卷。另一方面,管理员可以获取 Cinder 具有的存储凭据并在存储后端本身执行操作,因此实际上没有影响。

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

驱动程序维护者可以将这两个新的调用添加到他们的驱动程序中,以提供此功能。

实现

我建议将 list_manageable 作为新的 GET 操作添加到 Cinder 扩展的 os-volume-manage 上。它将在 Cinder 的 policy.json 文件中单独指定,以适当限制访问(默认情况下为 admin_api)。

将向 cinder-volume 发送新的 RPC 调用,这些调用将调用两个新的驱动程序 API(list_manageable_volumes 和 list_manageable_snapshots)。我将实现 LVM 驱动程序代码,作为参考实现。

负责人

主要负责人

avishay

工作项

  • 创建 API

  • 创建 RPC 调用

  • 创建驱动程序接口

  • 实现 LVM 参考

  • 实现 tempest 测试

依赖项

测试

标准单元测试和手动测试,以及针对这些建议的 API 以及管理和取消管理进行的 tempest 测试。

文档影响

将记录新的 API。

参考资料