Merge "Handle MissingAttributeError when using OOB inspections to fetch MACs"
This commit is contained in:
commit
47b778977c
@ -1197,9 +1197,18 @@ class RedfishManagement(base.ManagementInterface):
|
|||||||
:raises: RedfishError on an error from the Sushy library
|
:raises: RedfishError on an error from the Sushy library
|
||||||
:returns: A list of MAC addresses for the node
|
:returns: A list of MAC addresses for the node
|
||||||
"""
|
"""
|
||||||
|
system = redfish_utils.get_system(task.node)
|
||||||
try:
|
try:
|
||||||
system = redfish_utils.get_system(task.node)
|
|
||||||
return list(redfish_utils.get_enabled_macs(task, system))
|
return list(redfish_utils.get_enabled_macs(task, system))
|
||||||
|
# NOTE(janders) we should handle MissingAttributeError separately
|
||||||
|
# from other SushyErrors - some servers (e.g. some Cisco UCSB and UCSX
|
||||||
|
# blades) are missing EthernetInterfaces attribute yet could be
|
||||||
|
# provisioned successfully if MAC information is provided manually AND
|
||||||
|
# this exception is caught and handled accordingly.
|
||||||
|
except sushy.exceptions.MissingAttributeError as exc:
|
||||||
|
LOG.warning('Cannot get MAC addresses for node %(node)s: %(exc)s',
|
||||||
|
{'node': task.node.uuid, 'exc': exc})
|
||||||
|
# if the exception is not a MissingAttributeError, raise it
|
||||||
except sushy.exceptions.SushyError as exc:
|
except sushy.exceptions.SushyError as exc:
|
||||||
msg = (_('Failed to get network interface information on node '
|
msg = (_('Failed to get network interface information on node '
|
||||||
'%(node)s: %(exc)s')
|
'%(node)s: %(exc)s')
|
||||||
|
@ -1598,3 +1598,13 @@ class RedfishManagementTestCase(db_base.DbTestCase):
|
|||||||
shared=True) as task:
|
shared=True) as task:
|
||||||
self.assertEqual([],
|
self.assertEqual([],
|
||||||
task.driver.management.get_mac_addresses(task))
|
task.driver.management.get_mac_addresses(task))
|
||||||
|
|
||||||
|
@mock.patch.object(redfish_utils, 'get_enabled_macs', autospec=True)
|
||||||
|
@mock.patch.object(redfish_utils, 'get_system', autospec=True)
|
||||||
|
def test_get_mac_addresses_missing_attr(self, mock_get_system,
|
||||||
|
mock_get_enabled_macs):
|
||||||
|
redfish_utils.get_enabled_macs.side_effect = (sushy.exceptions.
|
||||||
|
MissingAttributeError)
|
||||||
|
with task_manager.acquire(self.context, self.node.uuid,
|
||||||
|
shared=True) as task:
|
||||||
|
self.assertIsNone(task.driver.management.get_mac_addresses(task))
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Fixes the bug where provisioning a Redfish managed node fails if the BMC
|
||||||
|
doesn't support EthernetInterfaces attribute, even if MAC address
|
||||||
|
information is provided manually. This is done by handling of
|
||||||
|
MissingAttributeError sushy exception in get_mac_addresses() method.
|
||||||
|
This fix is needed to successfully provision machines such as Cisco UCSB
|
||||||
|
and UCSX.
|
Loading…
Reference in New Issue
Block a user