6.123. ImageTransfer
此服务提供控制镜像传输的机制。客户端必须使用 第 6.124 节 “ImageTransfers” 服务添加来创建传输,指示要在其中传输数据的镜像。
执行此操作后,转让由此服务管理。
使用 oVirt 的 Python SDK:
上传 ID 123
的磁盘
(在数据中心的随机主机上):
transfers_service = system_service.image_transfers_service() transfer = transfers_service.add( types.ImageTransfer( disk=types.Disk( id='123' ) ) )
在 主机
ID 456
上上传 ID 123
的磁盘
:
transfers_service = system_service.image_transfers_service() transfer = transfers_service.add( types.ImageTransfer( disk=types.Disk( id='123' ), host=types.Host( id='456' ) ) )
如果用户想要下载磁盘而不是上传,则应将 下载
指定为传输 的方向 属性。这将授予镜像的读取权限,而不是写入权限。
例如:
transfers_service = system_service.image_transfers_service() transfer = transfers_service.add( types.ImageTransfer( disk=types.Disk( id='123' ), direction=types.ImageTransferDirection.DOWNLOAD ) )
传输具有控制上传/下载流程的阶段。实施此类流程的客户端应轮询/检查转让的阶段,并相应地操作。所有可能的阶段都可以在 ImageTransferPhase 中找到。
添加新转移后,其阶段将初始化。在转让更改之前,客户端必须轮询传输阶段。当阶段开始转移后,会话就可以开始转移。
例如:
transfer_service = transfers_service.image_transfer_service(transfer.id) while transfer.phase == types.ImageTransferPhase.INITIALIZING: time.sleep(3) transfer = transfer_service.get()
在该阶段,如果转让的阶段是 paused_system,则无法成功建立会话。这可能是因为 ovirt-imageio-daemon 没有在选择进行传输的主机中运行。可以通过调用管理它的服务恢复传输。
如果会话成功建立 - 返回的传输实体将包含 transfer_url 和 proxy_url 属性,客户端需要使用这些属性来传输所需的数据。客户端可以选择任何技术和工具来发送带有镜像数据的 HTTPS 请求。
-
transfer_url
是其中一个虚拟机监控程序上运行的 imageio 服务器的地址。 -
proxy_url
是 imageio 代理服务器的地址,如果您无法访问 transfer_url,则可以使用该地址。
若要传输映像,建议使用 imageio 客户端 python 库。
from ovirt_imageio import client # Upload qcow2 image to virtual disk: client.upload("disk.qcow2", transfer.transfer_url) # Download virtual disk to qcow2 image: client.download(transfer.transfer_url, "disk.qcow2")
您还可以使用 imageio REST API 上传和下载。如需了解更多相关信息,请参阅 imageio API 文档:
http://ovirt.github.io/ovirt-imageio/images.html
完成转让后,用户应致电完成。这将为完成转移过程做出最终调整和验证。
例如:
transfer_service.finalize()
如果出现错误,传输阶段将更改为 finished_failure,磁盘的状态将更改为 Illegal
。否则,它将更改为 completed_success,磁盘将可供使用。在这两种情况下,转让实体将在后面很快删除。
使用 HTTP 和 cURL 调用:
对于上传,首先创建一个新磁盘:
- 以字节为单位指定 'initial_size' 和 'provisioned_size'。
- 'initial_size' 必须大于或与上传数据的大小相同。
POST /ovirt-engine/api/disks
请求正文如下:
<disk> <storage_domains> <storage_domain id="123"/> </storage_domains> <alias>mydisk</alias> <initial_size>1073741824</initial_size> <provisioned_size>1073741824</provisioned_size> <format>raw</format> </disk>
-
创建用于下载/卸载 ID 为
456
的磁盘
的新镜像传输:
POST /ovirt-engine/api/imagetransfers
请求正文如下:
<image_transfer> <disk id="456"/> <direction>upload|download</direction> </image_transfer>
将响应:
<image_transfer id="123"> <direction>download|upload</direction> <phase>initializing|transferring</phase> <proxy_url>https://proxy_fqdn:54323/images/41c732d4-2210-4e7b-9e5c-4e2805baadbb</proxy_url> <transfer_url>https://daemon_fqdn:54322/images/41c732d4-2210-4e7b-9e5c-4e2805baadbb</transfer_url> ... </image_transfer>
注意:如果阶段为"初始化",请轮询 image_transfer
,直到其阶段变为"传输"。
- 使用 'transfer_url' 或 'proxy_url' 来调用 curl 命令:
- 使用 'transfer_url' 直接从/到 ovirt-imageio-daemon 传输,或者使用 'proxy_url' 从/ ovirt-imageio-proxy 传输。注意:使用代理可以缓解没有直接连接到守护进程计算机的情况,例如 vdsm 机器位于与引擎不同的网络中。
-usersdownload:
$ curl --cacert /etc/pki/ovirt-engine/ca.pem https://daemon_fqdn:54322/images/41c732d4-2210-4e7b-9e5c-4e2805baadbb -o <output_file>
- SASupload:
$ curl --cacert /etc/pki/ovirt-engine/ca.pem --upload-file <file_to_upload> -X PUT https://daemon_fqdn:54322/images/41c732d4-2210-4e7b-9e5c-4e2805baadbb
- 通过调用操作来结束镜像传输:
POST /ovirt-engine/api/imagetransfers/123/finalize
请求正文如下:
<action />
名称 | 概述 |
---|---|
| 取消镜像传输会话。 |
| 扩展映像传输会话。 |
| 在完成传输数据后,完成传输。 |
| 获取映像传输实体。 |
| 暂停映像传输会话。 |
| 恢复镜像传输会话。 |
6.123.1. 取消 POST
取消镜像传输会话。这会终止传输操作并移除部分镜像。