Updated Branches: refs/heads/4.2 216e37499 -> 265c00dcf
CLOUDSTACK-3279 Need mechanism to detect if hotadd for cpu/memory is supported per a specific guest OS supported by VMware. Signed-off-by: Sateesh Chodapuneedi <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/265c00dc Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/265c00dc Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/265c00dc Branch: refs/heads/4.2 Commit: 265c00dcfc9d57a85e94f72ea769588df54abf35 Parents: 216e374 Author: Sateesh Chodapuneedi <[email protected]> Authored: Sat Jun 29 00:59:21 2013 +0530 Committer: Sateesh Chodapuneedi <[email protected]> Committed: Mon Jul 1 22:22:09 2013 +0530 ---------------------------------------------------------------------- .../hypervisor/vmware/resource/VmwareResource.java | 14 ++++++++++++-- .../hypervisor/vmware/mo/VirtualMachineMO.java | 17 +++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/265c00dc/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 52f4190..c3867f4 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -273,6 +273,7 @@ import com.vmware.vim25.ComputeResourceSummary; import com.vmware.vim25.DatastoreSummary; import com.vmware.vim25.DynamicProperty; import com.vmware.vim25.GuestInfo; +import com.vmware.vim25.GuestOsDescriptor; import com.vmware.vim25.HostCapability; import com.vmware.vim25.HostFirewallInfo; import com.vmware.vim25.HostFirewallRuleset; @@ -307,6 +308,7 @@ import com.vmware.vim25.VirtualDisk; import com.vmware.vim25.VirtualEthernetCard; import com.vmware.vim25.VirtualEthernetCardNetworkBackingInfo; import com.vmware.vim25.VirtualLsiLogicController; +import com.vmware.vim25.VirtualMachineConfigOption; import com.vmware.vim25.VirtualMachineConfigSpec; import com.vmware.vim25.VirtualMachineFileInfo; import com.vmware.vim25.VirtualMachineGuestOsIdentifier; @@ -2545,9 +2547,17 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VmwareHelper.setBasicVmConfig(vmConfigSpec, vmSpec.getCpus(), vmSpec.getMaxSpeed(), vmSpec.getMinSpeed(),(int) (vmSpec.getMaxRam()/(1024*1024)), ramMb, translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).value(), vmSpec.getLimitCpuUse()); + String guestOsId = translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).value(); + boolean guestSupportsCpuHotAdd = false; + boolean guestSupportsMemoryHotAdd = false; + GuestOsDescriptor vmGuestOsDescriptor = vmMo.getGuestOsDescriptor(guestOsId); + if (vmGuestOsDescriptor != null) { + guestSupportsCpuHotAdd = vmGuestOsDescriptor.isSupportsCpuHotAdd(); + guestSupportsMemoryHotAdd = vmGuestOsDescriptor.isSupportsMemoryHotAdd(); + } - vmConfigSpec.setMemoryHotAddEnabled(true); - vmConfigSpec.setCpuHotAddEnabled(true); + vmConfigSpec.setMemoryHotAddEnabled(guestSupportsMemoryHotAdd); + vmConfigSpec.setCpuHotAddEnabled(guestSupportsCpuHotAdd); if ("true".equals(vmSpec.getDetails().get(VmDetailConstants.NESTED_VIRTUALIZATION_FLAG))) { s_logger.debug("Nested Virtualization enabled in configuration, checking hypervisor capability"); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/265c00dc/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java ---------------------------------------------------------------------- diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java index cf5ffde..3e51047 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java @@ -45,6 +45,7 @@ import com.vmware.vim25.CustomFieldStringValue; import com.vmware.vim25.DistributedVirtualSwitchPortConnection; import com.vmware.vim25.DynamicProperty; import com.vmware.vim25.GuestInfo; +import com.vmware.vim25.GuestOsDescriptor; import com.vmware.vim25.HttpNfcLeaseDeviceUrl; import com.vmware.vim25.HttpNfcLeaseInfo; import com.vmware.vim25.HttpNfcLeaseState; @@ -84,6 +85,7 @@ import com.vmware.vim25.VirtualIDEController; import com.vmware.vim25.VirtualLsiLogicController; import com.vmware.vim25.VirtualMachineCloneSpec; import com.vmware.vim25.VirtualMachineConfigInfo; +import com.vmware.vim25.VirtualMachineConfigOption; import com.vmware.vim25.VirtualMachineConfigSpec; import com.vmware.vim25.VirtualMachineConfigSummary; import com.vmware.vim25.VirtualMachineFileInfo; @@ -1593,6 +1595,21 @@ public class VirtualMachineMO extends BaseMO { } } + public GuestOsDescriptor getGuestOsDescriptor(String guestOsId) throws Exception { + GuestOsDescriptor guestOsDescriptor = null; + ManagedObjectReference vmEnvironmentBrowser = + _context.getVimClient().getMoRefProp(_mor, "environmentBrowser"); + VirtualMachineConfigOption vmConfigOption = _context.getService().queryConfigOption(vmEnvironmentBrowser, null, null); + List<GuestOsDescriptor> guestDescriptors = vmConfigOption.getGuestOSDescriptor(); + for (GuestOsDescriptor descriptor : guestDescriptors) { + if (guestOsId != null && guestOsId.equalsIgnoreCase(descriptor.getId())) { + guestOsDescriptor = descriptor; + break; + } + } + return guestOsDescriptor; + } + public void plugDevice(VirtualDevice device) throws Exception { VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); //VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[1];
