跳转到: 导航, 搜索

Cinder/blueprints/read-only-volumes

总结

请注意,这是一个大型规范,尽可能将其分解为子规范,以便更容易地分摊工作。

发布说明

原理

用户故事

目的是提供以只读模式挂载卷的能力。

不可变卷

Cinder 作为 Glance 的后端

https://blueprints.launchpad.net/glance/+spec/glance-cinder-driver

共享卷

https://blueprints.launchpad.net/cinder/+spec/shared-volume

设计

如何使用只读卷

选项 "permissions" 代表卷权限,类似于类 Unix 系统中的文件权限,格式为:[0-7][0-7][0-7]

  • 第一位 - 用户权限(针对所有者)
  • 第二位 - 组权限(当 Keystone 中有机会创建用户组时)
  • 第三位 - 其他用户的权限;

数字代表 rwx 权限,其中

  • r 表示常规的读取权限,
  • w 表示常规的写入权限,
  • x 可能表示从卷启动的权限。

虽然多 RW 挂载不可用,但二级挂载仅以 R/O 模式可用,无论任何权限如何。


示例

以读/写模式为所有者创建卷,以只读模式为其他用户创建卷。

POST /v1/<tenant_id>/volumes

body:
{
    "volume": 
    {
        ...
        "permissions": "644", 
        ...
    }
}

工作流程

只读卷蓝图: https://blueprints.launchpad.net/cinder/+spec/read-only-volumes

添加卷权限支持以及只读卷模式的支持(最初针对 libvirt,即 libvirt+KVM、libvirt+xen 虚拟机监控程序)

  • 创建具有定义权限的卷的能力,以及从 CLI 和 Dashboard 显示卷权限的能力,以及从 CLI 更新卷权限的能力;
  • 以 R/O 模式连接到卷的能力,以及从 CLI 和 Dashboard 查看卷是否仅以 R/O 模式可用;

为其他虚拟机监控程序添加只读模式的支持。

待定

添加配置用户组以及卷组权限的能力。

待定

实现

  • 在 Cinder 数据库中添加新的字段 "permissions"。。
  • 在 CLI 和 Dashboard 中添加 "Permissions" 和 "Read Only" 列。
  • 在卷创建表单中添加 "Permissions" 字段。
  • 如果卷仅以只读模式可用,则在附加连接配置中添加 'readonly' 标志。

代码变更

正在审核

检查卷是否仅以 R/O 模式可用的功能

def volume_read_only_get(context, vol):
    perms = vol.get('permissions')
    RW, RO = False, True

    # While no multi-RW-attach,
    # if volume is attached, only R/O mode is available
    if vol.get('attach_status') == 'attached':
        if vol.get('rw_attached_user') == context.user_id:
            return RW
        return RO

    if context.user_id == vol.get('user_id'):
        return int(perms[0]) < 6

    # TODO(aguzikova): when there will be groups for volumes' users,
    # check user in group and if it's true use group permissions

    # User in "others"
    return int(perms[2]) < 6

迁移

包括

  • 数据迁移(如果有)
  • 如何引导用户使用新的操作方式(如果需要)。

前提条件

一旦有机会从 Keystone 使用用户组,我们将能够轻松实现具有组权限的功能。

测试/演示计划

这不必在规范接近 Beta 之前添加或完成。

未解决的问题