From ba012cff198bc54e308f64d03c0c1c60ae470bfd Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Wed, 20 Mar 2024 08:27:34 -0600 Subject: [PATCH 1/2] Allow kvm storage plugin to customize diskdef, add geometry --- .../resource/LibvirtComputingResource.java | 3 ++- .../hypervisor/kvm/resource/LibvirtVMDef.java | 23 +++++++++++++++++++ .../kvm/storage/KVMStoragePool.java | 3 +++ .../kvm/storage/KVMStorageProcessor.java | 1 + .../kvm/resource/LibvirtVMDefTest.java | 14 +++++++++++ 5 files changed, 43 insertions(+), 1 deletion(-) 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 7ba75d654662..595d3a306a64 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 @@ -3121,7 +3121,7 @@ public int compare(final DiskTO arg0, final DiskTO arg1) { } } - + pool.customizeLibvirtDiskDef(disk); } if (data instanceof VolumeObjectTO) { @@ -3496,6 +3496,7 @@ public synchronized String attachOrDetachDisk(final Connect conn, diskdef.setPhysicalBlockIOSize(attachingPool.getSupportedPhysicalBlockSize()); diskdef.setLogicalBlockIOSize(attachingPool.getSupportedLogicalBlockSize()); + attachingPool.customizeLibvirtDiskDef(diskdef); } final String xml = diskdef.toString(); 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 5e0c90442282..1a8a7a2f3fdc 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 @@ -596,6 +596,22 @@ public LibvirtDiskEncryptDetails(String passphraseUuid, QemuObject.EncryptFormat public QemuObject.EncryptFormat getEncryptFormat() { return this.encryptFormat; } } + public static class DiskGeometry { + int cylinders; + int heads; + int sectors; + + public DiskGeometry(int cylinders, int heads, int sectors) { + this.cylinders = cylinders; + this.heads = heads; + this.sectors = sectors; + } + + public String toXml() { + return String.format("\n", this.cylinders, this.heads, this.sectors); + } + } + public enum DeviceType { FLOPPY("floppy"), DISK("disk"), CDROM("cdrom"), LUN("lun"); String _type; @@ -747,6 +763,7 @@ public String toString() { private boolean isIothreadsEnabled; private BlockIOSize logicalBlockIOSize = null; private BlockIOSize physicalBlockIOSize = null; + private DiskGeometry geometry = null; public DiscardType getDiscard() { return _discard; @@ -1091,6 +1108,8 @@ public void setSerial(String serial) { public LibvirtDiskEncryptDetails getLibvirtDiskEncryptDetails() { return this.encryptDetails; } + public void setGeometry(DiskGeometry geometry) { this.geometry = geometry; } + public String getSourceHost() { return _sourceHost; } @@ -1174,6 +1193,10 @@ public String toString() { } diskBuilder.append("/>\n"); + if (geometry != null) { + diskBuilder.append(geometry.toXml()); + } + if (logicalBlockIOSize != null || physicalBlockIOSize != null) { diskBuilder.append("\n" + + "\n" + + "\n" + + "\n" + + "\n"; + assertEquals(expectedXML, disk.toString()); + } + @Test public void testDiskDefWithMultipleHosts() { String path = "/mnt/primary1"; From 3589e4a0f57e99149e6fd9fecc50fd653a8aa547 Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Thu, 4 Apr 2024 19:58:25 +0530 Subject: [PATCH 2/2] formatting update --- .../hypervisor/kvm/resource/LibvirtVMDef.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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 1a8a7a2f3fdc..88f618351bb6 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 @@ -1104,11 +1104,20 @@ public void setSerial(String serial) { this._serial = serial; } - public void setLibvirtDiskEncryptDetails(LibvirtDiskEncryptDetails details) { this.encryptDetails = details; } + public void setLibvirtDiskEncryptDetails(LibvirtDiskEncryptDetails details) + { + this.encryptDetails = details; + } - public LibvirtDiskEncryptDetails getLibvirtDiskEncryptDetails() { return this.encryptDetails; } + public LibvirtDiskEncryptDetails getLibvirtDiskEncryptDetails() + { + return this.encryptDetails; + } - public void setGeometry(DiskGeometry geometry) { this.geometry = geometry; } + public void setGeometry(DiskGeometry geometry) + { + this.geometry = geometry; + } public String getSourceHost() { return _sourceHost;