Merge remote-tracking branch 'origin/4.15'

This commit is contained in:
Rohit Yadav 2021-04-06 16:50:31 +05:30
commit 76e9c2772b
4 changed files with 39 additions and 5 deletions

View File

@ -647,7 +647,8 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
} }
// 4 MB is the minimum requirement for VM memory in VMware // 4 MB is the minimum requirement for VM memory in VMware
vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first()), null); String vmxFormattedVirtualHardwareVersion = VirtualMachineMO.getVmxFormattedVirtualHardwareVersion(vmMo.getVirtualHardwareVersion());
vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first()), vmxFormattedVirtualHardwareVersion);
clonedVm = vmMo.getRunningHost().findVmOnHyperHost(workerVmName); clonedVm = vmMo.getRunningHost().findVmOnHyperHost(workerVmName);
if (clonedVm == null) { if (clonedVm == null) {
String msg = "Unable to create dummy VM to export volume. volume path: " + volumePath; String msg = "Unable to create dummy VM to export volume. volume path: " + volumePath;
@ -965,7 +966,8 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
if (clonedWorkerVMNeeded) { if (clonedWorkerVMNeeded) {
// 4 MB is the minimum requirement for VM memory in VMware // 4 MB is the minimum requirement for VM memory in VMware
vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first()), null); String vmxFormattedVirtualHardwareVersion = VirtualMachineMO.getVmxFormattedVirtualHardwareVersion(vmMo.getVirtualHardwareVersion());
vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first()), vmxFormattedVirtualHardwareVersion);
clonedVm = vmMo.getRunningHost().findVmOnHyperHost(workerVmName); clonedVm = vmMo.getRunningHost().findVmOnHyperHost(workerVmName);
if (clonedVm == null) { if (clonedVm == null) {
String msg = "Unable to create dummy VM to export volume. volume path: " + volumePath; String msg = "Unable to create dummy VM to export volume. volume path: " + volumePath;

View File

@ -1679,7 +1679,7 @@ public class HypervisorHostHelper {
return controllerSpec; return controllerSpec;
} }
public static VirtualMachineMO createWorkerVM(VmwareHypervisorHost hyperHost, DatastoreMO dsMo, String vmName, String hardwareVersion) throws Exception { public static VirtualMachineMO createWorkerVM(VmwareHypervisorHost hyperHost, DatastoreMO dsMo, String vmName, String vmxFormattedHardwareVersion) throws Exception {
// Allow worker VM to float within cluster so that we will have better chance to // Allow worker VM to float within cluster so that we will have better chance to
// create it successfully // create it successfully
@ -1693,8 +1693,8 @@ public class HypervisorHostHelper {
VirtualMachineMO workingVM = null; VirtualMachineMO workingVM = null;
VirtualMachineConfigSpec vmConfig = new VirtualMachineConfigSpec(); VirtualMachineConfigSpec vmConfig = new VirtualMachineConfigSpec();
vmConfig.setName(vmName); vmConfig.setName(vmName);
if (hardwareVersion != null){ if (StringUtils.isNotBlank(vmxFormattedHardwareVersion)){
vmConfig.setVersion(("vmx-" + hardwareVersion)); vmConfig.setVersion(vmxFormattedHardwareVersion);
} else { } else {
ClusterMO clusterMo = new ClusterMO(hyperHost.getContext(), hyperHost.getHyperHostCluster()); ClusterMO clusterMo = new ClusterMO(hyperHost.getContext(), hyperHost.getHyperHostCluster());
DatacenterMO dataCenterMo = new DatacenterMO(hyperHost.getContext(), hyperHost.getHyperHostDatacenter()); DatacenterMO dataCenterMo = new DatacenterMO(hyperHost.getContext(), hyperHost.getHyperHostDatacenter());

View File

@ -34,6 +34,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@ -3292,6 +3293,18 @@ public class VirtualMachineMO extends BaseMO {
return vhOption.getHwVersion(); return vhOption.getHwVersion();
} }
/**
* Return a hardware version string in the format expected by Vmware
* Format: "vmx-DD" where DD represents the hardware version number
* @param virtualHardwareVersion numeric virtual hardware version
*/
public static String getVmxFormattedVirtualHardwareVersion(int virtualHardwareVersion) {
if (virtualHardwareVersion < 1) {
throw new CloudRuntimeException("Invalid hardware version: " + virtualHardwareVersion);
}
return String.format("vmx-%02d", virtualHardwareVersion);
}
public VirtualHardwareOption getVirtualHardwareOption() throws Exception { public VirtualHardwareOption getVirtualHardwareOption() throws Exception {
VirtualMachineConfigOption vmConfigOption = _context.getService().queryConfigOption(getEnvironmentBrowser(), null, null); VirtualMachineConfigOption vmConfigOption = _context.getService().queryConfigOption(getEnvironmentBrowser(), null, null);
return vmConfigOption.getHardwareOptions(); return vmConfigOption.getHardwareOptions();

View File

@ -19,6 +19,7 @@ package com.cloud.hypervisor.vmware.mo;
import com.cloud.hypervisor.vmware.util.VmwareClient; import com.cloud.hypervisor.vmware.util.VmwareClient;
import com.cloud.hypervisor.vmware.util.VmwareContext; import com.cloud.hypervisor.vmware.util.VmwareContext;
import com.cloud.utils.exception.CloudRuntimeException;
import com.vmware.vim25.ManagedObjectReference; import com.vmware.vim25.ManagedObjectReference;
import com.vmware.vim25.VirtualDevice; import com.vmware.vim25.VirtualDevice;
import com.vmware.vim25.VirtualLsiLogicController; import com.vmware.vim25.VirtualLsiLogicController;
@ -27,6 +28,7 @@ import com.vmware.vim25.VirtualSCSIController;
import com.vmware.vim25.VirtualSCSISharing; import com.vmware.vim25.VirtualSCSISharing;
import org.junit.After; import org.junit.After;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
@ -117,4 +119,21 @@ public class VirtualMachineMOTest {
} }
} }
@Test
public void testGetVmxFormattedVirtualHardwareVersionOneDigit() {
String vmxHwVersion = VirtualMachineMO.getVmxFormattedVirtualHardwareVersion(8);
Assert.assertEquals("vmx-08", vmxHwVersion);
}
@Test
public void testGetVmxFormattedVirtualHardwareVersionTwoDigits() {
String vmxHwVersion = VirtualMachineMO.getVmxFormattedVirtualHardwareVersion(11);
Assert.assertEquals("vmx-11", vmxHwVersion);
}
@Test(expected = CloudRuntimeException.class)
public void testGetVmxFormattedVirtualHardwareVersionInvalid() {
VirtualMachineMO.getVmxFormattedVirtualHardwareVersion(-1);
}
} }