vSphere, добавьте существующий жесткий диск в виртуальную машину через API(govmomi)

Я пытаюсь добавить существующий жесткий диск с одной виртуальной машины на другую. Я использую golang и этот API: https://github.com/vmware/govmomi

Сначала я получаю диски из источника vm, как это:

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

И тогда я пытаюсь добавить полученный диск к другой виртуальной машине:

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

Что я делаю не так? Спасибо!

1 ответ

Решение

Я получил ответ здесь: 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()))

}
Другие вопросы по тегам