Skip to content

Commit 9463f63

Browse files
[VMware] Update data disk controller same as the root disk controller type when it is not set in the VM detail
This is to ensure the disk controller is available for the data disks, as all the SCSI controllers are created with same controller type
1 parent eaab991 commit 9463f63

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4650,16 +4650,25 @@ private void updateVMDiskController(UserVmVO vm, Map<String, String> customParam
46504650
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, dataDiskControllerSetting);
46514651
}
46524652

4653-
String controllerSetting = StringUtils.defaultIfEmpty(_configDao.getValue(Config.VmwareRootDiskControllerType.key()),
4654-
Config.VmwareRootDiskControllerType.getDefaultValue());
4655-
46564653
// Don't override if VM already has root/data disk controller detail
46574654
if (vm.getDetail(VmDetailConstants.ROOT_DISK_CONTROLLER) == null) {
4658-
vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, controllerSetting);
4655+
String vmwareRootDiskControllerTypeFromSetting = StringUtils.defaultIfEmpty(_configDao.getValue(Config.VmwareRootDiskControllerType.key()),
4656+
Config.VmwareRootDiskControllerType.getDefaultValue());
4657+
vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, vmwareRootDiskControllerTypeFromSetting);
4658+
if (vm.getDetail(VmDetailConstants.DATA_DISK_CONTROLLER) == null) {
4659+
if (vmwareRootDiskControllerTypeFromSetting.equalsIgnoreCase("scsi")) {
4660+
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "scsi");
4661+
}
4662+
}
46594663
}
4664+
46604665
if (vm.getDetail(VmDetailConstants.DATA_DISK_CONTROLLER) == null) {
4661-
if (controllerSetting.equalsIgnoreCase("scsi")) {
4662-
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "scsi");
4666+
String finalRootDiskController = vm.getDetail(VmDetailConstants.ROOT_DISK_CONTROLLER);
4667+
// Set the data disk controller detail same as the final scsi root disk controller if VM doesn't have data disk controller detail
4668+
// This is to ensure the disk controller is available for the data disks, as all the SCSI controllers are created with same controller type
4669+
String scsiControllerPattern = "(?i)\\b(scsi|lsilogic|lsilogicsas|lsisas1068|buslogic|pvscsi)\\b";
4670+
if (finalRootDiskController.matches(scsiControllerPattern)) {
4671+
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, finalRootDiskController);
46634672
} else {
46644673
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "osdefault");
46654674
}

0 commit comments

Comments
 (0)