我的任务是为各种管理任务开发一个“通用”Web界面,我目前正致力于虚拟机创建/克隆/配置。具体来说,我试图找出如何使用VI Java API(http://vijava.sourceforge.net/)修改现有机器的硬盘大小。
我可以看到如何删除磁盘(http://sourceforge.net/p/vijava/code/HEAD/tree/trunk/src/com/vmware/vim25/mo/samples/vm/RemoveVmDisk.java)和添加磁盘(http://sourceforge.net/p/vijava/code/HEAD/tree/trunk/src/com/vmware/vim25/mo/samples/vm/VmDiskOp.java)的exmaples,但是我无法看到如何修改现有磁盘
我想我需要在现有磁盘上获取MOR,然后以某种方式将其转换为VirtualDeviceConfigSpec,然后我将其推入VirtualMachineConfigSpec ......我是否在正确的轨道上?有人可以给我一个指针,告诉我去哪里吗?
答案 0 :(得分:1)
主要变化是
diskSpec.setOperation(VirtualDeviceConfigSpecOperation.edit);
但我不确定这是否会创建或替换
diskSpec.setFileOperation(VirtualDeviceConfigSpecFileOperation.replace)
答案 1 :(得分:1)
有了Reuben的首发助手,这就是我所说的:
VirtualMachine vm = (VirtualMachine) new \
InventoryNavigator(rootFolder).searchManagedEntity("VirtualMachine", guestName);
VirtualMachineConfigInfo vmci = vm.getConfig();
VirtualDevice [] devices = vmci.getHardware().getDevice();
VirtualDisk theDisk = null;
for ( int i=0; devices!=null && i<devices.length; i++) {
if ( devices[i].getDeviceInfo().getLabel().equals("Hard disk 1")) {
theDisk = (VirtualDisk)devices[i];
}
}
if ( theDisk == null ) {
return "False - disk not found";
}
theDisk.setCapacityInKB(Long.parseLong(diskSize)*1024*1024);
VirtualDeviceConfigSpec vdcs = new VirtualDeviceConfigSpec();
vdcs.setDevice(theDisk);
vdcs.setOperation(VirtualDeviceConfigSpecOperation.edit);
VirtualMachineConfigSpec vmcs = new VirtualMachineConfigSpec();
vmcs.setDeviceChange(new VirtualDeviceConfigSpec[]{vdcs});
Task task = vm.reconfigVM_Task(vmcs);