Glance是OpenStack的镜像服务组件,对外提供虚拟机镜像的注册、上传、下载、编辑等管理服务。
今天学习了下Glanceclient 1.2.0版本的代码,和其他组件的apiclient类似,基于requests这个http库访问对应服务的RestfulAPI。
重点提下以下3个点:
1.在新增一个镜像时,v1版本的api是需要同时提供镜像的元数据和文件数据(或者文件的uri)的;v2版本则分为2步,首先通过/v2/images创建镜像的数据库记录,然后通过/v2/images/{image_id}/file上传镜像文件
2.在下载镜像时,因为镜像文件通常都是GB级别的,因此不要将HTTP响应一次性读入内存,而是采用生成器在每次迭代中读取一个64kb的chunk
3.在上传和下载镜像文件时,可以通过--progress这个参数来显示进度,glanceclient的实现很简单,将真实的文件对象封装在一个进度条对象中,该进度条对象需要提供一个read方法,在该方法内读取返回文件对象的数据并更新显示的进度条;该进度条对象就成为了一个仅提供read方法的“伪文件对象“