Fix drive sensors collection in redfish mgmt interface

Fixes drive sensors information collection in `redfish` management
interface. Prior to this fix, wrong Redfish schema has been used for
Drive resource what has been causing exception and ultimately sensor
data collection failure.

Change-Id: I8b0f69d13420fa0a3fc21f044ed2bba6a540e638
This commit is contained in:
Ilya Etingof 2019-09-27 18:22:16 +02:00 committed by Julia Kreger
parent 4895f36ffb
commit a2ae57c457
3 changed files with 14 additions and 10 deletions

View File

@ -308,13 +308,11 @@ class RedfishManagement(base.ManagementInterface):
for storage in system.simple_storage.get_members(): for storage in system.simple_storage.get_members():
for drive in storage.devices: for drive in storage.devices:
sensor = cls._sensor2dict( sensor = cls._sensor2dict(
drive, 'identity', 'model', 'capacity_bytes', drive, 'name', 'model', 'capacity_bytes')
'failure_predicted')
sensor.update( sensor.update(
cls._sensor2dict(drive.status, 'state', 'health')) cls._sensor2dict(drive.status, 'state', 'health'))
unique_name = '%s:%s@%s' % ( unique_name = '%s:%s@%s' % (
drive.identity, system.simple_storage.identity, drive.name, storage.identity, system.identity)
system.identity)
sensors[unique_name] = sensor sensors[unique_name] = sensor
return sensors return sensors

View File

@ -359,11 +359,10 @@ class RedfishManagementTestCase(db_base.DbTestCase):
def test__get_sensors_data_drive(self): def test__get_sensors_data_drive(self):
attributes = { attributes = {
'identity': '32ADF365C6C1B7BD', 'name': '32ADF365C6C1B7BD',
'manufacturer': 'IBM',
'model': 'IBM 350A', 'model': 'IBM 350A',
'capacity_bytes': 3750000000, 'capacity_bytes': 3750000000,
'failure_predicted': True,
'serial_number': 'SN010203040506',
'status': { 'status': {
'health': 'OK', 'health': 'OK',
'state': 'enabled' 'state': 'enabled'
@ -372,10 +371,11 @@ class RedfishManagementTestCase(db_base.DbTestCase):
mock_system = mock.MagicMock(identity='ZZZ-YYY-XXX') mock_system = mock.MagicMock(identity='ZZZ-YYY-XXX')
mock_drive = mock.MagicMock(**attributes) mock_drive = mock.MagicMock(**attributes)
mock_drive.name = attributes['name']
mock_drive.status = mock.MagicMock(**attributes['status']) mock_drive.status = mock.MagicMock(**attributes['status'])
mock_storage = mock.MagicMock() mock_storage = mock.MagicMock()
mock_storage.devices = [mock_drive] mock_storage.devices = [mock_drive]
mock_system.simple_storage.identity = 'XXX-YYY-ZZZ' mock_storage.identity = 'XXX-YYY-ZZZ'
mock_system.simple_storage.get_members.return_value = [mock_storage] mock_system.simple_storage.get_members.return_value = [mock_storage]
with task_manager.acquire(self.context, self.node.uuid, with task_manager.acquire(self.context, self.node.uuid,
@ -385,9 +385,8 @@ class RedfishManagementTestCase(db_base.DbTestCase):
expected = { expected = {
'32ADF365C6C1B7BD:XXX-YYY-ZZZ@ZZZ-YYY-XXX': { '32ADF365C6C1B7BD:XXX-YYY-ZZZ@ZZZ-YYY-XXX': {
'capacity_bytes': 3750000000, 'capacity_bytes': 3750000000,
'failure_predicted': True,
'health': 'OK', 'health': 'OK',
'identity': '32ADF365C6C1B7BD', 'name': '32ADF365C6C1B7BD',
'model': 'IBM 350A', 'model': 'IBM 350A',
'state': 'enabled' 'state': 'enabled'
} }

View File

@ -0,0 +1,7 @@
---
fixes:
- |
Fixes drive sensors information collection in ``redfish`` management
interface. Prior to this fix, wrong Redfish schema has been used for
Drive resource what has been causing exception and ultimately sensor
data collection failure.