首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Java更改vmware虚拟机的RAM/CPU?

如何使用Java更改vmware虚拟机的RAM/CPU?
EN

Stack Overflow用户
提问于 2016-04-11 21:25:15
回答 1查看 544关注 0票数 0

我的团队负责使用java动态更改vmware VM的设置。我的任务是更改分配给VCenter/VSphere上已创建的vmware虚拟机的可用RAM数量和CPU数量。

如何使用java更改vmware虚拟机的RAM容量或CPU数量?我一直在网上寻找线索,但没有找到太多。

EN

回答 1

Stack Overflow用户

发布于 2017-03-17 17:14:53

下面是使用vSphere java API使用指定值更改VM和CPU值的示例代码。

输入::

  1. CPU(CPU)-提供CPU计数的数量,它永远不会超过主机支持的CPU数量
    1. 内存(RamMB)-提供以MB为单位的RAM值,它永远不会超过主机分配的最大内存。

注:对于PowerON VM-在修改内存/ CPU之前,必须启用VM Memory热添加和CPU热插拔功能以及VM OS支持。

示例代码::

代码语言:javascript
复制
  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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36550065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档