[VMware] Update SCSI controllers for VMs (#5910)

This commit is contained in:
Nicolas Vazquez 2022-02-10 10:36:34 -03:00 committed by GitHub
parent 122b018057
commit a3bb84b495
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 0 deletions

View File

@ -1813,6 +1813,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
int requiredNumScsiControllers = VmwareHelper.MAX_SCSI_CONTROLLER_COUNT - scsiControllerInfo.first();
int availableBusNum = scsiControllerInfo.second() + 1; // method returned current max. bus number
if (DiskControllerType.getType(scsiDiskController) != scsiControllerInfo.third()) {
s_logger.debug(String.format("Change controller type from: %s to: %s", scsiControllerInfo.third().toString(),
scsiDiskController));
vmMo.tearDownDevices(new Class<?>[]{VirtualSCSIController.class});
vmMo.addScsiDeviceControllers(DiskControllerType.getType(scsiDiskController));
return;
}
if (requiredNumScsiControllers == 0) {
return;
}

View File

@ -2293,6 +2293,41 @@ public class VirtualMachineMO extends BaseMO {
throw new Exception("VMware Paravirtual SCSI Controller Not Found");
}
protected VirtualSCSIController getScsiController(DiskControllerType type) {
switch (type) {
case pvscsi:
return new ParaVirtualSCSIController();
case lsisas1068:
return new VirtualLsiLogicSASController();
case buslogic:
return new VirtualBusLogicController();
default:
return new VirtualLsiLogicController();
}
}
public void addScsiDeviceControllers(DiskControllerType type) throws Exception {
VirtualMachineConfigSpec vmConfig = new VirtualMachineConfigSpec();
int busNum = 0;
while (busNum < VmwareHelper.MAX_SCSI_CONTROLLER_COUNT) {
VirtualSCSIController scsiController = getScsiController(type);
scsiController.setSharedBus(VirtualSCSISharing.NO_SHARING);
scsiController.setBusNumber(busNum);
scsiController.setKey(busNum - VmwareHelper.MAX_SCSI_CONTROLLER_COUNT);
VirtualDeviceConfigSpec scsiControllerSpec = new VirtualDeviceConfigSpec();
scsiControllerSpec.setDevice(scsiController);
scsiControllerSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD);
vmConfig.getDeviceChange().add(scsiControllerSpec);
busNum++;
}
if (configureVm(vmConfig)) {
s_logger.info("Successfully added SCSI controllers.");
} else {
throw new Exception("Unable to add Scsi controllers to the VM " + getName());
}
}
public void ensurePvScsiDeviceController(int requiredNumScsiControllers, int availableBusNum) throws Exception {
VirtualMachineConfigSpec vmConfig = new VirtualMachineConfigSpec();