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 b30f2b6a6f0..11cf6328666 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
@@ -3137,7 +3137,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
}
-
+ pool.customizeLibvirtDiskDef(disk);
}
if (data instanceof VolumeObjectTO) {
@@ -3512,6 +3512,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
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 5e0c9044228..88f618351bb 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 class LibvirtVMDef {
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 class LibvirtVMDef {
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 class LibvirtVMDef {
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 class LibvirtVMDef {
}
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";