[Kimchi-devel] [PATCHv9 09/10] Add showmount function and feature test for libvirt target probe
Aline Manera
alinefm at linux.vnet.ibm.com
Thu Jan 23 13:07:00 UTC 2014
Reviewed-by: Aline Manera <alinefm at linux.vnet.ibm.com>
On 01/22/2014 02:13 PM, lvroyce at linux.vnet.ibm.com wrote:
> From: Royce Lv <lvroyce at linux.vnet.ibm.com>
>
> Add nfs showmount cmd and parse its output, set timeout to be 10s.
> With bug https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1264955,
> Ubuntu libvirt run find-storage-pool-sources return error with error code 38,
> generic system call error. While when server does not export any path,
> it returns error code 1, internal error.
> Leverage this to determine whether libvirt works right with target probe.
>
> Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
> ---
> src/kimchi/featuretests.py | 22 ++++++++++++++++++++++
> src/kimchi/utils.py | 20 ++++++++++++++++++--
> 2 files changed, 40 insertions(+), 2 deletions(-)
>
> diff --git a/src/kimchi/featuretests.py b/src/kimchi/featuretests.py
> index a5755a2..32ad2ec 100644
> --- a/src/kimchi/featuretests.py
> +++ b/src/kimchi/featuretests.py
> @@ -22,11 +22,15 @@
>
> import cherrypy
> import libvirt
> +import lxml.etree as ET
> import os
> import subprocess
> import threading
>
>
> +from lxml.builder import E
> +
> +
> from kimchi import config
>
>
> @@ -70,6 +74,24 @@ class FeatureTests(object):
> conn is None or conn.close()
>
> @staticmethod
> + def libvirt_support_nfs_probe():
> + def _get_xml():
> + obj = E.source(E.host(name='localhost'), E.format(type='nfs'))
> + xml = ET.tostring(obj)
> + return xml
> + try:
> + conn = libvirt.open('qemu:///system')
> + ret = conn.findStoragePoolSources('netfs', _get_xml(), 0)
> + except libvirt.libvirtError as e:
> + if e.get_error_code() == 38:
> + # if libvirt cannot find showmount,
> + # it returns 38--general system call failure
> + return False
> + finally:
> + conn is None or conn.close()
> + return True
> +
> + @staticmethod
> def qemu_supports_iso_stream():
> cmd = "qemu-io -r http://127.0.0.1:%d/images/icon-fedora.png \
> -c 'read -v 0 512'" % cherrypy.server.socket_port
> diff --git a/src/kimchi/utils.py b/src/kimchi/utils.py
> index 5d6e8ea..c7ececf 100644
> --- a/src/kimchi/utils.py
> +++ b/src/kimchi/utils.py
> @@ -159,6 +159,22 @@ def run_command(cmd, timeout=None):
> def parse_cmd_output(output, output_items):
> res = []
> for line in output.split("\n"):
> - res.append(dict(zip(output_items, line.split())))
> -
> + if line:
> + res.append(dict(zip(output_items, line.split())))
> return res
> +
> +
> +def patch_find_nfs_target(nfs_server):
> + cmd = ["showmount", "--no-headers", "--exports", nfs_server]
> + try:
> + out = run_command(cmd, 10)[0]
> + except TimeoutExpired:
> + kimchi_log.warning("server %s query timeout, may not have any path exported",
> + storage_server)
> + return list()
> +
> + targets = parse_cmd_output(out, output_items = ['target'])
> + for target in targets:
> + target['type'] = 'nfs'
> + target['host_name'] = nfs_server
> + return targets
More information about the Kimchi-devel
mailing list