Restrict syncing of boot mode to Supermicro
The fix for 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. Restrict the syncing of the boot mode to Supermicro. Story: 2008712 Task: 42046 Change-Id: I9f305cb3f33766c1c93cf4347368b1ce025fc635
This commit is contained in:
parent
c9f9c2ca9b
commit
8bd25a9882
@ -239,7 +239,12 @@ class RedfishManagement(base.ManagementInterface):
|
|||||||
|
|
||||||
# Ensure that boot mode is synced with what is set.
|
# Ensure that boot mode is synced with what is set.
|
||||||
# Some BMCs reset it to default (BIOS) when changing the boot device.
|
# 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):
|
def get_boot_device(self, task):
|
||||||
"""Get the current boot device for a node.
|
"""Get the current boot device for a node.
|
||||||
|
@ -127,8 +127,7 @@ class RedfishManagementTestCase(db_base.DbTestCase):
|
|||||||
# Asserts
|
# Asserts
|
||||||
fake_system.set_system_boot_options.assert_has_calls(
|
fake_system.set_system_boot_options.assert_has_calls(
|
||||||
[mock.call(expected,
|
[mock.call(expected,
|
||||||
enabled=sushy.BOOT_SOURCE_ENABLED_ONCE),
|
enabled=sushy.BOOT_SOURCE_ENABLED_ONCE)])
|
||||||
mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
|
|
||||||
mock_get_system.assert_called_with(task.node)
|
mock_get_system.assert_called_with(task.node)
|
||||||
self.assertNotIn('redfish_boot_device',
|
self.assertNotIn('redfish_boot_device',
|
||||||
task.node.driver_internal_info)
|
task.node.driver_internal_info)
|
||||||
@ -154,8 +153,7 @@ class RedfishManagementTestCase(db_base.DbTestCase):
|
|||||||
|
|
||||||
fake_system.set_system_boot_options.assert_has_calls(
|
fake_system.set_system_boot_options.assert_has_calls(
|
||||||
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE,
|
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE,
|
||||||
enabled=expected),
|
enabled=expected)])
|
||||||
mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
|
|
||||||
mock_get_system.assert_called_with(task.node)
|
mock_get_system.assert_called_with(task.node)
|
||||||
self.assertNotIn('redfish_boot_device',
|
self.assertNotIn('redfish_boot_device',
|
||||||
task.node.driver_internal_info)
|
task.node.driver_internal_info)
|
||||||
@ -182,8 +180,7 @@ class RedfishManagementTestCase(db_base.DbTestCase):
|
|||||||
task, boot_devices.PXE, persistent=target)
|
task, boot_devices.PXE, persistent=target)
|
||||||
|
|
||||||
fake_system.set_system_boot_options.assert_has_calls(
|
fake_system.set_system_boot_options.assert_has_calls(
|
||||||
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE, enabled=None),
|
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE, enabled=None)])
|
||||||
mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
|
|
||||||
mock_get_system.assert_called_with(task.node)
|
mock_get_system.assert_called_with(task.node)
|
||||||
|
|
||||||
# Reset mocks
|
# Reset mocks
|
||||||
@ -289,11 +286,15 @@ class RedfishManagementTestCase(db_base.DbTestCase):
|
|||||||
shared=False) as task:
|
shared=False) as task:
|
||||||
task.driver.management.set_boot_device(
|
task.driver.management.set_boot_device(
|
||||||
task, boot_devices.PXE, persistent=True)
|
task, boot_devices.PXE, persistent=True)
|
||||||
|
if vendor == 'SuperMicro':
|
||||||
fake_system.set_system_boot_options.assert_has_calls(
|
fake_system.set_system_boot_options.assert_has_calls(
|
||||||
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE,
|
[mock.call(sushy.BOOT_SOURCE_TARGET_PXE,
|
||||||
enabled=expected),
|
enabled=expected),
|
||||||
mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
|
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
|
# Reset mocks
|
||||||
fake_system.set_system_boot_options.reset_mock()
|
fake_system.set_system_boot_options.reset_mock()
|
||||||
|
@ -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.
|
Loading…
Reference in New Issue
Block a user