diff options
author | Bob Fournier <bfournie@redhat.com> | 2021-03-31 14:58:26 -0400 |
---|---|---|
committer | Dmitry Tantsur <dtantsur@protonmail.com> | 2021-04-01 08:50:18 +0000 |
commit | 4fd099345d662dc82a978e767c0b534de4e44e7d (patch) | |
tree | bb6c3eaca05218bb73fc30d999ff8cdf80cda54e | |
parent | 2466d5e36507a8a83e7937cf0fbf796c5fabc0ef (diff) | |
download | ironic-4fd099345d662dc82a978e767c0b534de4e44e7d.tar.gz |
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
(cherry picked from commit 8bd25a9882e64ae378974e974c39b874d4b9b0e8)
3 files changed, 29 insertions, 12 deletions
diff --git a/ironic/drivers/modules/redfish/management.py b/ironic/drivers/modules/redfish/management.py index 24713fc61..719e5b4f6 100644 --- a/ironic/drivers/modules/redfish/management.py +++ b/ironic/drivers/modules/redfish/management.py @@ -239,7 +239,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. diff --git a/ironic/tests/unit/drivers/modules/redfish/test_management.py b/ironic/tests/unit/drivers/modules/redfish/test_management.py index 1732e5f85..6b70c5037 100644 --- a/ironic/tests/unit/drivers/modules/redfish/test_management.py +++ b/ironic/tests/unit/drivers/modules/redfish/test_management.py @@ -104,8 +104,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) @@ -131,8 +130,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) @@ -159,8 +157,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 @@ -266,11 +263,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() diff --git a/releasenotes/notes/restrict-sync-mode-after-device-to-supermicro-218e8cb57735c685.yaml b/releasenotes/notes/restrict-sync-mode-after-device-to-supermicro-218e8cb57735c685.yaml new file mode 100644 index 000000000..0436b81e6 --- /dev/null +++ b/releasenotes/notes/restrict-sync-mode-after-device-to-supermicro-218e8cb57735c685.yaml @@ -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. |