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 <sate...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f9803418 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f9803418 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f9803418 Branch: refs/heads/vmsync Commit: f980341808a0ca93f47ab9fa99ac5bb1eeb0b650 Parents: a12a13c Author: Sateesh Chodapuneedi <sate...@apache.org> Authored: Sat Jun 29 00:59:21 2013 +0530 Committer: Sateesh Chodapuneedi <sate...@apache.org> Committed: Mon Jul 1 17:27:32 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/f9803418/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 968e095..286eb48 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/f9803418/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];