2017-07-17 10 views
0

既存のHDDをある仮想マシンから他の仮想マシンに追加しようとしています。vSphere、API経由で既存のHDDをVMに追加する(govmomi)

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に受け取ったディスクを追加しようとしている:最初に私はこのようなソースVMからディスクを取得するには​​

: 私はgolangと、このAPIを使用

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からエラーが発生します。

Cannot complete the operation because the file or folder [xxxxx] xxxxx/xxxxx.vmdk already exists 

私は間違っていますか?ありがとう!

答えて

0

私はここで答えました:https://github.com/vmware/govmomi/issues/790

の作業コード:

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())) 

} 
関連する問題