-
Notifications
You must be signed in to change notification settings - Fork 1.2k
kvm: allow skip forcing disk controller #11750
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 4.19
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -100,7 +100,6 @@ | |
| import org.xml.sax.InputSource; | ||
| import org.xml.sax.SAXException; | ||
|
|
||
|
|
||
| import com.cloud.agent.api.Answer; | ||
| import com.cloud.agent.api.Command; | ||
| import com.cloud.agent.api.HostVmStateReportEntry; | ||
|
|
@@ -180,8 +179,8 @@ | |
| import com.cloud.network.Networks.RouterPrivateIpStrategy; | ||
| import com.cloud.network.Networks.TrafficType; | ||
| import com.cloud.resource.AgentStatusUpdater; | ||
| import com.cloud.resource.ResourceStatusUpdater; | ||
| import com.cloud.resource.RequestWrapper; | ||
| import com.cloud.resource.ResourceStatusUpdater; | ||
| import com.cloud.resource.ServerResource; | ||
| import com.cloud.resource.ServerResourceBase; | ||
| import com.cloud.storage.JavaStorageLayer; | ||
|
|
@@ -3010,6 +3009,44 @@ public static DiskDef.DiskType getDiskType(KVMPhysicalDisk physicalDisk) { | |
| return useBLOCKDiskType(physicalDisk) ? DiskDef.DiskType.BLOCK : DiskDef.DiskType.FILE; | ||
| } | ||
|
|
||
| /** | ||
| * Defines the disk configuration for the default pool type based on the provided parameters. | ||
| * It determines the appropriate disk settings depending on whether the disk is a data disk, whether | ||
| * it's a Windows template, whether UEFI is enabled, and whether secure boot is active. | ||
| * | ||
| * @param disk The disk definition object that will be configured with the disk settings. | ||
| * @param volume The volume (disk) object, containing information about the type of disk. | ||
| * @param isWindowsTemplate Flag indicating whether the template is a Windows template. | ||
| * @param isUefiEnabled Flag indicating whether UEFI is enabled. | ||
| * @param isSecureBoot Flag indicating whether secure boot is enabled. | ||
| * @param physicalDisk The physical disk object that contains the path to the disk. | ||
| * @param devId The device ID for the disk. | ||
| * @param diskBusType The disk bus type to use if not skipping force disk controller. | ||
| * @param diskBusTypeData The disk bus type to use for data disks, if applicable. | ||
| * @param details A map of VM details containing additional configuration values, such as whether to skip force | ||
| * disk controller. | ||
| */ | ||
| protected void defineDiskForDefaultPoolType(DiskDef disk, DiskTO volume, boolean isWindowsTemplate, | ||
| boolean isUefiEnabled, boolean isSecureBoot, KVMPhysicalDisk physicalDisk, int devId, | ||
| DiskDef.DiskBus diskBusType, DiskDef.DiskBus diskBusTypeData, Map<String, String> details) { | ||
| boolean skipForceDiskController = MapUtils.getBoolean(details, VmDetailConstants.KVM_SKIP_FORCE_DISK_CONTROLLER, | ||
| false); | ||
| if (skipForceDiskController) { | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @shwstppr |
||
| disk.defFileBasedDisk(physicalDisk.getPath(), devId, Volume.Type.DATADISK.equals(volume.getType()) ? | ||
| diskBusTypeData : diskBusType, DiskDef.DiskFmtType.QCOW2); | ||
| return; | ||
| } | ||
| if (volume.getType() == Volume.Type.DATADISK && !(isWindowsTemplate && isUefiEnabled)) { | ||
| disk.defFileBasedDisk(physicalDisk.getPath(), devId, diskBusTypeData, DiskDef.DiskFmtType.QCOW2); | ||
| } else { | ||
| if (isSecureBoot) { | ||
| disk.defFileBasedDisk(physicalDisk.getPath(), devId, DiskDef.DiskFmtType.QCOW2, isWindowsTemplate); | ||
| } else { | ||
| disk.defFileBasedDisk(physicalDisk.getPath(), devId, diskBusType, DiskDef.DiskFmtType.QCOW2); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| public void createVbd(final Connect conn, final VirtualMachineTO vmSpec, final String vmName, final LibvirtVMDef vm) throws InternalErrorException, LibvirtException, URISyntaxException { | ||
| final Map<String, String> details = vmSpec.getDetails(); | ||
| final List<DiskTO> disks = Arrays.asList(vmSpec.getDisks()); | ||
|
|
@@ -3161,18 +3198,9 @@ public int compare(final DiskTO arg0, final DiskTO arg1) { | |
| disk.setDiscard(DiscardType.UNMAP); | ||
| } | ||
| } else { | ||
| if (volume.getType() == Volume.Type.DATADISK && !(isWindowsTemplate && isUefiEnabled)) { | ||
| disk.defFileBasedDisk(physicalDisk.getPath(), devId, diskBusTypeData, DiskDef.DiskFmtType.QCOW2); | ||
| } else { | ||
| if (isSecureBoot) { | ||
| disk.defFileBasedDisk(physicalDisk.getPath(), devId, DiskDef.DiskFmtType.QCOW2, isWindowsTemplate); | ||
| } else { | ||
| disk.defFileBasedDisk(physicalDisk.getPath(), devId, diskBusType, DiskDef.DiskFmtType.QCOW2); | ||
| } | ||
| } | ||
|
|
||
| defineDiskForDefaultPoolType(disk, volume, isWindowsTemplate, isUefiEnabled, isSecureBoot, | ||
| physicalDisk, devId, diskBusType, diskBusTypeData, details); | ||
| } | ||
|
|
||
| } | ||
|
|
||
| if (data instanceof VolumeObjectTO) { | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@shwstppr should it be included for for KVM here:
cloudstack/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
Lines 5060 to 5061 in e90e436
also, check if any doc changes needed for this vm detail.