2016-04-11 6 views
0

私のチームは、javaを使用してVMWare VMの設定を動的に変更する責任があります。私は、VCenter/VSphere上に存在する、すでに作成されているVMWare VMに割り当てられているRAMの量とCPUの数を変更することを任されています。Javaを使用してVMWare VMのRAM/CPUを変更するにはどうすればよいですか?

Javaを使用してVMWare VMのRAMまたはCPUの数を変更するにはどうすればよいですか?私は手がかりを求めてネット全体を捜し求めてきました。

+2

あなたはできますが、よろしいですか?それは、Javaが特に優れていると思われるようなものではありません。 – Kayaman

+0

方法がある場合は、http://developercenter.vmware.com/sdks – Stefan

+1

@Stefan Indeedにあります。これはSDKの関連部分です:https://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.vm.ConfigInfo.html – Chris

答えて

0

ここでは、vSphere Java APIを使用してVM RAMとCPUを指定された値に変更するサンプルコードを示します。

入力::

  1. CPU(numCPUs) - MBでラム値を指定して、それがホストを超えることはありません - のCPU数のNUMを提供し、それはCPUの
  2. 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; 
} 
関連する問題