[PATCH] [Kimchi] Reverting model/config.py deleted on last commit

The file was wrongly removed on last commit. Restore it to the correct location. Signed-off-by: Ramon Medeiros <ramonn@linux.vnet.ibm.com> --- model/config.py | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 model/config.py diff --git a/model/config.py b/model/config.py new file mode 100644 index 0000000..e552edb --- /dev/null +++ b/model/config.py @@ -0,0 +1,155 @@ +# +# Project Kimchi +# +# Copyright IBM, Corp. 2014-2015 +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +import cherrypy +from multiprocessing.pool import ThreadPool + +from wok.basemodel import Singleton +from wok.config import config as kconfig +from wok.config import get_version +from wok.exception import NotFoundError +from wok.utils import run_command, wok_log + +from wok.plugins.kimchi.config import find_qemu_binary +from wok.plugins.kimchi.distroloader import DistroLoader +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 + + +class ConfigModel(object): + def __init__(self, **kargs): + pass + + def lookup(self, name): + proxy_port = kconfig.get('display', 'display_proxy_port') + return {'display_proxy_port': proxy_port, + 'version': get_version()} + + +class CapabilitiesModel(object): + __metaclass__ = Singleton + + def __init__(self, **kargs): + self.conn = kargs['conn'] + self.qemu_stream = False + self.libvirt_stream_protocols = [] + self.fc_host_support = False + self.kernel_vfio = False + self.mem_hotplug_support = False + + # Subscribe function to set host capabilities to be run when cherrypy + # server is up + # It is needed because some features tests depends on the server + cherrypy.engine.subscribe('start', self._set_capabilities) + + # Subscribe function to clean any Kimchi leftovers + cherrypy.engine.subscribe('stop', self._clean_leftovers) + + def _clean_leftovers(self): + conn = self.conn.get() + FeatureTests.disable_libvirt_error_logging() + try: + dom = conn.lookupByName(FEATURETEST_VM_NAME) + dom.undefine() + except Exception: + # Any exception can be ignored here + pass + + try: + pool = conn.storagePoolLookupByName(FEATURETEST_POOL_NAME) + pool.undefine() + except Exception: + # Any exception can be ignored here + pass + + FeatureTests.enable_libvirt_error_logging() + + def _set_capabilities(self): + wok_log.info("*** Running feature tests ***") + conn = self.conn.get() + self.qemu_stream = FeatureTests.qemu_supports_iso_stream() + self.nfs_target_probe = FeatureTests.libvirt_support_nfs_probe(conn) + self.fc_host_support = FeatureTests.libvirt_support_fc_host(conn) + self.kernel_vfio = FeatureTests.kernel_support_vfio() + self.mem_hotplug_support = FeatureTests.has_mem_hotplug_support(conn) + + self.libvirt_stream_protocols = [] + for p in ['http', 'https', 'ftp', 'ftps', 'tftp']: + if FeatureTests.libvirt_supports_iso_stream(conn, p): + self.libvirt_stream_protocols.append(p) + + wok_log.info("*** Feature tests completed ***") + _set_capabilities.priority = 90 + + def _qemu_support_spice(self): + qemu_path = find_qemu_binary(find_emulator=True) + out, err, rc = run_command(['ldd', qemu_path]) + if rc != 0: + wok_log.error('Failed to find qemu binary dependencies: %s', + err) + return False + for line in out.split('\n'): + if line.lstrip().startswith('libspice-server.so'): + return True + 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(), + 'federation': kconfig.get("server", "federation"), + 'auth': kconfig.get("authentication", "method"), + 'kernel_vfio': self.kernel_vfio, + 'nm_running': FeatureTests.is_nm_running(), + 'mem_hotplug_support': self.mem_hotplug_support + } + + +class DistrosModel(object): + def __init__(self, **kargs): + distroloader = DistroLoader() + self.distros = distroloader.get() + + def get_list(self): + def validate_distro(distro): + if check_url_path(distro['path']): + return distro['name'] + + n_processes = len(self.distros.keys()) + pool = ThreadPool(processes=n_processes) + map_res = pool.map_async(validate_distro, self.distros.values()) + pool.close() + pool.join() + res = list(set(map_res.get()) - set([None])) + return sorted(res) + + +class DistroModel(object): + def __init__(self, **kargs): + self._distros = DistrosModel() + + def lookup(self, name): + try: + return self._distros.distros[name] + except KeyError: + raise NotFoundError("KCHDISTRO0001E", {'name': name}) -- 2.1.0

Tested-by: Paulo Vital <pvital@linux.vnet.ibm.com> Reviewed-by: Paulo Vital <pvital@linux.vnet.ibm.com> On 12/01/2015 01:37 PM, Ramon Medeiros wrote:
The file was wrongly removed on last commit. Restore it to the correct location.
Signed-off-by: Ramon Medeiros <ramonn@linux.vnet.ibm.com> --- model/config.py | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 model/config.py
diff --git a/model/config.py b/model/config.py new file mode 100644 index 0000000..e552edb --- /dev/null +++ b/model/config.py @@ -0,0 +1,155 @@ +# +# Project Kimchi +# +# Copyright IBM, Corp. 2014-2015 +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +import cherrypy +from multiprocessing.pool import ThreadPool + +from wok.basemodel import Singleton +from wok.config import config as kconfig +from wok.config import get_version +from wok.exception import NotFoundError +from wok.utils import run_command, wok_log + +from wok.plugins.kimchi.config import find_qemu_binary +from wok.plugins.kimchi.distroloader import DistroLoader +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 + + +class ConfigModel(object): + def __init__(self, **kargs): + pass + + def lookup(self, name): + proxy_port = kconfig.get('display', 'display_proxy_port') + return {'display_proxy_port': proxy_port, + 'version': get_version()} + + +class CapabilitiesModel(object): + __metaclass__ = Singleton + + def __init__(self, **kargs): + self.conn = kargs['conn'] + self.qemu_stream = False + self.libvirt_stream_protocols = [] + self.fc_host_support = False + self.kernel_vfio = False + self.mem_hotplug_support = False + + # Subscribe function to set host capabilities to be run when cherrypy + # server is up + # It is needed because some features tests depends on the server + cherrypy.engine.subscribe('start', self._set_capabilities) + + # Subscribe function to clean any Kimchi leftovers + cherrypy.engine.subscribe('stop', self._clean_leftovers) + + def _clean_leftovers(self): + conn = self.conn.get() + FeatureTests.disable_libvirt_error_logging() + try: + dom = conn.lookupByName(FEATURETEST_VM_NAME) + dom.undefine() + except Exception: + # Any exception can be ignored here + pass + + try: + pool = conn.storagePoolLookupByName(FEATURETEST_POOL_NAME) + pool.undefine() + except Exception: + # Any exception can be ignored here + pass + + FeatureTests.enable_libvirt_error_logging() + + def _set_capabilities(self): + wok_log.info("*** Running feature tests ***") + conn = self.conn.get() + self.qemu_stream = FeatureTests.qemu_supports_iso_stream() + self.nfs_target_probe = FeatureTests.libvirt_support_nfs_probe(conn) + self.fc_host_support = FeatureTests.libvirt_support_fc_host(conn) + self.kernel_vfio = FeatureTests.kernel_support_vfio() + self.mem_hotplug_support = FeatureTests.has_mem_hotplug_support(conn) + + self.libvirt_stream_protocols = [] + for p in ['http', 'https', 'ftp', 'ftps', 'tftp']: + if FeatureTests.libvirt_supports_iso_stream(conn, p): + self.libvirt_stream_protocols.append(p) + + wok_log.info("*** Feature tests completed ***") + _set_capabilities.priority = 90 + + def _qemu_support_spice(self): + qemu_path = find_qemu_binary(find_emulator=True) + out, err, rc = run_command(['ldd', qemu_path]) + if rc != 0: + wok_log.error('Failed to find qemu binary dependencies: %s', + err) + return False + for line in out.split('\n'): + if line.lstrip().startswith('libspice-server.so'): + return True + 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(), + 'federation': kconfig.get("server", "federation"), + 'auth': kconfig.get("authentication", "method"), + 'kernel_vfio': self.kernel_vfio, + 'nm_running': FeatureTests.is_nm_running(), + 'mem_hotplug_support': self.mem_hotplug_support + } + + +class DistrosModel(object): + def __init__(self, **kargs): + distroloader = DistroLoader() + self.distros = distroloader.get() + + def get_list(self): + def validate_distro(distro): + if check_url_path(distro['path']): + return distro['name'] + + n_processes = len(self.distros.keys()) + pool = ThreadPool(processes=n_processes) + map_res = pool.map_async(validate_distro, self.distros.values()) + pool.close() + pool.join() + res = list(set(map_res.get()) - set([None])) + return sorted(res) + + +class DistroModel(object): + def __init__(self, **kargs): + self._distros = DistrosModel() + + def lookup(self, name): + try: + return self._distros.distros[name] + except KeyError: + raise NotFoundError("KCHDISTRO0001E", {'name': name})
-- --- Paulo Ricardo Paz Vital IBM Linux Technology Center
participants (3)
-
Aline Manera
-
Paulo Ricardo Paz Vital
-
Ramon Medeiros