
On 01/23/2014 10:29 PM, Rodrigo Trujillo wrote:
In order to implement support to SCSI/FC UI, it is necessary to retrieve node devices.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- src/kimchi/control/devices.py | 40 ++++++++++++++++++++++++++++++++++++++++ src/kimchi/control/host.py | 3 +++ src/kimchi/model.py | 28 ++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 src/kimchi/control/devices.py
diff --git a/src/kimchi/control/devices.py b/src/kimchi/control/devices.py new file mode 100644 index 0000000..d5ef8fe --- /dev/null +++ b/src/kimchi/control/devices.py @@ -0,0 +1,40 @@ +# +# Project Kimchi +# +# Copyright IBM, Corp. 2014 +# +# Authors: +# Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> +# +# 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 + + +from kimchi.control.base import Collection, Resource + + +class Devices(Collection): + def __init__(self, model): + super(Devices, self).__init__(model) + self.resource = Device + + +class Device(Resource): + def __init__(self, model, id): + super(Device, self).__init__(model, id) + + @property + def data(self): + return self.info + diff --git a/src/kimchi/control/host.py b/src/kimchi/control/host.py index 9b19577..82c8c13 100644 --- a/src/kimchi/control/host.py +++ b/src/kimchi/control/host.py @@ -24,6 +24,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
from kimchi.control.base import Collection, Resource +from kimchi.control.devices import Devices
class Host(Resource): @@ -36,6 +37,8 @@ class Host(Resource): self.stats.exposed = True self.partitions = Partitions(self.model) self.partitions.exposed = True + self.devices = Devices(self.model) + self.devices.exposed = True
If "Devices" is a sub-resource of host you should put the control/devices.py content in control/host.py The files in control/ are named according to uri.
@property def data(self): diff --git a/src/kimchi/model.py b/src/kimchi/model.py index 552f69d..4a5f344 100644 --- a/src/kimchi/model.py +++ b/src/kimchi/model.py @@ -361,6 +361,34 @@ class Model(object): self.stats[vm_uuid].update({'disk_io': rate, 'max_disk_io': max_disk_io, 'diskRdKB': diskRdKB, 'diskWrKB': diskWrKB})
+ def device_lookup(self, nodedev_name): + return {'name': nodedev_name} + + def devices_get_list(self, _cap=None): + conn = self.conn.get() + if _cap == None: + dev_names = [name.name() for name in conn.listAllDevices(0)] + elif _cap == 'fc_host': + dev_names = self._get_devices_fc_host() + else: + # Get devices with required capability + dev_names = conn.listDevices(_cap,0) + return dev_names + + def _get_devices_fc_host(self): + conn = self.conn.get() + # Libvirt < 1.0.5 does not support fc_host capability + if is_libvirt_version_lesser('1.0.5'): + ret = [] + scsi_hosts = conn.listDevices('scsi_host',0) + 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
What about the "else" code?
+ return conn.listDevices('fc_host',0) + def debugreport_lookup(self, name): path = config.get_debugreports_path() file_pattern = os.path.join(path, name)