Cinder/blueprints/read-only-volumes
< Cinder
- Launchpad 条目: 只读卷
- 创建时间: 2013年7月3日
- 贡献者: Anastasia Guzikova
目录
总结
请注意,这是一个大型规范,尽可能将其分解为子规范,以便更容易地分摊工作。
发布说明
原理
用户故事
目的是提供以只读模式挂载卷的能力。
不可变卷
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 之前添加或完成。