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,则抛异常。
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,则抛异常。
相关文章推荐
- OpenStack-Cinder创卷代码走读(Grizzly)上
- OpenStack-Cinder创卷代码走读(Grizzly)下
- OpenStack-Cinder创卷代码走读(Grizzly)END
- OpenStack-Cinder创卷代码走读(Grizzly)
- OpenStack-Cinder强制卸载卷接口代码走读(Grizzly)上
- OpenStack-Cinder强制卸载卷接口代码走读(Grizzly)下
- OpenStack-Cinder挂卷接口代码走读(Grizzly)
- OpenStack-Cinder卸卷接口代码走读(Grizzly)
- OpenStack Grizzly实例重启之后cinder-volume服务无法启动的解决办法
- OpenStack(Grizzly) cinder-volume时序图
- Openstack Cinder 服务启动代码分析
- OpenStack(Grizzly) Cinder整体框架图
- OpenStack(Grizzly) Cinder基本状态图
- btrfs连载(一) test目录代码走读之extent-buffer-test.c
- Openstack 自动化部署puppet代码管理
- openstack 管理三十 - rpm 方式部署 openstack [cinder]
- 【原创】Android HAL的理解-----Mokoid代码走读
- openstack cinder manager volumes
- OpenStack提交代码的review流程