ここでは、vSphere Java APIを使用してVM RAMとCPUを指定された値に変更するサンプルコードを示します。
入力::
- CPU(numCPUs) - MBでラム値を指定して、それがホストを超えることはありません - のCPU数のNUMを提供し、それはCPUの
- RAM(ramMB)のホストサポートnum個を超えることはありません最大allotedメモリ。
注:PowerON VMの場合、RAM/CPUを変更する前に、VM Memory Hot Addを有効にする必要があります。& 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;
}
あなたはできますが、よろしいですか?それは、Javaが特に優れていると思われるようなものではありません。 – Kayaman
方法がある場合は、http://developercenter.vmware.com/sdks – Stefan
@Stefan Indeedにあります。これはSDKの関連部分です:https://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.vm.ConfigInfo.html – Chris