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
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);
if (clonedVm == null) {
String msg = "Unable to create dummy VM to export volume. volume path: " + volumePath;
@ -965,7 +966,8 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
if (clonedWorkerVMNeeded) {
// 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);
if (clonedVm == null) {
String msg = "Unable to create dummy VM to export volume. volume path: " + volumePath;

View File

@ -1679,7 +1679,7 @@ public class HypervisorHostHelper {
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
// create it successfully
@ -1693,8 +1693,8 @@ public class HypervisorHostHelper {
VirtualMachineMO workingVM = null;
VirtualMachineConfigSpec vmConfig = new VirtualMachineConfigSpec();
vmConfig.setName(vmName);
if (hardwareVersion != null){
vmConfig.setVersion(("vmx-" + hardwareVersion));
if (StringUtils.isNotBlank(vmxFormattedHardwareVersion)){
vmConfig.setVersion(vmxFormattedHardwareVersion);
} else {
ClusterMO clusterMo = new ClusterMO(hyperHost.getContext(), hyperHost.getHyperHostCluster());
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.Future;
import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
@ -3292,6 +3293,18 @@ public class VirtualMachineMO extends BaseMO {
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 {
VirtualMachineConfigOption vmConfigOption = _context.getService().queryConfigOption(getEnvironmentBrowser(), null, null);
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.VmwareContext;
import com.cloud.utils.exception.CloudRuntimeException;
import com.vmware.vim25.ManagedObjectReference;
import com.vmware.vim25.VirtualDevice;
import com.vmware.vim25.VirtualLsiLogicController;
@ -27,6 +28,7 @@ import com.vmware.vim25.VirtualSCSIController;
import com.vmware.vim25.VirtualSCSISharing;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
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);
}
}