Add 'system_vendor' information to data
This patch set add hardware vendor information to data. By using this data, we can get hints to detect driver. Change-Id: I39385fd5d616edfad719c255f22642f215bfb532
This commit is contained in:
parent
1e30946835
commit
3823a53040
@ -188,6 +188,15 @@ class Memory(encoding.SerializableComparable):
|
||||
self.physical_mb = physical_mb
|
||||
|
||||
|
||||
class SystemVendorInfo(encoding.SerializableComparable):
|
||||
serializable_fields = ('product_name', 'serial_number', 'manufacturer')
|
||||
|
||||
def __init__(self, product_name, serial_number, manufacturer):
|
||||
self.product_name = product_name
|
||||
self.serial_number = serial_number
|
||||
self.manufacturer = manufacturer
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class HardwareManager(object):
|
||||
@abc.abstractmethod
|
||||
@ -264,6 +273,7 @@ class HardwareManager(object):
|
||||
hardware_info['disks'] = self.list_block_devices()
|
||||
hardware_info['memory'] = self.get_memory()
|
||||
hardware_info['bmc_address'] = self.get_bmc_address()
|
||||
hardware_info['system_vendor'] = self.get_system_vendor_info()
|
||||
return hardware_info
|
||||
|
||||
def get_clean_steps(self, node, ports):
|
||||
@ -492,6 +502,30 @@ class GenericHardwareManager(HardwareManager):
|
||||
"No suitable device was found for "
|
||||
"deployment using these hints %s" % root_device_hints)
|
||||
|
||||
def get_system_vendor_info(self):
|
||||
product_name = None
|
||||
serial_number = None
|
||||
manufacturer = None
|
||||
try:
|
||||
out, _e = utils.execute("dmidecode --type system",
|
||||
shell=True)
|
||||
except (processutils.ProcessExecutionError, OSError) as e:
|
||||
LOG.warning("Cannot get system vendor information: %s", e)
|
||||
else:
|
||||
for line in out.split('\n'):
|
||||
line_arr = line.split(':', 1)
|
||||
if len(line_arr) != 2:
|
||||
continue
|
||||
if line_arr[0].strip() == 'Product Name':
|
||||
product_name = line_arr[1].strip()
|
||||
elif line_arr[0].strip() == 'Serial Number':
|
||||
serial_number = line_arr[1].strip()
|
||||
elif line_arr[0].strip() == 'Manufacturer':
|
||||
manufacturer = line_arr[1].strip()
|
||||
return SystemVendorInfo(product_name=product_name,
|
||||
serial_number=serial_number,
|
||||
manufacturer=manufacturer)
|
||||
|
||||
def erase_block_device(self, node, block_device):
|
||||
|
||||
# Check if the block device is virtual media and skip the device.
|
||||
|
@ -834,6 +834,41 @@ class TestGenericHardwareManager(test_base.BaseTestCase):
|
||||
mocked_execute.side_effect = processutils.ProcessExecutionError()
|
||||
self.assertIsNone(self.hardware.get_bmc_address())
|
||||
|
||||
@mock.patch.object(utils, 'execute')
|
||||
def test_get_system_vendor_info(self, mocked_execute):
|
||||
mocked_execute.return_value = (
|
||||
'# dmidecode 2.12\n'
|
||||
'SMBIOS 2.6 present.\n'
|
||||
'\n'
|
||||
'Handle 0x0001, DMI type 1, 27 bytes\n'
|
||||
'System Information\n'
|
||||
'\tManufacturer: NEC\n'
|
||||
'\tProduct Name: Express5800/R120b-2 [N8100-1653]\n'
|
||||
'\tVersion: FR1.3\n'
|
||||
'\tSerial Number: 0800113\n'
|
||||
'\tUUID: 00433468-26A5-DF11-8001-406186F5A681\n'
|
||||
'\tWake-up Type: Power Switch\n'
|
||||
'\tSKU Number: Not Specified\n'
|
||||
'\tFamily: Not Specified\n'
|
||||
'\n'
|
||||
'Handle 0x002E, DMI type 12, 5 bytes\n'
|
||||
'System Configuration Options\n'
|
||||
'\tOption 1: CLR_CMOS: Close to clear CMOS\n'
|
||||
'\tOption 2: BMC_FRB3: Close to stop FRB3 Timer\n'
|
||||
'\tOption 3: BIOS_RECOVERY: Close to run BIOS Recovery\n'
|
||||
'\tOption 4: PASS_DIS: Close to clear Password\n'
|
||||
'\n'
|
||||
'Handle 0x0059, DMI type 32, 11 bytes\n'
|
||||
'System Boot Information\n'
|
||||
'\tStatus: No errors detected\n'
|
||||
), ''
|
||||
self.assertEqual('Express5800/R120b-2 [N8100-1653]',
|
||||
self.hardware.get_system_vendor_info().product_name)
|
||||
self.assertEqual('0800113',
|
||||
self.hardware.get_system_vendor_info().serial_number)
|
||||
self.assertEqual('NEC',
|
||||
self.hardware.get_system_vendor_info().manufacturer)
|
||||
|
||||
|
||||
class TestModuleFunctions(test_base.BaseTestCase):
|
||||
|
||||
|
5
releasenotes/notes/add-vendor-info-56be9a8605d80bf0.yaml
Normal file
5
releasenotes/notes/add-vendor-info-56be9a8605d80bf0.yaml
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
features:
|
||||
- Add new 'system_vendor' information to data - Add hardware vendor
|
||||
information(product name, serial number, manufacturer) to data.
|
||||
This will be able to give Ironic Inspector hints to detect driver.
|
Loading…
Reference in New Issue
Block a user