You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过VMware vCenter 7 REST API导出虚拟机的操作步骤有哪些

VMware vSphere REST API 导出虚拟机操作步骤及示例

以下方案适用于vSphere 7.0及以上版本官方REST API,无需依赖第三方工具包。

前置准备

  • 已完成API身份认证,拿到有效的vmware-api-session-id请求头
  • 目标虚拟机处于关机或者挂起状态,运行状态下无法执行导出
  • 操作账号对目标VM持有VirtualMachine.Export权限

核心操作步骤

  1. 获取目标虚拟机唯一标识符

从你已实现的VM信息查询接口返回体中提取vm字段值即可,格式通常为vm-xxxx。
2. ### 创建导出下载会话
调用POST /api/vcenter/vm/{vm}/export接口,请求头携带身份session id,可通过请求体自定义导出规则:
示例请求体:

{
  "export_options": ["COMPRESS", "INCLUDE_SECURITY_INFORMATION"],
  "name": "自定义导出任务名称"
}

调用成功后会返回sid字段(下载会话ID),同时返回所有待下载的文件列表,包含每个文件的下载路径、文件大小、分片大小参数。

注意:下载会话默认超时时间为5分钟,大文件下载场景下需要每3分钟主动调用POST /api/vcenter/vm/download-session/{sid}?action=keep-alive接口保活,避免会话失效。

  1. 遍历下载所有关联文件

从创建会话返回的files数组中逐一下载文件:

  • 每个文件的download_link字段为直链地址,请求时同样需要携带vmware-api-session-id头
  • 大文件可根据返回的chunk_size参数做分片下载,避免单请求超时
  • 下载时建议按返回的name字段命名本地文件,后续导入时可被直接识别
  1. 销毁下载会话

所有文件下载完成后,调用DELETE /api/vcenter/vm/download-session/{sid}接口主动销毁会话,释放vCenter端资源。

极简Python示例片段

import requests
import os

# 基础配置
VC_HOST = "你的vCenter地址"
SESSION_ID = "已获取的身份会话ID"
TARGET_VM_ID = "目标虚拟机ID(如vm-1234)"
SAVE_PATH = "./vm_export/"
os.makedirs(SAVE_PATH, exist_ok=True)

HEADERS = {
    "vmware-api-session-id": SESSION_ID,
    "Content-Type": "application/json"
}
# 测试环境关闭SSL校验,生产环境建议删除该行并配置可信证书
requests.packages.urllib3.disable_warnings()

# 1. 创建导出会话
create_export_url = f"https://{VC_HOST}/api/vcenter/vm/{TARGET_VM_ID}/export"
export_payload = {
    "export_options": ["COMPRESS"],
    "name": "test_vm_export"
}
resp = requests.post(create_export_url, json=export_payload, headers=HEADERS, verify=False)
export_info = resp.json()
download_sid = export_info["sid"]
file_list = export_info["files"]

# 2. 逐一下载文件
for file_item in file_list:
    file_name = file_item["name"]
    download_url = f"https://{VC_HOST}{file_item['download_link']}"
    print(f"开始下载:{file_name}")
    with requests.get(download_url, headers=HEADERS, verify=False, stream=True) as r:
        r.raise_for_status()
        with open(f"{SAVE_PATH}/{file_name}", 'wb') as f:
            for chunk in r.iter_content(chunk_size=8192):
                f.write(chunk)
    # 每下载一个文件触发一次保活,避免会话超时
    keep_alive_url = f"https://{VC_HOST}/api/vcenter/vm/download-session/{download_sid}?action=keep-alive"
    requests.post(keep_alive_url, headers=HEADERS, verify=False)

# 3. 销毁会话
delete_session_url = f"https://{VC_HOST}/api/vcenter/vm/download-session/{download_sid}"
requests.delete(delete_session_url, headers=HEADERS, verify=False)

常见注意事项

  • 如使用vSphere 6.7版本,REST API路径略有差异,对应为/rest/com/vmware/vcenter/vm/{vm}/export,参数格式也存在小调整,优先适配7.0+版本即可
  • 单文件超过10G的场景建议开启分片下载,每下载完一个分片主动触发一次保活接口
  • 导出的文件默认为OVF格式,包含.ovf描述文件、.vmdk磁盘文件、.mf校验文件三类

内容的提问来源于stack exchange,提问作者user2295457

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 00:36:04