OpenStack-Cinder创卷代码走读(Grizzly)中

继续

11.除了name和description外,然后根据参数中volume_type的ID,从数据库中获取对应的volume_type的值,放入kwargs中,如果volumeType未找到,则会报异常。

12.取metadata参数,放入kwargs中

13.如果参数中有snapshot ID参数,则从数据库中取快照的信息放入kwargs中,否则置为none;

14.取source_volid参数,如果有则从数据库中取source voulme的信息,如果没有则置为null.

15.取size参数,如果用户没有指定该参数但是snapshot的信息时,size以snapshot中volume_size为准;另一种情况,如果没有指定该参数但是有source_volume信息时,以source_volume中的size为准,由此可以看出,openstack至少支持3种创建方式:基本创建;根据卷快照创建;根据另一个卷创建(克隆卷?)。

16.如果ext_mgr (什么作用?)中指定了'os-image-create',则从请求中还要获取imageRef参数,并且这个参数和snapshot_id参数不能同时指定。并从imageRef中获取image_uuid参数,放入kwargs中。这样Cinder就又多了一种创卷方式:从镜像创建卷。

17.取请求中的availability_zone参数,放入kwargs中。

18.调用volume_api.create(为volume包下的api.py中的API类方法)方法,创建卷。该方法的入参为:(context,size, name, description, snapshot=None,
    image_id=None, volume_type=None, metadata=None, availability_zone=None, source_volume=None)

19.该方法首先进行参数校验,1.不允许snapshot和source_volume参数同时指定。2.验证该用户是否有权限进程创卷操作。3.如果snapshot参数不是空,判断snapshot的状态是否为available,否则抛出异常,同时如果size参数也为空,则从snapshot中取volume_size作为要创建卷的size,并取snapshot id。4.如果source_volume参数不是空,则判断source_volume状态是否为error,如果是则抛出异常。同时取source_volume的size作为卷的size,如果用户指定的size小于source_volume的size,则抛出异常,并取source_volume的id。5.校验size如果不是integer或者小于等于0,则抛出异常。6,参数中如果只有image_id,则调用glance接口查询image的metadata,并计算镜像的GB大小,如果镜像大于指定卷的size,则抛异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值