使用VI Java API修改VM磁盘大小

时间:2014-07-22 15:04:18

标签: java api vmware

我的任务是为各种管理任务开发一个“通用”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 ......我是否在正确的轨道上?有人可以给我一个指针,告诉我去哪里吗?

2 个答案:

答案 0 :(得分:1)

主要变化是

diskSpec.setOperation(VirtualDeviceConfigSpecOperation.edit);

但我不确定这是否会创建或替换

diskSpec.setFileOperation(VirtualDeviceConfigSpecFileOperation.replace)

查看对象VirtualDeviceConfigSpecFileOperation

答案 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);