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..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 @@ -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; @@ -1087,9 +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 String getSourceHost() { return _sourceHost; @@ -1174,6 +1202,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";