5.101. ImageTransfer
该服务提供了一种控制镜像传输的机制。客户端必须通过 添加 第 5.102 节 “ImageTransfers” 服务来创建传输,表示要将数据传送到/从中传输数据。
执行此操作后,转让由此服务管理。
例如,要上传到 ID 为 52cb593f-837c-4633-a444-35a0a0383706
的磁盘镜像,客户端可以使用 oVirt 的 Python SDK,如下所示:
传输具有阶段,用于管理上传/下载的流程。实施此类流的客户端应轮询/检查传输的阶段,并相应地执行操作。所有可能阶段均可在 ImageTransferPhase 中找到。
添加新传输后,其阶段将为初始化。客户端必须轮询到传输的阶段,直到其更改为止。当阶段传输时,会话就可以开始传输。???
例如:
transfer_service = transfers_service.image_transfer_service(transfer.id) while transfer.phase == types.ImageTransferPhase.INITIALIZING: time.sleep(3) transfer = transfer_service.get()
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 没有在为传输选择的主机中运行。通过调用管理它的服务的 恢复,可以恢复转让。
如果会话成功建立 - 返回的传输实体将包含 proxy_url 和 signed_ticket 属性,客户端需要使用该属性来传输所需的数据。客户端可以选择使用镜像的数据发送 HTTPS 请求的任何技术和工具。
-
proxy_url
是镜像要执行 I/O 的代理服务器的地址。 -
signed_ticket
是需要添加到 HTTPS 请求中的Authentication
标头中的内容,以执行可信通信。
例如,可以使用 Python 的 HTTPSConnection 来执行上传,因此为后续上传设置 upload_headers
dict:
upload_headers = { 'Authorization' : transfer.signed_ticket, }
upload_headers = {
'Authorization' : transfer.signed_ticket,
}
使用 Python 的 HTTPSConnection
时,会建立一个新的连接:
要发送的特定内容范围必须在 Content-Range
HTTPS 标头中记录。这可用于将传输分成多个请求,以获得更灵活的流程。
为此,客户端必须重复扩展传输会话,使频道保持打开。否则,会话将终止,传输将进入 paused_system
阶段,对服务器的 HTTPS 请求将被拒绝。
例如,客户端可以迭代文件的块,并在要求服务扩展会话时将它们发送到代理服务器:
完成转让后,用户应调用 finalize。这将进行最终的调整和验证来完成传输过程。
例如:
transfer_service.finalize()
transfer_service.finalize()
如果出现错误,传输的阶段将更改为 finished_failure,磁盘的状态将变为 Illegal
。否则,它将更改为 completed_success,磁盘将准备就绪。在这两种情况下,传输实体将在后不久删除。
名称 | 概述 |
---|---|
| 扩展镜像传输会话。 |
| 完成传输数据后,完成传输。 |
| 获取镜像传输实体。 |
| 暂停镜像传输会话。 |
| 恢复镜像传输会话。 |
5.101.1. 扩展 POST 复制链接链接已复制到粘贴板!
扩展镜像传输会话。