Вот пример кода для изменения VM RAM и CPU с указанными значениями с помощью API vSphere java.
вход ::
- процессора (numCPUs) - Обеспечить Num графа процессоров, оно никогда не превышает хост поддерживает Num процессоров
- ОЗУ (ramMB) - обеспечить значение ОЗУ в МБ, оно никогда не превышает хост максимальная память.
Примечание: Для PowerON VM - Перед изменением ОЗУ/ЦП обязательно включить функцию VM Memory Hot Add &, а также поддержку VM OS.
Пример кода ::
public static void changeVMRAMandCPU(ServiceInstance si, String vmName,
long ramMB, int numCPUs) {
String waitStr = null;
try {
Folder rootFolder = si.getRootFolder();
VirtualMachine vm = (VirtualMachine) new InventoryNavigator(
rootFolder).searchManagedEntity("VirtualMachine", vmName);
HostSystem hs = new HostSystem(si.getServerConnection(), vm
.getRuntime().getHost());
System.out.println("Host Name ::" + hs.getName());
VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec();
if (isValidCPUCount(numCPUs, hs)) {
vmConfigSpec.setNumCPUs(numCPUs);
} else {
System.out.println("NotAllowed::Provided cpu count " + numCPUs
+ " is more then the host --> " + hs.getName()
+ " cpu count "
+ hs.getHardware().getCpuInfo().getNumCpuCores());
}
if (isValidRam(ramMB, hs)) {
vmConfigSpec.setMemoryMB(ramMB);
} else {
System.out.println("NotAllowed::Provided ram " + ramMB
+ " is more then the host --> " + hs.getName()
+ " ram " + hs.getHardware().getMemorySize());
}
System.out.println("Before modify VM RAM , CPU ==>"
+ vm.getConfig().getHardware().getMemoryMB() + " MB ,"
+ vm.getConfig().getHardware().getNumCPU() + " CPU,");
Task task = vm.reconfigVM_Task(vmConfigSpec);
waitStr = task.waitForTask();
if (waitStr != null && waitStr.equalsIgnoreCase("success")) {
vm = (VirtualMachine) new InventoryNavigator(rootFolder)
.searchManagedEntity("VirtualMachine", vmName);
System.out.println("After modify VM RAM , CPU ==>"
+ vm.getConfig().getHardware().getMemoryMB() + " MB ,"
+ vm.getConfig().getHardware().getNumCPU() + " CPU,");
} else {
System.out.println("Error::VM Reconfig fail...");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static boolean isValidCPUCount(int cpu, HostSystem hs) {
int hostCpusCount = hs.getHardware().getCpuInfo().getNumCpuCores();
if (cpu <= hostCpusCount) {
return true;
}
return false;
}
public static boolean isValidRam(long ram, HostSystem hs) {
long hostMem = hs.getHardware().getMemorySize()/(1024L * 1024L);
if (ram < hostMem) {
return true;
}
return false;
}
Вы уверены, что вы можете? Это не похоже на то, что особенно выделяет Java. – Kayaman
Если есть способ, его можно найти здесь: http://developercenter.vmware.com/sdks – Stefan
@Stefan Действительно. Это важная часть SDK: https://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.vm.ConfigInfo.html – Chris