
From: Paulo Vital <pvital@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@linux.vnet.ibm.com> --- i18n.py | 1 + model/config.py | 29 +++++++++++++++++++++-------- model/libvirtconnection.py | 7 +++++++ model/templates.py | 5 ++++- utils.py | 16 +++++++++++++++- 5 files changed, 48 insertions(+), 10 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..58a82df 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): - 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} + 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} + else: + 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, + 'libvirtd_running': True} class DistrosModel(object): diff --git a/model/libvirtconnection.py b/model/libvirtconnection.py index 113378e..89d5475 100644 --- a/model/libvirtconnection.py +++ b/model/libvirtconnection.py @@ -25,6 +25,8 @@ import time from wok.objectstore 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..1f2a575 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 == '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