Example #1
0
 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
     ]
Example #2
0
    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)
Example #4
0
 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)