【问题标题】:How can I import ova file to vcenter using vcenter api?如何使用 vcenter api 将 ova 文件导入到 vCenter?
【发布时间】:2022-10-26 02:32:00
【问题描述】:

我正在尝试使用 REST API 将 ova 文件上传到 vCenter 库。 为此(全部使用 Vcenter api 完成)

  1. 使用身份验证
  2. 获取数据存储
  3. 已创建库
  4. 已将项目添加到库
  5. 已创建更新会话
  6. 获取用于上传的端点
  7. 上传ova文件到vcenter

    阶段 1 ~ 6 已成功完成,但最后阶段我无法将 ova 文件上传到 vCenter 库。 当我调用 api 时,它返回 200 响应代码,似乎上传成功完成。但是,事实上,我找不到任何在 vcenter 库中导入的 ova 文件,并且我可以看到错误“检测到解析头错误”

    我的上传功能如下;

    func UploadFile(client *http.Client, fileName, uploadEndpoint, sessionID string) (status bool, err error) {
    
    file, err := os.Open(fileName)
    if err != nil {
        return false, err
    }
    defer file.Close()
    
    body := &bytes.Buffer{}
    writer := multipart.NewWriter(body)
    part, err := writer.CreateFormFile("file", filepath.Base(fileName))
    if err != nil {
        return false, err
    }
    _, err = io.Copy(part, file)
    
    err = writer.Close()
    if err != nil {
        return false, err
    }
    //uploadEndpoint ;  https://ip252.ip-51-255-152.eu:443/cls/data/5a86158a-f818-4796-8bc1-e4d88a29dcd7/focal-server-cloudimg-amd64.ova
    
    req, err := http.NewRequest("POST", uploadEndpoint, body)
    req.Header.Set("Content-Type", writer.FormDataContentType())
    req.Header.Set("vmware-api-session-id", sessionID)
    
    resp, err := client.Do(req)
    if err != nil {
        return false, err
    }
    defer resp.Body.Close()
    
    return true, nil
    }
    

【问题讨论】:

  • 你有没有解决过这个问题?我现在正在尝试做同样的事情。

标签: go vcenter


【解决方案1】:

有点晚了,但我制作了一个脚本,该脚本采用选定的 OVA,将其推送到指定的 vCenter,然后使用 PowerCLI 将其转换为模板。您可能会发现其中的一部分很有用。

https://github.com/bluechipgit/PowerCLI/blob/main/scripts/Deploy-Templates/Deploy-Templates.ps1

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 2019-10-09
    • 2019-06-10
    • 2011-10-14
    • 2020-05-14
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多