OpenStack Cinder源码分析之一

感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!
如果转载,请保留作者信息。
博客地址:http://blog.csdn.net/gaoxingnengjisuan
邮箱地址:dong.liu@siat.ac.cn


今天开始补充上个月欠下的任务。十二月看了Havana版本的OpenStack cinder模块的代码,随手写了一些注释。从本篇博客开始,我先把这些自己看代码过程中写的简单注释整理一下,也便于进一步进行代码阅读和理解。当然,因为看得不是很细致,错误的地方在所难免,还望朋友理解并提供帮助。

我就按照源码中的目录结构来进行整理吧,先来看代码较少的几个目录。

1 backup(/cinder/backup/

/cinder/backup/__init__.py:指定并导入cinder-backup的API类;

/cinder/backup/api.py处理所有与卷备份服务相关的请求;

    class API(base.Base):卷备份管理的接口API;主要定义了卷的备份相关的三个操作的API:create:实现卷的备份的建立;delete:实现删除卷的备份;restore:实现恢复备份;这三个操作都需要通过backup_rpcapi定义的RPC框架类的远程调用来实现;

/cinder/backup/driver.py:所有备份驱动类的基类;

   class BackupDriver(base.Base):所有备份驱动类的基类;

/cinder/backup/manager.py:卷备份的管理操作的实现;

   class BackupManager(manager.SchedulerDependentManager):块存储设备的备份管理;继承自类 SchedulerDependentManager主要实现的是三个远程调用的方法:create_backup:实现卷的备份的建立(对应api.py中的creat方法);restore_backup:实现恢复备份(对应api.py中的restore方法);delete_backup:实现删除卷的备份(对应api.py中的delete方法);

/cinder/backup/rpcapi.py:volume rpc API客户端类;

   class BackupAPI(cinder.openstack.common.rpc.proxy.RpcProxy):volume rpc API客户端类,主要实现了三个方法;create_backup:远程调用实现卷的备份的建立(对应api.py中的creat方法);restore_backup:远程调用实现恢复备份(对应api.py中的restore方法);delete_backup:远程调用实现删除卷的备份(对应api.py中的delete方法);

/cinder/backup/drivers/ceph.py:ceph备份服务实现;

   class CephBackupDriver(BackupDriver):Ceph对象存储的Cinder卷备份类;这个类确认备份Cinder卷到Ceph对象存储系统;

/cinder/backup/drivers/swift.py:用swift作为后端的备份服务的实现;

   class SwiftBackupDriver(BackupDriver):用swift作为后端的备份服务的各种管理操作实现类;

/cinder/backup/drivers/tsm.py:IBM Tivoli存储管理(TSM)的备份驱动类;

   class TSMBackupDriver(BackupDriver):实现了针对TSM驱动的卷备份的备份、恢复和删除等操作;


2 common(/cinder/common

/cinder/common/config.py:定义和描述了若干配置参数信息;

/cinder/common/sqlalchemyutils.py:sqlalchemy数据库的实用工具,主要实现了一个方法paginate_query,这个方法实现了数据库的分页查询;


3compute/cinder/compute/

/cinder/compute/__init__.py:获取和导入compute API类,即cinder.compute.nova.API;

/cinder/compute/aggregate_states.py:描述了主机所有可能状态的集合;

/cinder/compute/nova.py:定义了一个获取nova客户端对象的方法,以及通过nova客户端实现卷的快照的处理的若干方法;比如建立卷的快照和删除卷的快照的方法;


4 keymgr/cinder/keymgr/)

/cinder/keymgr/key_mgr.py密钥管理方法API;供类ConfKeyManager来继承,具体实现管理密钥的方法;

    class KeyManager(object):密钥管理接口的基类;

        def create_key(self, ctxt, algorithm='AES', length=256, expiration=None,**kwargs):建立一个密钥;

        def store_key(self, ctxt, key, expiration=None, **kwargs):存储一个密钥;

        def copy_key(self, ctxt, key_id, **kwargs):拷贝一个密钥;

        def get_key(self, ctxt, key_id, **kwargs):检索指定的密钥;

        def delete_key(self, ctxt, key_id, **kwargs):删除指定的密钥;

/cinder/keymgr/conf_key_mgr.py从对象配置选项中获取的密钥的管理实现;

    classConfKeyManager(key_mgr.KeyManager):密钥管理的实现方法类;

        create_key:实现建立密钥;

        store_key:实现存储密钥;

        copy_key:实现拷贝密钥;

        get_key:实现根据指定的id值获取相应的密钥;

        delete_key:实现删除指定密钥的操作;

        def create_key(self, ctxt, **kwargs):实现建立密钥;

        def store_key(self, ctxt, key, **kwargs):实现存储密钥;

        def copy_key(self, ctxt, key_id, **kwargs):实现拷贝密钥;

        def get_key(self, ctxt, key_id, **kwargs):实现根据指定的id值获取相应的密钥;

        def delete_key(self, ctxt, key_id, **kwargs):实现删除指定密钥的操作;

/cinder/keymgr/key.py密钥和对称密钥的相关管理类;

注:对称密钥加密的原理是通过一个对称密钥对数据时行加密;如A方用对称密钥对数据进行加密后将加密的数据和密钥一并传输给B方,B方采用这同一个密钥(对称密钥)对这个加密的数据进行解密,因为双方用的是一个密钥,所以称之为对称加密;

    class Key(object):表示所有密钥信息的基类;

        def get_algorithm(self):获取密钥的算法;

        def get_format(self):获取密钥的编码格式;

        def get_encoded(self):根据密钥的编码格式返回密钥的格式;

    class SymmetricKey(Key):对称密钥的操作类;

        def __init__(self, alg, key):建立一个新的对称对象;

        def get_algorithm(self):获取对称加密的算法;

        def get_format(self):直接返回值'RAW'

        def get_encoded(self):根据编码格式获取密钥;

/cinder/keymgr/not_impiemented_key_mgr.py:密钥管理引发异常的相关实现;


5 transfer/cinder/transfer/

/cinder/transfer/api.py:处理所有与转换卷所有权相关的请求;实现卷从一个租户/对象转换到另一个租户/对象;

    class API(base.Base):卷之间所有权相互转换操作的API;实现卷从一个租户/对象转换到另一个租户/对象;

        def get(self, context, transfer_id):获取卷所有权的转换数据信息;

        def delete(self, context, transfer_id):实现删除要转换所有权的卷的相关数据信息;

        def get_all(self, context, filters={}):根据具体用户获取能够获取的所有转换所有权的卷的相关转换数据信息;

        def _get_random_string(self, length):随机获取指定长度的字符串; 

        def _get_crypt_hash(self, salt, auth_key):基于字符串salt和auth_key生成一个随机hash值;

        def create(self, context, volume_id, display_name):根据给定的信息在卷的转换的数据库表中建立相应的条目;

        def accept(self, context, transfer_id, auth_key):接收已经提供转换的卷;


6 image/cinder/image/

/cinder/image/glance.py:应用glance作为后端的镜像服务的实现;有些操作时通过客户端调用glance模块中的相应方法实现的;

    def _parse_image_ref(image_href):对image_href进行解析;

    def _create_glance_client(context,netloc, use_ssl, version=CONF.glance_api_version):初始化一个新的glanceclient.Client对象(Glance客户端对象);

    class GlanceClientWrapper(object):实现重试操作的Glance客户端包装类;主要实现了初始化glance客户端对象的方法和通过客户端对象实现调用glance模块中的指定方法的方法;

        def _create_static_client(self, context, netloc, use_ssl, version):初始化一个新的glanceclient.Client对象(Glance客户端对象);

        def _create_onetime_client(self, context, version):建立一个客户端对象用于一次服务的调用;

        def call(self, context, method, *args, **kwargs):调用一个glance客户端方法;

    class GlanceImageService(object):这个类提供了存储和对磁盘镜像对象的检索等服务;通过glance客户端来实现若干方法的调用执行:

        detail:获取镜像列表的详细信息,并对相关镜像的元数据中的属性进行一定的格式转化操作;

        show:根据给定的镜像id值,返回包含镜像数据的字典;

        get_location:获取表示镜像后端存储位置的直接URL,获取信息:(image_meta.direct_url,image_meta.locations);

        download:通过glance客户端实现调用glance模块中对应的data方法,实现下载指定的镜像数据;

        create:存储镜像数据并返回新的镜像对象;

        update:应用新的数据更新指定镜像,通过客户端调用glance模块中的upload方法实现指定镜像元数据的更新;

        delete:通过客户端调用glance模块中的delete方法实现删除指定镜像的操作;

        def detail(self, context, **kwargs):获取镜像列表的详细信息,并对相关镜像的元数据中的属性进行一定的格式转化操作;

        def _extract_query_params(self, params):获取查询参数;

        def show(self, context, image_id):根据给定的镜像id值,返回包含镜像数据的字典;

        def get_location(self, context, image_id):获取表示镜像后端存储位置的直接URL;获取信息:(image_meta.direct_url, image_meta.locations);

        def download(self, context, image_id, data=None):通过glance客户端实现调用glance模块中对应的data方法,实现下载指定的镜像数据;

        def create(self, context, image_meta, data=None):存储镜像数据并返回新的镜像对象;

        def update(self, context, image_id, image_meta, data=None,purge_props=True):应用新的数据更新指定镜像;通过客户端调用glance模块中的upload方法实现指定镜像元数据的更新;

        def delete(self, context, image_id):通过客户端调用glance模块中的delete方法实现删除指定镜像的操作;

        def _translate_from_glance(image):将镜像元数据中的相关属性值转换为一定的格式;

        def _is_image_available(context, image):检测指定镜像是否存在;

    def_convert_timestamps_to_datetimes(image_meta):从ISO 8601格式的时间戳中解析时间信息,包括镜像建立时间、镜像更新时间和镜像删除时间等;将解析后的时间信息替换镜像元数据中的对应时间戳属性,并返回更新后的镜像元数据;

    def _extract_attributes(image):从镜像中提取属性信息;

    defget_remote_image_service(context, image_href):建立一个image_service并从给定的image_href中解析出id值;

    def get_default_image_service():获取默认的镜像服务类;

/cinder/image/image_utils.py:执行镜像处理操作的辅助方法;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值