[Kimchi-devel] [PATCH] [Kimchi 3/3] Add support to check if libvirtd is running.
pvital at linux.vnet.ibm.com
pvital at linux.vnet.ibm.com
Thu May 12 21:32:27 UTC 2016
From: Paulo Vital <pvital at linux.vnet.ibm.com>
Created method check if libvirtd is running to notify user in UI about the not
availability of the server and update CapabilitiesModel to provide the same
information to UI/user.
This patch is part of the solution for Issue #201
Signed-off-by: Paulo Vital <pvital at linux.vnet.ibm.com>
---
i18n.py | 1 +
model/config.py | 17 +++++++++++++++--
model/libvirtconnection.py | 7 +++++++
model/templates.py | 5 ++++-
utils.py | 16 +++++++++++++++-
5 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/i18n.py b/i18n.py
index 157f820..2301e60 100644
--- a/i18n.py
+++ b/i18n.py
@@ -332,5 +332,6 @@ messages = {
"KCHLVMS0001E": _("Invalid volume group name parameter: %(name)s."),
"KCHCONN0001E": _("Unable to establish connection with libvirt. Please check your libvirt URI which is often defined in /etc/libvirt/libvirt.conf"),
+ "KCHCONN0002E": _("Libvirt service is not active. Please start the libvirt service in your host system."),
}
diff --git a/model/config.py b/model/config.py
index 39e4efa..7889896 100644
--- a/model/config.py
+++ b/model/config.py
@@ -31,7 +31,7 @@ from wok.plugins.kimchi.model.featuretests import FeatureTests
from wok.plugins.kimchi.model.featuretests import FEATURETEST_POOL_NAME
from wok.plugins.kimchi.model.featuretests import FEATURETEST_VM_NAME
from wok.plugins.kimchi.screenshot import VMScreenshot
-from wok.plugins.kimchi.utils import check_url_path
+from wok.plugins.kimchi.utils import check_url_path, is_libvirtd_up
class ConfigModel(object):
@@ -55,6 +55,7 @@ class CapabilitiesModel(object):
self.kernel_vfio = False
self.nm_running = False
self.mem_hotplug_support = False
+ self.libvirtd_running = False
# run feature tests
self._set_capabilities()
@@ -106,6 +107,7 @@ class CapabilitiesModel(object):
self.kernel_vfio = FeatureTests.kernel_support_vfio()
self.nm_running = FeatureTests.is_nm_running()
self.mem_hotplug_support = FeatureTests.has_mem_hotplug_support(conn)
+ self.libvirtd_running = is_libvirtd_up()
wok_log.info("*** Feature tests completed ***")
_set_capabilities.priority = 90
@@ -122,13 +124,24 @@ class CapabilitiesModel(object):
return False
def lookup(self, *ident):
+ if not is_libvirtd_up():
+ return {'libvirt_stream_protocols': [],
+ 'qemu_spice': False,
+ 'qemu_stream': False,
+ 'screenshot': None,
+ 'kernel_vfio': self.kernel_vfio,
+ 'nm_running': FeatureTests.is_nm_running(),
+ 'mem_hotplug_support': False,
+ 'libvirtd_running': False}
+
return {'libvirt_stream_protocols': self.libvirt_stream_protocols,
'qemu_spice': self._qemu_support_spice(),
'qemu_stream': self.qemu_stream,
'screenshot': VMScreenshot.get_stream_test_result(),
'kernel_vfio': self.kernel_vfio,
'nm_running': FeatureTests.is_nm_running(),
- 'mem_hotplug_support': self.mem_hotplug_support}
+ 'mem_hotplug_support': self.mem_hotplug_support,
+ 'libvirtd_running': True}
class DistrosModel(object):
diff --git a/model/libvirtconnection.py b/model/libvirtconnection.py
index 25e8d03..db9aa67 100644
--- a/model/libvirtconnection.py
+++ b/model/libvirtconnection.py
@@ -25,6 +25,8 @@ import time
from wok.model.notifications import add_notification
from wok.utils import wok_log
+from wok.plugins.kimchi.utils import is_libvirtd_up
+
class LibvirtConnection(object):
_connections = {}
@@ -85,6 +87,11 @@ class LibvirtConnection(object):
wrapper.__doc__ = f.__doc__
return wrapper
+ if not is_libvirtd_up():
+ wok_log.error('Libvirt service is not active.')
+ add_notification('KCHCONN0002E', plugin_name='/plugins/kimchi')
+ return None
+
with LibvirtConnection._connectionLock:
conn = self._connections.get(conn_id)
if not conn:
diff --git a/model/templates.py b/model/templates.py
index 5cdac00..25bc017 100644
--- a/model/templates.py
+++ b/model/templates.py
@@ -34,7 +34,7 @@ from wok.xmlutils.utils import xpath_get_text
from wok.plugins.kimchi.config import get_kimchi_version
from wok.plugins.kimchi.kvmusertests import UserTests
from wok.plugins.kimchi.model.cpuinfo import CPUInfoModel
-from wok.plugins.kimchi.utils import pool_name_from_uri
+from wok.plugins.kimchi.utils import is_libvirtd_up, pool_name_from_uri
from wok.plugins.kimchi.vmtemplate import VMTemplate
ISO_TYPE = "ISO 9660 CD-ROM"
@@ -148,6 +148,9 @@ class TemplatesModel(object):
return name
def get_list(self):
+ if not is_libvirtd_up():
+ return []
+
with self.objstore as session:
return session.get_list('template')
diff --git a/utils.py b/utils.py
index c4cd07d..1874506 100644
--- a/utils.py
+++ b/utils.py
@@ -20,6 +20,7 @@
import contextlib
import json
+import platform
import re
import sqlite3
import time
@@ -30,7 +31,7 @@ from urlparse import urlparse
from wok.exception import InvalidParameter, OperationFailed
from wok.plugins.kimchi import config
from wok.plugins.kimchi.osinfo import get_template_default
-from wok.utils import wok_log
+from wok.utils import run_command, wok_log
from wok.xmlutils.utils import xpath_get_text
MAX_REDIRECTION_ALLOWED = 5
@@ -257,3 +258,16 @@ def get_next_clone_name(all_names, basename, name_suffix='', ts=False):
new_name = new_name + name_suffix
return new_name
+
+def is_libvirtd_up():
+ """
+ Checks if libvirtd.service is up.
+ """
+ distro, _, _ = platform.linux_distribution()
+ if distro.lower() == 'ubuntu':
+ cmd = ['systemctl', 'is-active', 'libvirt-bin.service']
+ else:
+ cmd = ['systemctl', 'is-active', 'libvirtd.service']
+
+ output, error, rc = run_command(cmd, silent=True)
+ return True if output == 'active\n' else False
--
2.5.5
More information about the Kimchi-devel
mailing list