Extend root device hints for different types of WWN

This patch is extending the root device hints to also look at
ID_WWN_WITH_EXTENSION and ID_WWN_VENDOR_EXTENSION from udev.

Prior to this patch the IPA ramdisk only cared about ID_WWN but in some
systems in some platforms with a RAID controller, this ID can be same
even if they are different disks (see bug 1516641).

Closes-Bug: #1516641
Change-Id: Ic3e9a1111dfcc99702190c173562a0dccf5f94c4
This commit is contained in:
Lucas Alvares Gomes
2015-11-16 14:50:55 +00:00
parent 59630d4f7b
commit da9c3b0adc
2 changed files with 22 additions and 5 deletions

View File

@@ -102,7 +102,9 @@ def list_all_block_devices(block_type='disk'):
# ID_SERIAL_SHORT here to keep compatibility with the # ID_SERIAL_SHORT here to keep compatibility with the
# bash deploy ramdisk # bash deploy ramdisk
extra = {key: udev.get('ID_%s' % udev_key) for key, udev_key in extra = {key: udev.get('ID_%s' % udev_key) for key, udev_key in
[('wwn', 'WWN'), ('serial', 'SERIAL_SHORT')]} [('wwn', 'WWN'), ('serial', 'SERIAL_SHORT'),
('wwn_with_extension', 'WWN_WITH_EXTENSION'),
('wwn_vendor_extension', 'WWN_VENDOR_EXTENSION')]}
devices.append(BlockDevice(name=name, devices.append(BlockDevice(name=name,
model=device['MODEL'], model=device['MODEL'],
@@ -139,7 +141,8 @@ class BlockDevice(encoding.SerializableComparable):
'wwn', 'serial', 'vendor') 'wwn', 'serial', 'vendor')
def __init__(self, name, model, size, rotational, wwn=None, serial=None, def __init__(self, name, model, size, rotational, wwn=None, serial=None,
vendor=None): vendor=None, wwn_with_extension=None,
wwn_vendor_extension=None):
self.name = name self.name = name
self.model = model self.model = model
self.size = size self.size = size
@@ -147,6 +150,8 @@ class BlockDevice(encoding.SerializableComparable):
self.wwn = wwn self.wwn = wwn
self.serial = serial self.serial = serial
self.vendor = vendor self.vendor = vendor
self.wwn_with_extension = wwn_with_extension
self.wwn_vendor_extension = wwn_vendor_extension
class NetworkInterface(encoding.SerializableComparable): class NetworkInterface(encoding.SerializableComparable):
@@ -445,7 +450,8 @@ class GenericHardwareManager(HardwareManager):
return True return True
def check_device_attrs(device): def check_device_attrs(device):
for key in ('model', 'wwn', 'serial', 'vendor'): for key in ('model', 'wwn', 'serial', 'vendor',
'wwn_with_extension', 'wwn_vendor_extension'):
if key not in root_device_hints: if key not in root_device_hints:
continue continue

View File

@@ -498,7 +498,9 @@ class TestGenericHardwareManager(test_base.BaseTestCase):
mocked_dev_vendor): mocked_dev_vendor):
mocked_execute.return_value = (BLK_DEVICE_TEMPLATE, '') mocked_execute.return_value = (BLK_DEVICE_TEMPLATE, '')
mocked_udev.side_effect = iter([ mocked_udev.side_effect = iter([
{'ID_WWN': 'wwn%d' % i, 'ID_SERIAL_SHORT': 'serial%d' % i} {'ID_WWN': 'wwn%d' % i, 'ID_SERIAL_SHORT': 'serial%d' % i,
'ID_WWN_WITH_EXTENSION': 'wwn-ext%d' % i,
'ID_WWN_VENDOR_EXTENSION': 'wwn-vendor-ext%d' % i}
for i in range(4) for i in range(4)
]) ])
mocked_dev_vendor.return_value = 'Super Vendor' mocked_dev_vendor.return_value = 'Super Vendor'
@@ -510,6 +512,8 @@ class TestGenericHardwareManager(test_base.BaseTestCase):
rotational=False, rotational=False,
vendor='Super Vendor', vendor='Super Vendor',
wwn='wwn0', wwn='wwn0',
wwn_with_extension='wwn-ext0',
wwn_vendor_extension='wwn-vendor-ext0',
serial='serial0'), serial='serial0'),
hardware.BlockDevice(name='/dev/sdb', hardware.BlockDevice(name='/dev/sdb',
model='Fastable SD131 7', model='Fastable SD131 7',
@@ -517,6 +521,8 @@ class TestGenericHardwareManager(test_base.BaseTestCase):
rotational=False, rotational=False,
vendor='Super Vendor', vendor='Super Vendor',
wwn='wwn1', wwn='wwn1',
wwn_with_extension='wwn-ext1',
wwn_vendor_extension='wwn-vendor-ext1',
serial='serial1'), serial='serial1'),
hardware.BlockDevice(name='/dev/sdc', hardware.BlockDevice(name='/dev/sdc',
model='NWD-BLP4-1600', model='NWD-BLP4-1600',
@@ -524,6 +530,8 @@ class TestGenericHardwareManager(test_base.BaseTestCase):
rotational=False, rotational=False,
vendor='Super Vendor', vendor='Super Vendor',
wwn='wwn2', wwn='wwn2',
wwn_with_extension='wwn-ext2',
wwn_vendor_extension='wwn-vendor-ext2',
serial='serial2'), serial='serial2'),
hardware.BlockDevice(name='/dev/sdd', hardware.BlockDevice(name='/dev/sdd',
model='NWD-BLP4-1600', model='NWD-BLP4-1600',
@@ -531,6 +539,8 @@ class TestGenericHardwareManager(test_base.BaseTestCase):
rotational=False, rotational=False,
vendor='Super Vendor', vendor='Super Vendor',
wwn='wwn3', wwn='wwn3',
wwn_with_extension='wwn-ext3',
wwn_vendor_extension='wwn-vendor-ext3',
serial='serial3') serial='serial3')
] ]
@@ -538,7 +548,8 @@ class TestGenericHardwareManager(test_base.BaseTestCase):
for expected, device in zip(expected_devices, devices): for expected, device in zip(expected_devices, devices):
# Compare all attrs of the objects # Compare all attrs of the objects
for attr in ['name', 'model', 'size', 'rotational', for attr in ['name', 'model', 'size', 'rotational',
'wwn', 'vendor', 'serial']: 'wwn', 'vendor', 'serial', 'wwn_with_extension',
'wwn_vendor_extension']:
self.assertEqual(getattr(expected, attr), self.assertEqual(getattr(expected, attr),
getattr(device, attr)) getattr(device, attr))