[Kimchi-devel] [PATCH] model.host: changing listDevices() to listAllDevices()
Paulo Ricardo Paz Vital
pvital at linux.vnet.ibm.com
Fri Aug 29 21:44:27 UTC 2014
--
Reviewed-by: Paulo Vital <pvital at linux.vnet.ibm.com>
On Fri, 2014-08-29 at 16:49 -0300, Daniel Henrique Barboza wrote:
> The method listDevices() has unexpected behavior in certain
> situations and architectures. According the libvirt API,
> listAllDevices() delivers more control over the results and
> it does not present the same problems.
>
> For those reasons, this commit changes all the occurences of
> listDevices() to use listAllDevices() instead.
>
> Signed-off-by: Daniel Henrique Barboza <danielhb at linux.vnet.ibm.com>
> ---
> src/kimchi/model/host.py | 33 ++++++++++++++++++++++++---------
> 1 file changed, 24 insertions(+), 9 deletions(-)
>
> diff --git a/src/kimchi/model/host.py b/src/kimchi/model/host.py
> index 39f45d8..553ad7c 100644
> --- a/src/kimchi/model/host.py
> +++ b/src/kimchi/model/host.py
> @@ -18,6 +18,7 @@
> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>
> import grp
> +import libvirt
> import os
> import time
> import platform
> @@ -277,31 +278,45 @@ class PartitionModel(object):
> class DevicesModel(object):
> def __init__(self, **kargs):
> self.conn = kargs['conn']
> + self.cap_map = \
> + {'fc_host': libvirt.VIR_CONNECT_LIST_NODE_DEVICES_CAP_FC_HOST,
> + 'net': libvirt.VIR_CONNECT_LIST_NODE_DEVICES_CAP_NET,
> + 'pci': libvirt.VIR_CONNECT_LIST_NODE_DEVICES_CAP_PCI_DEV,
> + 'scsi': libvirt.VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI,
> + 'scsi_host': libvirt.VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_HOST,
> + 'storage': libvirt.VIR_CONNECT_LIST_NODE_DEVICES_CAP_STORAGE,
> + 'usb_device': libvirt.VIR_CONNECT_LIST_NODE_DEVICES_CAP_USB_DEV,
> + 'usb':
> + libvirt.VIR_CONNECT_LIST_NODE_DEVICES_CAP_USB_INTERFACE}
>
> def get_list(self, _cap=None):
> + if _cap == 'fc_host':
> + return self._get_devices_fc_host()
> + return self._get_devices_with_capability(_cap)
> +
> + def _get_devices_with_capability(self, cap):
> conn = self.conn.get()
> - if _cap is None:
> - dev_names = [name.name() for name in conn.listAllDevices(0)]
> - elif _cap == 'fc_host':
> - dev_names = self._get_devices_fc_host()
> + if cap is None:
> + cap_flag = 0
> else:
> - # Get devices with required capability
> - dev_names = conn.listDevices(_cap, 0)
> - return dev_names
> + cap_flag = self.cap_map.get(cap)
> + if cap_flag is None:
> + return []
> + return [name.name() for name in conn.listAllDevices(cap_flag)]
>
> def _get_devices_fc_host(self):
> conn = self.conn.get()
> # Libvirt < 1.0.5 does not support fc_host capability
> if not CapabilitiesModel().fc_host_support:
> ret = []
> - scsi_hosts = conn.listDevices('scsi_host', 0)
> + scsi_hosts = self._get_devices_with_capability('scsi_host')
> for host in scsi_hosts:
> xml = conn.nodeDeviceLookupByName(host).XMLDesc(0)
> path = '/device/capability/capability/@type'
> if 'fc_host' in xmlutils.xpath_get_text(xml, path):
> ret.append(host)
> return ret
> - return conn.listDevices('fc_host', 0)
> + return self._get_devices_with_capability('fc_host')
>
>
> class DeviceModel(object):
More information about the Kimchi-devel
mailing list