Skip to content

Commit 11497c6

Browse files
[VMware] Update data disk controller same as the root disk controller type when it is not set in the VM detail (#9433)
1 parent 9148701 commit 11497c6

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4650,17 +4650,24 @@ 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);
46594658
}
4659+
46604660
if (vm.getDetail(VmDetailConstants.DATA_DISK_CONTROLLER) == null) {
4661-
if (controllerSetting.equalsIgnoreCase("scsi")) {
4662-
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "scsi");
4661+
String finalRootDiskController = vm.getDetail(VmDetailConstants.ROOT_DISK_CONTROLLER);
4662+
// Set the data disk controller detail same as the final scsi root disk controller if VM doesn't have data disk controller detail
4663+
// This is to ensure the disk controller is available for the data disks, as all the SCSI controllers are created with same controller type
4664+
String scsiControllerPattern = "(?i)\\b(scsi|lsilogic|lsilogicsas|lsisas1068|buslogic|pvscsi)\\b";
4665+
if (finalRootDiskController.matches(scsiControllerPattern)) {
4666+
s_logger.info(String.format("Data disk controller was not defined, but root disk is using SCSI controller [%s]." +
4667+
"To ensure disk controllers are available for the data disks, the data disk controller is updated to match the root disk controller.", finalRootDiskController));
4668+
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, finalRootDiskController);
46634669
} else {
4670+
s_logger.info("Data disk controller was not defined; defaulting to 'osdefault'.");
46644671
vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, "osdefault");
46654672
}
46664673
}

0 commit comments

Comments
 (0)