搜索

6.123. ImageTransfer

download PDF

此服务提供控制镜像传输的机制。客户端必须使用 第 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_urlproxy_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.374. 方法概述
名称概述

取消

取消镜像传输会话。

extend

扩展映像传输会话。

Finish

在完成传输数据后,完成传输。

get

获取映像传输实体。

pause

暂停映像传输会话。

resume

恢复镜像传输会话。

6.123.1. 取消 POST

取消镜像传输会话。这会终止传输操作并移除部分镜像。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.