您的位置:首页 > 编程语言

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

2013-04-24 17:36 495 查看
继续

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,则抛异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: