QMP will always report the QEMU version and package-specific string in
the greeting message, as per the QEMU Machine Protocol Specification. We
store this information and make it available to users of the monitor.

Signed-off-by: Apollon Oikonomopoulos <[email protected]>
---
 lib/hypervisor/hv_kvm/monitor.py | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/lib/hypervisor/hv_kvm/monitor.py b/lib/hypervisor/hv_kvm/monitor.py
index 16bf7cc..8176a41 100644
--- a/lib/hypervisor/hv_kvm/monitor.py
+++ b/lib/hypervisor/hv_kvm/monitor.py
@@ -195,6 +195,9 @@ class QmpConnection(MonitorSocket):
   _ERROR_DESC_KEY = "desc"
   _EXECUTE_KEY = "execute"
   _ARGUMENTS_KEY = "arguments"
+  _VERSION_KEY = "version"
+  _PACKAGE_KEY = "package"
+  _QEMU_KEY = "qemu"
   _CAPABILITIES_COMMAND = "qmp_capabilities"
   _QUERY_COMMANDS = "query-commands"
   _MESSAGE_END_TOKEN = "\r\n"
@@ -229,6 +232,15 @@ class QmpConnection(MonitorSocket):
       raise errors.HypervisorError("kvm: QMP communication error (wrong"
                                    " server greeting")
 
+    # Extract the version info from the greeting and make it available to users
+    # of the monitor.
+    version_info = greeting[self._FIRST_MESSAGE_KEY][self._VERSION_KEY]
+
+    self.version = (version_info[self._QEMU_KEY]["major"],
+                    version_info[self._QEMU_KEY]["minor"],
+                    version_info[self._QEMU_KEY]["micro"])
+    self.package = version_info[self._PACKAGE_KEY].strip()
+
     # This is needed because QMP can return more than one greetings
     # see https://groups.google.com/d/msg/ganeti-devel/gZYcvHKDooU/SnukC8dgS5AJ
     self._buf = ""
-- 
1.9.1

Reply via email to