本文主要是介绍深挖Openstack Glance - 源码分析(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
v1版本API功能解析
1. 创建image
2. 更新image
3. 获取image信息(metadata和data)
4. 删除image
5. 获取image列表
6. 获取image元数据(metadata)
7. 下载image
这些功能都在/glance/api/v1/images.py里,该文件主要是提供与image相关的操作。
接下来将对这些功能逐个分析:
1. 创建image
@utils.mutating
def create(self, req, image_meta, image_data):
1.1 首先检查是否有权限进行所要的操作
# 检查各种操作的权限
# _enforce:检查是否有该操作的权限
self._enforce(req, 'add_image')
is_public = image_meta.get('is_public')
if is_public:
self._enforce(req, 'publicize_image')
if Controller._copy_from(req):
self._enforce(req, 'copy_from')
if image_data or Controller._copy_from(req):
self._enforce(req, 'upload_image')
1.2 对image的数据进行其他检查
# 检查image元数据是否创建了受保护的属性
self._enforce_create_protected_props(image_meta['properties'].keys(),req)
# 检查image属性是否太大,超过了配额
self._enfore_image_property_quota(image_meta, req=req)
1.3 保存image元数据到db中
# 获取image id,设置image状态为queued
# queued状态:没有上传update,只预留了image id
image_meta = self._reserve(req, image_meta)
深入_reserve方法:
1.3.1 获取外部存储地址
location = self._external_source(image_meta, req)
1.3.2 对选择的后端store类型进行判断
# 后端存储store类型必须是glance所支持的存储store类型
scheme = image_meta.get('store')
if scheme and scheme not in store.get_known_schemes():
msg = _("Required store %s is invalid") % scheme
LOG.warn(msg)
raise HTTPBadRequest(explanation=msg,
content_type='text/plain')
1.3.3 获取image元数据状态(active/queued)
image_meta['status'] = ('active' if image_meta.get('size') == 0)
else 'queued')
1.3.4 获取需要使用到的具体的存储组件
这篇关于深挖Openstack Glance - 源码分析(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!