[Kimchi-devel] [PATCH][Kimchi] Load Kimchi when started by command line and libvirt is not running
Ramon Medeiros
ramonn at linux.vnet.ibm.com
Mon May 30 12:55:42 UTC 2016
Reviewed-By: Ramon Medeiros <ramonn at br.ibm.com>
On 05/29/2016 08:12 PM, Rodrigo Trujillo wrote:
> Kimchi is able to detect and continue running if libvirt stops and back.
> However if libvirt is not up and host admin tries to start Wok, Kimchi
> is going to crash in feature tests and when loads models.
> This patch fixes this issues, then Wok does not break and is able to
> load and start Kimchi. When libivirt service is back, Kimchi is able to
> run feature tests and set the capabilities again, restoring all
> features.
>
> Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
> ---
> model/config.py | 17 ++++++++++++++---
> model/networks.py | 5 +++--
> model/storagepools.py | 5 +++--
> model/storagevolumes.py | 7 ++++++-
> 4 files changed, 26 insertions(+), 8 deletions(-)
>
> diff --git a/model/config.py b/model/config.py
> index 36fce74..fc4b285 100644
> --- a/model/config.py
> +++ b/model/config.py
> @@ -89,6 +89,10 @@ class CapabilitiesModel(object):
> def _set_depend_capabilities(self):
> wok_log.info("\n*** Kimchi: Running dependable feature tests ***")
> conn = self.conn.get()
> + if conn is None:
> + wok_log.info("*** Kimchi: Dependable feature tests not completed "
> + "***\n")
> + return
> self.qemu_stream = FeatureTests.qemu_supports_iso_stream()
> msg = "QEMU stream support .......: %s"
> wok_log.info(msg % str(self.qemu_stream))
> @@ -104,6 +108,12 @@ class CapabilitiesModel(object):
>
> def _set_capabilities(self):
> wok_log.info("\n*** Kimchi: Running feature tests ***")
> + self.libvirtd_running = is_libvirtd_up()
> + msg = "Service Libvirtd running ...: %s"
> + wok_log.info(msg % str(self.libvirtd_running))
> + if self.libvirtd_running == False:
> + wok_log.info("*** Kimchi: Feature tests not completed ***\n")
> + return
> conn = self.conn.get()
> self.nfs_target_probe = FeatureTests.libvirt_support_nfs_probe(conn)
> msg = "NFS Target Probe support ...: %s"
> @@ -120,9 +130,6 @@ class CapabilitiesModel(object):
> self.mem_hotplug_support = FeatureTests.has_mem_hotplug_support(conn)
> msg = "Memory Hotplug support .....: %s"
> wok_log.info(msg % str(self.mem_hotplug_support))
> - self.libvirtd_running = is_libvirtd_up()
> - msg = "Service Libvirtd running ...: %s"
> - wok_log.info(msg % str(self.libvirtd_running))
> wok_log.info("*** Kimchi: Feature tests completed ***\n")
> _set_capabilities.priority = 90
>
> @@ -148,6 +155,10 @@ class CapabilitiesModel(object):
> 'nm_running': FeatureTests.is_nm_running(),
> 'mem_hotplug_support': False,
> 'libvirtd_running': False}
> + elif self.libvirtd_running == False:
> + # Libvirt returned, run tests again
> + self._set_capabilities()
> + self._set_depend_capabilities()
>
> return {'libvirt_stream_protocols': self.libvirt_stream_protocols,
> 'qemu_spice': self._qemu_support_spice(),
> diff --git a/model/networks.py b/model/networks.py
> index e04c8e4..3b2a9e2 100644
> --- a/model/networks.py
> +++ b/model/networks.py
> @@ -49,8 +49,9 @@ KIMCHI_BRIDGE_PREFIX = 'kb'
> class NetworksModel(object):
> def __init__(self, **kargs):
> self.conn = kargs['conn']
> - if self.conn.isQemuURI():
> - self._check_default_networks()
> + if self.conn.get() is not None:
> + if self.conn.isQemuURI():
> + self._check_default_networks()
>
> self.caps = CapabilitiesModel(**kargs)
>
> diff --git a/model/storagepools.py b/model/storagepools.py
> index be06988..3f6a734 100644
> --- a/model/storagepools.py
> +++ b/model/storagepools.py
> @@ -65,8 +65,9 @@ class StoragePoolsModel(object):
> self.caps = CapabilitiesModel(**kargs)
> self.device = DeviceModel(**kargs)
>
> - if self.conn.isQemuURI():
> - self._check_default_pools()
> + if self.conn.get() is not None:
> + if self.conn.isQemuURI():
> + self._check_default_pools()
>
> def _check_default_pools(self):
> pools = {}
> diff --git a/model/storagevolumes.py b/model/storagevolumes.py
> index da42e85..70cad4f 100644
> --- a/model/storagevolumes.py
> +++ b/model/storagevolumes.py
> @@ -275,7 +275,10 @@ class StorageVolumeModel(object):
> self.task = TaskModel(**kargs)
> self.storagevolumes = StorageVolumesModel(**kargs)
> self.storagepool = StoragePoolModel(**kargs)
> - self.libvirt_user = UserTests().probe_user()
> + if self.conn.get() is not None:
> + self.libvirt_user = UserTests().probe_user()
> + else:
> + self.libvirt_user = None
>
> @staticmethod
> def get_storagevolume(poolname, name, conn):
> @@ -332,6 +335,8 @@ class StorageVolumeModel(object):
> isvalid = False
>
> used_by = get_disk_used_by(self.objstore, self.conn, path)
> + if (self.libvirt_user is None):
> + self.libvirt_user = UserTests().probe_user()
> ret, _ = probe_file_permission_as_user(path, self.libvirt_user)
> res = dict(type=VOLUME_TYPE_MAP[info[0]],
> capacity=info[1],
--
Ramon Nunes Medeiros
Kimchi Developer
Linux Technology Center Brazil
IBM Systems & Technology Group
Phone : +55 19 2132 7878
ramonn at br.ibm.com
More information about the Kimchi-devel
mailing list