mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
[VMware] Update SCSI controllers for VMs (#5910)
This commit is contained in:
parent
122b018057
commit
a3bb84b495
@ -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;
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user