我的团队负责使用java动态更改vmware VM的设置。我的任务是更改分配给VCenter/VSphere上已创建的vmware虚拟机的可用RAM数量和CPU数量。
如何使用java更改vmware虚拟机的RAM容量或CPU数量?我一直在网上寻找线索,但没有找到太多。
发布于 2017-03-17 17:14:53
下面是使用vSphere java API使用指定值更改VM和CPU值的示例代码。
输入::
注:对于PowerON VM-在修改内存/ CPU之前,必须启用VM Memory热添加和CPU热插拔功能以及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;
}https://stackoverflow.com/questions/36550065
复制相似问题