Merge "Restrict syncing of boot mode to Supermicro" into stable/ussuri

This commit is contained in:
Zuul 2021-04-20 15:44:26 +00:00 committed by Gerrit Code Review
commit a4280518f3
3 changed files with 29 additions and 12 deletions

View File

@ -231,7 +231,12 @@ class RedfishManagement(base.ManagementInterface):
# Ensure that boot mode is synced with what is set.
# Some BMCs reset it to default (BIOS) when changing the boot device.
boot_mode_utils.sync_boot_mode(task)
# It should only be synced on these vendors as other vendor
# implementations will result in an error
# (see https://storyboard.openstack.org/#!/story/2008712)
vendor = task.node.properties.get('vendor', None)
if vendor and vendor.lower() == 'supermicro':
boot_mode_utils.sync_boot_mode(task)
def get_boot_device(self, task):
"""Get the current boot device for a node.

View File

@ -98,8 +98,7 @@ class RedfishManagementTestCase(db_base.DbTestCase):
# Asserts
fake_system.set_system_boot_options.assert_has_calls(
[mock.call(expected,
enabled=sushy.BOOT_SOURCE_ENABLED_ONCE),
mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
enabled=sushy.BOOT_SOURCE_ENABLED_ONCE)])
mock_get_system.assert_called_with(task.node)
self.assertNotIn('redfish_boot_device',
task.node.driver_internal_info)
@ -125,8 +124,7 @@ class RedfishManagementTestCase(db_base.DbTestCase):
fake_system.set_system_boot_options.assert_has_calls(
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE,
enabled=expected),
mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
enabled=expected)])
mock_get_system.assert_called_with(task.node)
self.assertNotIn('redfish_boot_device',
task.node.driver_internal_info)
@ -153,8 +151,7 @@ class RedfishManagementTestCase(db_base.DbTestCase):
task, boot_devices.PXE, persistent=target)
fake_system.set_system_boot_options.assert_has_calls(
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE, enabled=None),
mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE, enabled=None)])
mock_get_system.assert_called_with(task.node)
# Reset mocks
@ -260,11 +257,15 @@ class RedfishManagementTestCase(db_base.DbTestCase):
shared=False) as task:
task.driver.management.set_boot_device(
task, boot_devices.PXE, persistent=True)
fake_system.set_system_boot_options.assert_has_calls(
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE,
enabled=expected),
mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
if vendor == 'SuperMicro':
fake_system.set_system_boot_options.assert_has_calls(
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE,
enabled=expected),
mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
else:
fake_system.set_system_boot_options.assert_has_calls(
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE,
enabled=expected)])
# Reset mocks
fake_system.set_system_boot_options.reset_mock()

View File

@ -0,0 +1,11 @@
---
fixes:
- |
The fix for story
`2008252 <https://storyboard.openstack.org/#!/story/2008252>`_ synced
the boot mode after changing the boot device because Supermicro nodes
reset the boot mode if not included in the boot device set. However this
can cause a problem on Dell nodes when changing the mode uefi->bios or
bios->uefi, see `story 2008712
<https://storyboard.openstack.org/#!/story/2008712>`_ for details.
Restrict the syncing of the boot mode to Supermicro.