Merge "Handle internal server errors while configuring secure boot"

This commit is contained in:
Zuul 2023-12-05 20:39:43 +00:00 committed by Gerrit Code Review
commit 5ca5df8217
3 changed files with 20 additions and 3 deletions

View File

@ -1225,8 +1225,16 @@ class RedfishManagement(base.ManagementInterface):
def _wait_for_secure_boot(self, task, sb, state):
# NOTE(dtantsur): at least Dell machines change secure boot status via
# a BIOS configuration job. A reboot is needed to apply it.
sb.refresh(force=True)
if sb.enabled == state:
def _try_refresh():
try:
sb.refresh(force=True)
except sushy.exceptions.ServerSideError:
return False # sushy already does logging, just return
else:
return True
if _try_refresh() and sb.enabled == state:
return
LOG.info('Rebooting node %(node)s to change secure boot state to '
@ -1244,7 +1252,7 @@ class RedfishManagement(base.ManagementInterface):
{'node': task.node.uuid, 'value': state,
'current': sb.enabled})
time.sleep(BOOT_MODE_CONFIG_INTERVAL)
sb.refresh(force=True)
_try_refresh()
if sb.enabled != state:
msg = (_('Timeout reached while waiting for secure boot state '

View File

@ -1745,6 +1745,9 @@ class RedfishManagementTestCase(db_base.DbTestCase):
def side_effect(force):
nonlocal attempts
attempts -= 1
if attempts >= 2:
raise sushy.exceptions.ServerSideError(
"POST", 'img-url', mock.MagicMock())
if attempts <= 0:
fake_sb.enabled = True

View File

@ -0,0 +1,6 @@
---
fixes:
- |
When configuring secure boot via Redfish, internal server errors are now
retried for a longer period than by default, accounting for the SecureBoot
resource unavailability during configuration on some hardware.