OpenStack Python API:如何使用Python API从Glance下载镜像

7 投票
2 回答
6446 浏览
提问于 2025-04-18 06:54

我正在尝试写一个Python程序,从glance服务下载图片。不过,我找不到用API从云端下载图片的方法。在这里可以找到相关文档:

http://docs.openstack.org/user-guide/content/sdk_manage_images.html

文档里讲了怎么上传图片,但没有说明怎么下载。

下面的代码展示了如何获取图片对象,但我不知道该如何处理这个对象:

import novaclient.v1_1.client as nvclient
name = "cirros"
nova = nvclient.Client(...)
image = nova.images.find(name=name)

有没有办法使用这个“image”对象下载图片文件并保存到磁盘上呢?

2 个回答

3

你可以使用 glance 命令行工具,通过 image-download 命令来完成这个操作:

glance image-download [--file <FILE>] [--progress] <IMAGE>

不过,你需要先安装 glance 命令行工具。

另外,根据你使用的云服务提供商,这个操作可能对普通用户是禁用的。你可能需要向你的服务提供商确认一下。

6

如果你不想安装glance命令行工具,也可以通过HTTP请求来下载镜像,具体方法可以参考这里:

http://docs.openstack.org/developer/glance/glanceapi.html#retrieve-raw-image-data

如果你使用Python客户端,可以这样做:

img = client.images.get(IMAGE_ID) 

然后调用

client.images.data(img) # or img.data()

来获取一个生成器,这样你就可以访问镜像的原始数据了。

完整的例子(将镜像从glance保存到磁盘):

img = client.images.find(name='cirros-0.3.2-x86_64-uec')

file_name = "%s.img" % img.name
image_file = open(file_name, 'w+')

for chunk in img.data():
    image_file.write(chunk)

撰写回答