首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vSphere,通过API将现有的HDD添加到VM中(Govmomi)

vSphere,通过API将现有的HDD添加到VM中(Govmomi)
EN

Stack Overflow用户
提问于 2017-07-17 18:57:12
回答 1查看 674关注 0票数 1

我试图将现有的HDD从一个虚拟机添加到另一个虚拟机。我使用golang和这个api:https://github.com/vmware/govmomi

首先,我从源vm获得如下磁盘:

代码语言:javascript
复制
for _, device := range devices {
        currentDeviceLabel := device.GetVirtualDevice().DeviceInfo.GetDescription().Label
        if strings.Contains(strings.ToLower(currentDeviceLabel), "hard disk"){
        disks = append(disks, device)
    }    
return disks

然后我尝试将接收到的磁盘添加到其他VM中:

代码语言:javascript
复制
func addDisk(vm *object.VirtualMachine, disk types.BaseVirtualDevice) {

    ctx, cancel := context.WithCancel(context.Background())
    defer cancel()

    spec := types.VirtualMachineConfigSpec{

        DeviceChange : []types.BaseVirtualDeviceConfigSpec {

            &types.VirtualDeviceConfigSpec{

                Operation: types.VirtualDeviceConfigSpecOperationAdd,
                FileOperation: types.VirtualDeviceConfigSpecFileOperationCreate,
                Device: disk,
            },

        },
    }

    result, err := vm.Reconfigure(ctx, spec)
    if err != nil {
        log.Fatal(fmt.Sprintf("err: %s", err.Error()))

    }

我从vSphere那里得到了错误:

代码语言:javascript
复制
Cannot complete the operation because the file or folder [xxxxx] xxxxx/xxxxx.vmdk already exists

我做错什么了?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-19 09:03:08

我在这里得到了答案:https://github.com/vmware/govmomi/issues/790

工作代码:

代码语言:javascript
复制
spec := types.VirtualMachineConfigSpec{}
config := &types.VirtualDeviceConfigSpec{
    Device:    disk,
    Operation: types.VirtualDeviceConfigSpecOperationAdd,
}
spec.DeviceChange = append(spec.DeviceChange, config)

result, err := vm.Reconfigure(ctx, spec)
if err != nil {
    log.Fatal(fmt.Sprintf("err: %s", err.Error()))

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45151679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档