克隆一致性组

https://blueprints.launchpad.net/cinder/+spec/clone-cg

本提案旨在添加一项功能,可以从现有的一致性组创建克隆一致性组。

问题描述

目前,用户可以先创建一个一致性组,然后一次克隆现有 CG 中的一个卷,并将其添加到新的 CG 中,直到所有卷都被克隆并添加到 CG 中。

本提案希望增强现有的从源创建 CG 的 API,使其成为一个步骤,而不是多步骤过程。

注意:新 CG 中的克隆卷不保证一致性。从一致性的角度来看,这与先创建一个空 CG,然后逐个创建卷并添加到 CG 中没有区别。

现有的从源创建 CG 的 API 允许用户从组快照(CG 快照)创建 CG,这应该是一致的。

用例

假设用户已经有一个包含卷的一致性组。现在他/她想创建一个新的 CG,其中所有卷都从另一个 CG 克隆而来。 拟议的更改将使这对于用户来说更容易。

提议的变更

  • 现有的从源创建 CG 的 API 将现有的 CG 快照作为源。

  • 本蓝图建议修改现有的 API,以接受现有的 CG 作为源。

备选方案

在没有拟议的更改的情况下,我们可以使用以下步骤从现有的 CG 创建一个 CG

  • 创建一个空的 CG。

  • 从现有 CG 中的现有卷创建一个克隆卷,并将其添加到新的 CG 中。

  • 对 CG 中的所有卷重复上述步骤。

数据模型影响

  • 数据库模式更改:将在 consistencygroups 表中添加一个新列 source_cg_id。

REST API 影响

一致性组 API 变更

  • 从源创建一致性组

  • V2/<租户 ID>/consistencygroups/create_from_src

    • 方法:POST

    • V2 的 JSON 模式定义

      {
          "consistencygroup-from-src":
          {
              "name": "my_cg",  # existing
              "description": "My consistency group",  # existing
              "cgsnapshot_id": "xxxxxxxx",  # existing
              "consistencygroup_id": "xxxxxxxx",  # new
          }
      }
      
    • 在现有的从源创建一致性组 API 中,添加一个新的参数“consistencygroup_id”,以允许现有的 CG 作为新 CG 的源。

  • Cinder 卷驱动程序 API

    将向现有的卷驱动程序 API 添加两个新的可选参数

    • def create_consistencygroup_from_src(self, context, group, volumes, cgsnapshot=None, snapshots=None, src_group=None, src_volumes=None)

    • 注意,只有“src_group”和“src_volumes”是新参数。

安全影响

通知影响

其他最终用户影响

需要更改 python-cinderclient 以支持修改后的 API。

  • 创建克隆 CG cinder consisgroup-create-from-src –name <名称> –description <描述> –consistencygroup <cg uuid 或名称>

性能影响

其他部署者影响

无。

开发人员影响

驱动程序开发人员可以在修改后的驱动程序 API 中添加对该功能的支持。

实现

负责人

主要负责人

xing-yang

其他贡献者

工作项

  1. API 变更:* 修改从源创建 CG 的 API

  2. 卷驱动程序 API 变更:* 修改相应的驱动程序 API

  3. 数据库模式变更

依赖项

测试

将添加新的单元测试来测试更改后的代码。

文档影响

需要进行文档更改。

参考资料