def filter_vendor_specific_devices(self, devices, vid_pid_tuple): """Returns only the items from the devices list that are of the specific type""" from infi.storagemodel.base.gevent_wrapper import run_together run_together(device.get_scsi_vendor_id_or_unknown_on_error for device in devices) return [ device for device in devices if device.get_scsi_vendor_id_or_unknown_on_error() == vid_pid_tuple ]
def get_all_multipath_block_devices(self): from infi.storagemodel.base.gevent_wrapper import run_together from infi.devicemanager import DeviceManager from infi.wmpio import WmiClient, get_multipath_devices from functools import partial device_manager = DeviceManager() wmi_client = WmiClient() physical_drives = set() multipath_dict = get_multipath_devices(wmi_client) policies_dict = LazyLoadBalancingInfomrationDict(wmi_client) def _get_multipath_object(device_object): prefix = u"%s_" % device_object._instance_id for key in multipath_dict: if key.startswith(prefix): return multipath_dict[key] return None def _is_physical_drive(device_object): if device_object.get_physical_drive_number() != -1: physical_drives.add(device_object) def _iter_disk_drives(): for disk_drive in device_manager.disk_drives: if not is_disk_drive_managed_by_windows_mpio(disk_drive): logger.debug("disk drive {} is not managed by mpio".format( disk_drive)) continue multipath_object = _get_multipath_object(disk_drive) if multipath_object is None: logger.error( "no matching MPIO WMI instance found for disk drive {} (instance_id={!r})" .format(disk_drive, disk_drive._instance_id)) continue yield WindowsNativeMultipathBlockDevice( disk_drive, multipath_object, policies_dict) run_together( partial(_is_physical_drive, drive) for drive in _iter_disk_drives()) return list(physical_drives)
def get_all_multipath_block_devices(self): from infi.storagemodel.base.gevent_wrapper import run_together from infi.devicemanager import DeviceManager from infi.wmpio import WmiClient, get_multipath_devices from functools import partial device_manager = DeviceManager() wmi_client = WmiClient() physical_drives = set() multipath_dict = get_multipath_devices(wmi_client) policies_dict = LazyLoadBalancingInfomrationDict(wmi_client) def _get_multipath_object(device_object): prefix = u"%s_" % device_object._instance_id for key in multipath_dict: if key.startswith(prefix): return multipath_dict[key] return None def _is_physical_drive(device_object): if device_object.get_physical_drive_number() != -1: physical_drives.add(device_object) def _iter_disk_drives(): for disk_drive in device_manager.disk_drives: if not is_disk_drive_managed_by_windows_mpio(disk_drive): logger.debug("disk drive {} is not managed by mpio".format(disk_drive)) continue multipath_object = _get_multipath_object(disk_drive) if multipath_object is None: logger.error("no matching MPIO WMI instance found for disk drive {} (instance_id={!r})".format(disk_drive, disk_drive._instance_id)) continue yield WindowsNativeMultipathBlockDevice(disk_drive, multipath_object, policies_dict) run_together(partial(_is_physical_drive, drive) for drive in _iter_disk_drives()) return list(physical_drives)
def filter_vendor_specific_devices(self, devices, vid_pid_tuple): """Returns only the items from the devices list that are of the specific type""" from infi.storagemodel.base.gevent_wrapper import run_together run_together(device.get_scsi_vendor_id_or_unknown_on_error for device in devices) return filter(lambda device: device.get_scsi_vendor_id_or_unknown_on_error() == vid_pid_tuple, devices)