diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py index 1e51c354793bc95c30597159630bcc7f67766221..59994cd29cbbe777d78986a99082e7cdedf3d50f 100644 --- a/lib/hypervisor/hv_kvm.py +++ b/lib/hypervisor/hv_kvm.py @@ -202,6 +202,8 @@ class QmpConnection: _FIRST_MESSAGE_KEY = "QMP" _EVENT_KEY = "event" _ERROR_KEY = "error" + _RETURN_KEY = RETURN_KEY = "return" + _ACTUAL_KEY = ACTUAL_KEY = "actual" _ERROR_CLASS_KEY = "class" _ERROR_DATA_KEY = "data" _ERROR_DESC_KEY = "desc" @@ -916,6 +918,17 @@ class KVMHypervisor(hv_base.BaseHypervisor): istat = "---b-" times = "0" + try: + qmp = QmpConnection(self._InstanceQmpMonitor(instance_name)) + qmp.connect() + vcpus = len(qmp.Execute("query-cpus")[qmp.RETURN_KEY]) + # Will fail if ballooning is not enabled, but we can then just resort to + # the value above. + mem_bytes = qmp.Execute("query-balloon")[qmp.RETURN_KEY][qmp.ACTUAL_KEY] + memory = mem_bytes / 1048576 + except errors.HypervisorError: + pass + return (instance_name, pid, memory, vcpus, istat, times) def GetAllInstancesInfo(self):