2016-04-11 3 views
0

Моя команда отвечает за динамически изменяющиеся настройки VMware VMware с помощью java. Мне было поручено изменить количество доступной ОЗУ и количества процессоров, назначенных уже созданной VMware VM, которая существует на VCenter/VSphere.Как изменить RAM/CPU vmware VM с помощью Java?

Как изменить объем ОЗУ или количество процессоров для VMware VMware с помощью java? Я искал всю сеть за подсказками, и я нашел много.

+2

Вы уверены, что вы можете? Это не похоже на то, что особенно выделяет Java. – Kayaman

+0

Если есть способ, его можно найти здесь: http://developercenter.vmware.com/sdks – Stefan

+1

@Stefan Действительно. Это важная часть SDK: https://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.vm.ConfigInfo.html – Chris

ответ

0

Вот пример кода для изменения VM RAM и CPU с указанными значениями с помощью API vSphere java.

вход ::

  1. процессора (numCPUs) - Обеспечить Num графа процессоров, оно никогда не превышает хост поддерживает Num процессоров
  2. ОЗУ (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; 
}