diff --git a/api/src/com/cloud/offering/DiskOffering.java b/api/src/com/cloud/offering/DiskOffering.java
index 4f87dc5bd16..f4cd7b7c0b4 100644
--- a/api/src/com/cloud/offering/DiskOffering.java
+++ b/api/src/com/cloud/offering/DiskOffering.java
@@ -52,7 +52,7 @@ public interface DiskOffering extends InfrastructureEntity, Identity, InternalId
boolean isCustomized();
void setDiskSize(long diskSize);
-
+
void setBytesReadRate(long bytesReadRate);
long getBytesReadRate();
diff --git a/api/src/com/cloud/vm/DiskProfile.java b/api/src/com/cloud/vm/DiskProfile.java
index 90fb71eee55..4e3de7bce89 100644
--- a/api/src/com/cloud/vm/DiskProfile.java
+++ b/api/src/com/cloud/vm/DiskProfile.java
@@ -158,7 +158,7 @@ public class DiskProfile {
public void setSize(long size) {
this.size = size;
}
-
+
public void setBytesReadRate(long bytesReadRate) {
this.bytesReadRate = bytesReadRate;
}
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 02e0a887b40..6a0032f2adf 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -336,6 +336,8 @@ ServerResource {
protected HypervisorType _hypervisorType;
protected String _hypervisorURI;
+ protected long _hypervisorLibvirtVersion;
+ protected long _hypervisorQemuVersion;
protected String _hypervisorPath;
protected String _networkDirectSourceMode;
protected String _networkDirectDevice;
@@ -735,6 +737,8 @@ ServerResource {
try {
_hvVersion = conn.getVersion();
_hvVersion = (_hvVersion % 1000000) / 1000;
+ _hypervisorLibvirtVersion = conn.getLibVirVersion();
+ _hypervisorQemuVersion = conn.getVersion();
} catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
}
@@ -3228,6 +3232,8 @@ ServerResource {
} else {
guest.setGuestType(GuestDef.guestType.KVM);
vm.setHvsType(HypervisorType.KVM.toString().toLowerCase());
+ vm.setLibvirtVersion(_hypervisorLibvirtVersion);
+ vm.setQemuVersion(_hypervisorQemuVersion);
}
guest.setGuestArch(vmTO.getArch());
guest.setMachineType("pc");
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
index aee14097e66..afa183fc5de 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
@@ -26,6 +26,8 @@ import com.cloud.utils.script.Script;
public class LibvirtVMDef {
private String _hvsType;
+ private static long _libvirtVersion;
+ private static long _qemuVersion;
private String _domName;
private String _domUUID;
private String _desc;
@@ -650,30 +652,19 @@ public class LibvirtVMDef {
}
diskBuilder.append("/>\n");
- String libvirtVersion = Script.runSimpleBashScript("virsh version |grep API | awk '{print $4}'");
- String qemuVersion = Script.runSimpleBashScript("virsh version |grep hypervisor | awk '{print $4}'");
- if ((_deviceType != deviceType.CDROM) && (libvirtVersion != null) && (qemuVersion != null)
+ if ((_deviceType != deviceType.CDROM) && (_libvirtVersion >= 9008) && (_qemuVersion >= 1001000)
&& (((_bytesReadRate != null) && (_bytesReadRate > 0)) || ((_bytesWriteRate != null) && (_bytesWriteRate > 0))
|| ((_iopsReadRate != null) && (_iopsReadRate > 0)) || ((_iopsWriteRate != null) && (_iopsWriteRate > 0)) )) { // not CDROM, from libvirt 0.9.8 and QEMU 1.1.0
- String[] libvirtVersions = libvirtVersion.split("\\.");
- String[] qemuVersions = qemuVersion.split("\\.");
- if (((libvirtVersions != null) && (libvirtVersions.length == 3) && ((Integer.valueOf(libvirtVersions[0]) > 0)
- || ((Integer.valueOf(libvirtVersions[0]) == 0) && (Integer.valueOf(libvirtVersions[1]) > 9))
- || ((Integer.valueOf(libvirtVersions[0]) == 0) && (Integer.valueOf(libvirtVersions[1]) == 9) && (Integer.valueOf(libvirtVersions[1]) >= 8))))
- && ((qemuVersions != null) && (qemuVersions.length == 3) && ((Integer.valueOf(qemuVersions[0]) > 1)
- || ((Integer.valueOf(qemuVersions[0]) == 1) && (Integer.valueOf(qemuVersions[1]) > 1))
- || ((Integer.valueOf(qemuVersions[0]) == 1) && (Integer.valueOf(qemuVersions[1]) == 1) && (Integer.valueOf(qemuVersions[1]) >= 0))))) {
- diskBuilder.append("\n");
- if ((_bytesReadRate != null) && (_bytesReadRate > 0))
- diskBuilder.append("" + _bytesReadRate + "\n");
- if ((_bytesWriteRate != null) && (_bytesWriteRate > 0))
- diskBuilder.append("" + _bytesWriteRate + "\n");
- if ((_iopsReadRate != null) && (_iopsReadRate > 0))
- diskBuilder.append("" + _iopsReadRate + "\n");
- if ((_iopsWriteRate != null) && (_iopsWriteRate > 0))
- diskBuilder.append("" + _iopsWriteRate + "\n");
- diskBuilder.append("\n");
- }
+ diskBuilder.append("\n");
+ if ((_bytesReadRate != null) && (_bytesReadRate > 0))
+ diskBuilder.append("" + _bytesReadRate + "\n");
+ if ((_bytesWriteRate != null) && (_bytesWriteRate > 0))
+ diskBuilder.append("" + _bytesWriteRate + "\n");
+ if ((_iopsReadRate != null) && (_iopsReadRate > 0))
+ diskBuilder.append("" + _iopsReadRate + "\n");
+ if ((_iopsWriteRate != null) && (_iopsWriteRate > 0))
+ diskBuilder.append("" + _iopsWriteRate + "\n");
+ diskBuilder.append("\n");
}
diskBuilder.append("\n");
@@ -1061,6 +1052,14 @@ public class LibvirtVMDef {
return _hvsType;
}
+ public void setLibvirtVersion(long libvirtVersion) {
+ _libvirtVersion = libvirtVersion;
+ }
+
+ public void setQemuVersion(long qemuVersion) {
+ _qemuVersion = qemuVersion;
+ }
+
public void setDomainName(String domainName) {
_domName = domainName;
}