Пример #1
0
 def test_find_raid_partition(self):
     """ verify probed raid partitions are found. """
     self.probe_data = _get_data('probert_storage_raid1_partitions.json')
     extracted = storage_config.extract_storage_config(self.probe_data)
     config = extracted['storage']['config']
     raids = [cfg for cfg in config if cfg['type'] == 'raid']
     raid_partitions = [
         cfg for cfg in config
         if cfg['type'] == 'partition' and cfg['id'].startswith('raid')
     ]
     self.assertEqual(1, len(raids))
     self.assertEqual(1, len(raid_partitions))
     self.assertEqual(
         {
             'id': 'raid-md1',
             'type': 'raid',
             'raidlevel': 'raid1',
             'name': 'md1',
             'devices': ['partition-vdb1', 'partition-vdc1'],
             'spare_devices': []
         }, raids[0])
     self.assertEqual(
         {
             'id': 'raid-md1p1',
             'type': 'partition',
             'size': 4285530112,
             'flag': 'linux',
             'number': 1,
             'device': 'raid-md1',
             'offset': 1048576
         }, raid_partitions[0])
Пример #2
0
 def test_probe_handles_missing_keys(self):
     """ verify extract handles missing probe_data keys """
     for missing_key in self.probe_data.keys():
         probe_data = copy.deepcopy(self.probe_data)
         del probe_data[missing_key]
         extracted = storage_config.extract_storage_config(probe_data)
         if missing_key != 'blockdev':
             self.assertEqual(
                 {
                     'storage': {
                         'version':
                         1,
                         'config': [{
                             'id': 'disk-sda',
                             'path': '/dev/sda',
                             'serial': 'QEMU_HARDDISK_QM00001',
                             'type': 'disk'
                         }]
                     }
                 }, extracted)
         else:
             # empty config without blockdev data
             self.assertEqual({'storage': {
                 'config': [],
                 'version': 1
             }}, extracted)
Пример #3
0
 def reset(self):
     if self._probe_data is not None:
         config = storage_config.extract_storage_config(self._probe_data)
         self._actions = self._actions_from_config(
             config["storage"]["config"], self._probe_data['blockdev'])
     else:
         self._actions = []
     self.grub_install_device = None
Пример #4
0
 def test_find_extended_partition(self):
     """ finds extended partition and set flag in config """
     self.probe_data = _get_data('probert_storage_msdos_mbr_extended.json')
     extracted = storage_config.extract_storage_config(self.probe_data)
     config = extracted['storage']['config']
     partitions = [cfg for cfg in config if cfg['type'] == 'partition']
     extended = [part for part in partitions if part['flag'] == 'extended']
     self.assertEqual(1, len(extended))
Пример #5
0
def discover():
    probe_data = _discover_get_probert_data()
    if 'storage' not in probe_data:
        raise ValueError('Probing storage failed')

    LOG.debug('Extracting storage config from discovered devices')
    try:
        return storage_config.extract_storage_config(probe_data.get('storage'))
    except ImportError as e:
        LOG.exception(e)

    return {}
Пример #6
0
 def reset(self):
     self._all_ids = set()
     if self._probe_data is not None:
         self._orig_config = storage_config.extract_storage_config(
             self._probe_data)["storage"]["config"]
         self._actions = self._actions_from_config(
             self._orig_config,
             self._probe_data['blockdev'],
             is_probe_data=True)
     else:
         self._orig_config = []
         self._actions = []
     self.swap = None
     self.grub = None
Пример #7
0
    def test_find_all_multipath(self):
        """ verify probed multipath paths are included in config. """
        self.probe_data = _get_data('probert_storage_multipath.json')
        extracted = storage_config.extract_storage_config(self.probe_data)
        config = extracted['storage']['config']
        blockdev = self.probe_data['blockdev']

        for mpmap in self.probe_data['multipath']['maps']:
            nr_disks = int(mpmap['paths'])
            mp_name = blockdev['/dev/%s' % mpmap['sysfs']]['DM_NAME']
            matched_disks = [
                cfg for cfg in config if cfg['type'] == 'disk'
                and cfg.get('multipath', '') == mp_name
            ]
            self.assertEqual(nr_disks, len(matched_disks))
Пример #8
0
 def test_blockdev_detects_nvme_multipath_devices(self):
     self.probe_data = _get_data('probert_storage_nvme_multipath.json')
     extracted = storage_config.extract_storage_config(self.probe_data)
     config = extracted['storage']['config']
     disks = [cfg for cfg in config if cfg['type'] == 'disk']
     expected_dict = {
         'id': 'disk-nvme0n1',
         'path': '/dev/nvme0n1',
         'ptable': 'gpt',
         'serial': 'SAMSUNG MZPLL3T2HAJQ-00005_S4CCNE0M300015',
         'type': 'disk',
         'wwn': 'eui.344343304d3000150025384500000004',
     }
     self.assertEqual(1, len(disks))
     self.assertEqual(expected_dict, disks[0])
Пример #9
0
 def test_live_iso(self):
     """ verify live-iso extracted storage-config finds target disk. """
     extracted = storage_config.extract_storage_config(self.probe_data)
     self.assertEqual(
         {
             'storage': {
                 'version':
                 1,
                 'config': [{
                     'id': 'disk-sda',
                     'path': '/dev/sda',
                     'serial': 'QEMU_HARDDISK_QM00001',
                     'type': 'disk'
                 }]
             }
         }, extracted)
Пример #10
0
 def test_blockdev_skips_invalid_wwn(self):
     self.probe_data = _get_data('probert_storage_bogus_wwn.json')
     extracted = storage_config.extract_storage_config(self.probe_data)
     config = extracted['storage']['config']
     disks = [
         cfg for cfg in config
         if cfg['type'] == 'disk' and cfg['path'] == '/dev/sda'
     ]
     expected_dict = {
         'id': 'disk-sda',
         'path': '/dev/sda',
         'ptable': 'gpt',
         'serial': 'Corsair_Force_GS_13207907000097410026',
         'type': 'disk',
     }
     self.assertEqual(1, len(disks))
     self.assertEqual(expected_dict, disks[0])
Пример #11
0
def discover():
    try:
        LOG.debug('Importing probert prober')
        from probert import prober
    except Exception:
        LOG.error('Failed to import probert, discover disabled')
        return {}

    probe = prober.Prober()
    LOG.debug('Probing system for storage devices')
    probe.probe_storage()
    probe_data = probe.get_results()
    if 'storage' not in probe_data:
        raise ValueError('Probing storage failed')

    LOG.debug('Extracting storage config from discovered devices')
    try:
        return storage_config.extract_storage_config(probe_data.get('storage'))
    except ImportError as e:
        LOG.exception(e)

    return {}