Vitalii Kravchenko
Vitalii Kravchenko

Reputation: 395

Modify Virtual disk size using VI Java API

I'm trying to clone VM, and I want to change the disk capacity.

    int virtualDisksCount = 0;
    VirtualDisk virtualDisk = null;
    for (VirtualDevice virtualDevice : virtualHardware.getDevice()) {
        if (virtualDevice instanceof VirtualDisk) {
            virtualDisksCount++;
            virtualDisk = (VirtualDisk) virtualDevice;
        }
    }
    if (virtualDisksCount == 1) {
        VirtualDeviceConfigSpec discSpec = new VirtualDeviceConfigSpec();
        discSpec.setOperation(VirtualDeviceConfigSpecOperation.EDIT);

        virtualDisk.setCapacityInBytes(155500000000l);
        virtualDisk.setCapacityInKB(155500000000000000l);


        discSpec.setDevice(virtualDisk);

       return discSpec;
    } 

The code throws exception : Invalid operation for device '0'. I passed these parameters in CloneVm_Task and in ReconfigureVM_Task, the same errors happens

How can I change the virtual disk capacity? Using Vsphere 5.5

Upvotes: 0

Views: 677

Answers (1)

Josh Ames
Josh Ames

Reputation: 46

I don't code in Java, but it's close enough to C# for me to help. First off to do this you need to get your disk info and then pull out the virtualdeviceconfigspec, change it, then add attach it back to the disk. You are creating a new spec then setting the properties. Also, why are you setting the size in bytes then kb???

Here is all the Java I could muster...

myDisk.setCapacityInKB(Long.parseLong(50)*1024*1024);
VirtualDeviceConfigSpec vdConfigSpec = new VirtualDeviceConfigSpec();
vdConfigSpec.setDevice(myDisk);
vdConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.edit);
VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec();
vmConfigSpec.setDeviceChange(new VirtualDeviceConfigSpec[]{vdConfigSpec});
Task task = vm.reconfigVM_Task(vmConfigSpec);

Upvotes: 1

Related Questions