在Icehouse版本的时候,Glance API V2中加入了一个新的接口Task,它通过使用任务流进行镜像的导入、导出、克隆功能。Kilo版本之前是通过eventlet的形式实现,Kilo版本的时候进行了重构,引入了taskflow(OpenStack下的一个关于任务流的项目),使之更简洁实用。
Task是一个异步操作,用户发送一个Task命令后,后台会自动处理,并把结果写入数据库,结果包括result和message。若是执行失败,message中会显示失败原因。而以前的create接口是同步操作,当上传的镜像过大时,等待时间会很长,不便于操作,严重的甚至会导致glance进程崩溃。
Task主要包含三种操作:import、export、clone。import用来镜像导入,export用来导出,clone用来跨region同步镜像数据,目前社区实现了import。
Import操作非常简单,用户按照要求,提供input信息就行—其中包括import_from、import_from_format和image_properties三个参数。Task在接收到用户请求后,首先把信息写入数据库,并返回给用户。之后用户就无需任何操作,Task会在后台启一个taskflow线程,自动执行import操作,把结果写入数据库, 如果设置了work_dir和并conversion_format,task会进行镜像虚拟大小的获取以及格式转换。 其中work_dir为镜像虚拟大小的获取以及格式转换使用的本地目录,conversion_format为镜像转换后的格式。
Task有四种状态:
pending :Task已经创建,但Glance还未开始运行;
processing : Task正在运行;
success : Task成功运行;
failure :Task运行出错。
(1) glance-api.conf配置:
[task]
work_dir = /home/work/
[taskflow_executor]
conversion_format = raw
(2) 命令:
glance task-create --type import --input '{"import_from":"http://10.43.176.8/images/cirros-0.3.2-x86_64-disk.img","import_from_format": "","image_properties":{"disk_format":"raw","container_format":"bare","name":"test_img"}}'
这样,就添加了一个新的task,当此task在后台执行完成后,glance中会新增一个名为test_img的镜像,其disk_format和container_format分别是raw和bare,内容是从镜像服务器上下载下来的cirros镜像,存储在glance指定的默认后端中。
(3) 结果:
能够正常上传镜像,并且可以进行格式转换,镜像虚拟大小的获取。
(需要手动配置work_dir和conversion_format,如果不配置,上传镜像不会进行格式转换及镜像虚拟大小的获取)
关于disk_format,如果配置work_dir和conversion_format,会在查询镜像的虚拟大小时同时获取这个参数;如果没有配置work_dir和conversion_format,必须写到–input的入参里。
# glance image-show d7eb4c53-bbbc-4cf0-a546-e53e5104689e
+------------------+-----------------------------------------------------------------------------+
| Property | Value |
+------------------+-----------------------------------------------------------------------------+
| checksum | cf2392db1f59d59ed69a8f8491b670e |
| container_format | bare |
| created_at | 2016-06-14T16:15:53Z |
| direct_url | file:///opt/stack/data/glance/images/d7eb4c53-bbbc-4cf0-a546-e53e5104689e|
| disk_format | raw |
| id | d7eb4c53-bbbc-4cf0-a546-e53e5104689e |
| locations | [{"url": "file:///opt/stack/data/glance/images/d7eb4c53-bbbc- |
| | 4cf0-a546-e53e5104689e", "metadata": {}}] |
| min_disk | 0 |
| min_ram | 0 |
| name | test_img |
| owner | 3a54d03b484449e7a09f13caa770f7c0 |
| protected | False |
| size | 41126400 |
| status | active |
| tags | [] |
| updated_at | 2016-06-14T16:16:01Z |
| virtual_size | 41126400 |
| visibility | private |
+------------------+--------------------------------------------------------------------------------+
关于支持的import_from格式
目前Mitaka版本中会对import_from进行验证,目前支持"http://"、 “https:// "
不支持"file:///”、“filesystem:///”(安全问题:see LP bug #942118 #1400966)
参考:
https://specs.openstack.org/openstack/glance-specs/specs/mitaka/approved/image-import/image-import-refactor.html
http://blog.csdn.net/wxy2933/article/details/48312705