This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.19 by this push:
new 4f604c00b65 Support virtio-blk root disk controller (#10229)
4f604c00b65 is described below
commit 4f604c00b65fc9f6cde4f460b72e6b12ba9f8723
Author: Nicolas Vazquez <[email protected]>
AuthorDate: Mon Feb 10 11:03:07 2025 -0300
Support virtio-blk root disk controller (#10229)
---
.../hypervisor/kvm/resource/LibvirtComputingResource.java | 2 +-
.../java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java | 2 +-
.../com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java | 4 +++-
.../hypervisor/kvm/resource/LibvirtComputingResourceTest.java | 10 ++++++++++
server/src/main/java/com/cloud/api/query/QueryManagerImpl.java | 2 +-
5 files changed, 16 insertions(+), 4 deletions(-)
diff --git
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 71f33d9be57..973f053fee6 100644
---
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -3109,7 +3109,7 @@ public class LibvirtComputingResource extends
ServerResourceBase implements Serv
disk.setBusType(DiskDef.DiskBus.SCSI);
}
} else {
- if (diskBusType == DiskDef.DiskBus.SCSI ) {
+ if (diskBusType == DiskDef.DiskBus.SCSI || diskBusType ==
DiskDef.DiskBus.VIRTIOBLK) {
disk.setQemuDriver(true);
disk.setDiscard(DiscardType.UNMAP);
}
diff --git
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
index d220d133f37..1b007ed0696 100644
---
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
+++
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
@@ -639,7 +639,7 @@ public class LibvirtVMDef {
}
public enum DiskBus {
- IDE("ide"), SCSI("scsi"), VIRTIO("virtio"), XEN("xen"),
USB("usb"), UML("uml"), FDC("fdc"), SATA("sata");
+ IDE("ide"), SCSI("scsi"), VIRTIO("virtio"), XEN("xen"),
USB("usb"), UML("uml"), FDC("fdc"), SATA("sata"), VIRTIOBLK("virtio-blk");
String _bus;
DiskBus(String bus) {
diff --git
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
index d72ff47bb88..193a3287361 100644
---
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
+++
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
@@ -1423,12 +1423,14 @@ public class KVMStorageProcessor implements
StorageProcessor {
if (disk.getDeviceType() == DeviceType.DISK) {
if (disk.getBusType() == DiskDef.DiskBus.SCSI) {
busT = DiskDef.DiskBus.SCSI;
+ } else if (disk.getBusType() ==
DiskDef.DiskBus.VIRTIOBLK) {
+ busT = DiskDef.DiskBus.VIRTIOBLK;
}
break;
}
}
diskdef = new DiskDef();
- if (busT == DiskDef.DiskBus.SCSI) {
+ if (busT == DiskDef.DiskBus.SCSI || busT ==
DiskDef.DiskBus.VIRTIOBLK) {
diskdef.setQemuDriver(true);
diskdef.setDiscard(DiscardType.UNMAP);
}
diff --git
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
index 9b1da988c29..9ef96deb691 100644
---
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
+++
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
@@ -6411,4 +6411,14 @@ public class LibvirtComputingResourceTest {
assertEquals(DiskDef.DiscardType.UNMAP, rootDisk.getDiscard());
}
}
+
+ @Test
+ public void testGetDiskModelFromVMDetailVirtioBlk() {
+ VirtualMachineTO virtualMachineTO =
Mockito.mock(VirtualMachineTO.class);
+ Map<String, String> details = new HashMap<>();
+ details.put(VmDetailConstants.ROOT_DISK_CONTROLLER, "virtio-blk");
+ Mockito.when(virtualMachineTO.getDetails()).thenReturn(details);
+ DiskDef.DiskBus diskBus =
libvirtComputingResourceSpy.getDiskModelFromVMDetail(virtualMachineTO);
+ assertEquals(DiskDef.DiskBus.VIRTIOBLK, diskBus);
+ }
}
diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
index 3063b0d49a2..16cbd5ebe1b 100644
--- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
@@ -4978,7 +4978,7 @@ public class QueryManagerImpl extends
MutualExclusiveIdsManagerBase implements Q
if (HypervisorType.KVM.equals(hypervisorType)) {
options.put(VmDetailConstants.NIC_ADAPTER, Arrays.asList("e1000",
"virtio", "rtl8139", "vmxnet3", "ne2k_pci"));
- options.put(VmDetailConstants.ROOT_DISK_CONTROLLER,
Arrays.asList("osdefault", "ide", "scsi", "virtio"));
+ options.put(VmDetailConstants.ROOT_DISK_CONTROLLER,
Arrays.asList("osdefault", "ide", "scsi", "virtio", "virtio-blk"));
options.put(VmDetailConstants.VIDEO_HARDWARE,
Arrays.asList("cirrus", "vga", "qxl", "virtio"));
options.put(VmDetailConstants.VIDEO_RAM, Collections.emptyList());
options.put(VmDetailConstants.IO_POLICY, Arrays.asList("threads",
"native", "io_uring", "storage_specific"));