mirror of https://github.com/apache/cloudstack.git
CLOUDSTACK-4790: Skip reserved VMware scsi device number for SCSI disks
This commit is contained in:
parent
219c64eef3
commit
4533d2d88f
|
|
@ -2857,7 +2857,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
|
|||
String[] diskChain = syncDiskChain(dcMo, vmMo, vmSpec,
|
||||
vol, matchingExistingDisk,
|
||||
dataStoresDetails);
|
||||
|
||||
if(controllerKey == scsiControllerKey && VmwareHelper.isReservedScsiDeviceNumber(scsiUnitNumber))
|
||||
scsiUnitNumber++;
|
||||
device = VmwareHelper.prepareDiskDevice(vmMo, null, controllerKey,
|
||||
diskChain,
|
||||
volumeDsDetails.first(),
|
||||
|
|
|
|||
|
|
@ -908,8 +908,9 @@ public class VirtualMachineMO extends BaseMO {
|
|||
assert(vmdkDatastorePath != null);
|
||||
assert(morDs != null);
|
||||
|
||||
int ideControllerKey = getIDEDeviceControllerKey();
|
||||
if(controllerKey < 0) {
|
||||
controllerKey = getIDEDeviceControllerKey();
|
||||
controllerKey = ideControllerKey;
|
||||
}
|
||||
|
||||
VirtualDisk newDisk = new VirtualDisk();
|
||||
|
|
@ -952,6 +953,8 @@ public class VirtualMachineMO extends BaseMO {
|
|||
}
|
||||
|
||||
int deviceNumber = getNextDeviceNumber(controllerKey);
|
||||
if(controllerKey != ideControllerKey && VmwareHelper.isReservedScsiDeviceNumber(deviceNumber))
|
||||
deviceNumber++;
|
||||
|
||||
newDisk.setControllerKey(controllerKey);
|
||||
newDisk.setKey(-deviceNumber);
|
||||
|
|
@ -1714,9 +1717,13 @@ public class VirtualMachineMO extends BaseMO {
|
|||
|
||||
public int getNextScsiDiskDeviceNumber() throws Exception {
|
||||
int scsiControllerKey = getScsiDeviceControllerKey();
|
||||
return getNextDeviceNumber(scsiControllerKey);
|
||||
int deviceNumber = getNextDeviceNumber(scsiControllerKey);
|
||||
if(VmwareHelper.isReservedScsiDeviceNumber(deviceNumber))
|
||||
deviceNumber++;
|
||||
|
||||
return deviceNumber;
|
||||
}
|
||||
|
||||
|
||||
public int getScsiDeviceControllerKey() throws Exception {
|
||||
List<VirtualDevice> devices = (List<VirtualDevice>)_context.getVimClient().
|
||||
getDynamicProperty(_mor, "config.hardware.device");
|
||||
|
|
@ -1732,7 +1739,7 @@ public class VirtualMachineMO extends BaseMO {
|
|||
assert(false);
|
||||
throw new Exception("SCSI Controller Not Found");
|
||||
}
|
||||
|
||||
|
||||
public int getScsiDeviceControllerKeyNoException() throws Exception {
|
||||
List<VirtualDevice> devices = (List<VirtualDevice>)_context.getVimClient().
|
||||
getDynamicProperty(_mor, "config.hardware.device");
|
||||
|
|
|
|||
|
|
@ -72,6 +72,10 @@ import com.cloud.utils.exception.ExceptionUtil;
|
|||
|
||||
public class VmwareHelper {
|
||||
private static final Logger s_logger = Logger.getLogger(VmwareHelper.class);
|
||||
|
||||
public static boolean isReservedScsiDeviceNumber(int deviceNumber) {
|
||||
return deviceNumber == 7;
|
||||
}
|
||||
|
||||
public static VirtualDevice prepareNicDevice(VirtualMachineMO vmMo, ManagedObjectReference morNetwork, VirtualEthernetCardType deviceType,
|
||||
String portGroupName, String macAddress, int deviceNumber, int contextNumber, boolean conntected, boolean connectOnStart) throws Exception {
|
||||
|
|
@ -178,11 +182,15 @@ public class VmwareHelper {
|
|||
backingInfo.setFileName(vmdkDatastorePath);
|
||||
disk.setBacking(backingInfo);
|
||||
|
||||
int ideControllerKey = vmMo.getIDEDeviceControllerKey();
|
||||
if(controllerKey < 0)
|
||||
controllerKey = vmMo.getIDEDeviceControllerKey();
|
||||
if(deviceNumber < 0)
|
||||
controllerKey = ideControllerKey;
|
||||
if(deviceNumber < 0) {
|
||||
deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
|
||||
disk.setControllerKey(controllerKey);
|
||||
if(controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber))
|
||||
deviceNumber++;
|
||||
}
|
||||
disk.setControllerKey(controllerKey);
|
||||
|
||||
disk.setKey(-contextNumber);
|
||||
disk.setUnitNumber(deviceNumber);
|
||||
|
|
@ -246,12 +254,16 @@ public class VmwareHelper {
|
|||
throw new Exception("Unsupported disk backing: " + parentBacking.getClass().getCanonicalName());
|
||||
}
|
||||
|
||||
int ideControllerKey = vmMo.getIDEDeviceControllerKey();
|
||||
if(controllerKey < 0)
|
||||
controllerKey = vmMo.getIDEDeviceControllerKey();
|
||||
controllerKey = ideControllerKey;
|
||||
disk.setControllerKey(controllerKey);
|
||||
if(deviceNumber < 0)
|
||||
if(deviceNumber < 0) {
|
||||
deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
|
||||
|
||||
if(controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber))
|
||||
deviceNumber++;
|
||||
}
|
||||
|
||||
disk.setKey(-contextNumber);
|
||||
disk.setUnitNumber(deviceNumber);
|
||||
disk.setCapacityInKB(sizeInMb*1024);
|
||||
|
|
@ -282,11 +294,15 @@ public class VmwareHelper {
|
|||
backingInfo.setDiskMode(VirtualDiskMode.PERSISTENT.value());
|
||||
disk.setBacking(backingInfo);
|
||||
|
||||
int ideControllerKey = vmMo.getIDEDeviceControllerKey();
|
||||
if(controllerKey < 0)
|
||||
controllerKey = vmMo.getIDEDeviceControllerKey();
|
||||
if(deviceNumber < 0)
|
||||
controllerKey = ideControllerKey;
|
||||
if(deviceNumber < 0) {
|
||||
deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
|
||||
|
||||
if(controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber))
|
||||
deviceNumber++;
|
||||
}
|
||||
|
||||
disk.setControllerKey(controllerKey);
|
||||
disk.setKey(-contextNumber);
|
||||
disk.setUnitNumber(deviceNumber);
|
||||
|
|
@ -332,11 +348,15 @@ public class VmwareHelper {
|
|||
|
||||
disk.setBacking(backingInfo);
|
||||
|
||||
int ideControllerKey = vmMo.getIDEDeviceControllerKey();
|
||||
if(controllerKey < 0)
|
||||
controllerKey = vmMo.getIDEDeviceControllerKey();
|
||||
if(deviceNumber < 0)
|
||||
controllerKey = ideControllerKey;
|
||||
if(deviceNumber < 0) {
|
||||
deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
|
||||
|
||||
if(controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber))
|
||||
deviceNumber++;
|
||||
}
|
||||
|
||||
disk.setControllerKey(controllerKey);
|
||||
disk.setKey(-contextNumber);
|
||||
disk.setUnitNumber(deviceNumber);
|
||||
|
|
|
|||
Loading…
Reference in New Issue