I'm working on a project where I'm cloning a VM with RbVmomi and after the clone is finished I want to ReConfig the VM.
The cloning is working great, but I have some problems when I want to change the disk size of the VM. I can change the numbers of CPUs and the size of memory, but when I try to change the disk size I get the error:
RbVmomi::Fault (InvalidDeviceSpec: Invalid configuration for device '0'.):
Code:
if json.has_key?('CPU_COUNT') && json.has_key?('RAM')
vm_cfg = {
:numCPUs => json['CPU_COUNT'],
:memoryMB => json['RAM'],
:deviceChange => [
:operation => :edit, #also tried with :add
:fileOperation => :create,
:device => RbVmomi::VIM.VirtualDisk(
:key => 0,
:backing => RbVmomi::VIM.VirtualDiskFlatVer2BackingInfo(
:fileName => '[datastore]',
:diskMode => :persistent,
:thinProvisioned => true
),
:controllerKey => 1000,
:unitNumber => 0,
:capacityInKB => json['DISK_SIZE'] * 1024 * 1024
)
]
}
dc.find_vm(vmID).ReconfigVM_Task(:spec => vm_cfg).wait_for_completion
Since you are trying to reconfigure an existing VirtualMachine, you could do something like this:
#Get the disk from the VM (assuming you only have one disk)
disk = vm.config.hardware.device.grep(RbVmomi::VIM::VirtualDisk).first
#Set new capacity
disk.capacityInKB = new_capacity_in_kb
#Add the disk to the devicechange, specifying operation edit
vm_cfg = {
:deviceChange => [
{
:device => disk,
:operation => :edit
}
]
}
#Start the ReconfigVM_Task with the disk edit on the VM
vm.ReconfigVM_Task(:spec => vm_cfg).wait_for_completion