Add retries to set/get boot device actions

Signed-off-by: Ruslan Aliev <raliev@mirantis.com>
Change-Id: I3c1f12fdad2bbd13503c85ae3ea54bc281f40207
This commit is contained in:
Ruslan Aliev 2023-03-20 16:49:24 -05:00
parent 389db640e4
commit 98f3d886d8
1 changed files with 35 additions and 28 deletions

View File

@ -27,6 +27,8 @@ from drydock_provisioner.drivers.oob.redfish_driver.client import RedfishSession
import drydock_provisioner.error as errors import drydock_provisioner.error as errors
import drydock_provisioner.objects.fields as hd_fields import drydock_provisioner.objects.fields as hd_fields
REDFISH_MAX_ATTEMPTS = 3
class RedfishBaseAction(BaseAction): class RedfishBaseAction(BaseAction):
"""Base action for Redfish executed actions.""" """Base action for Redfish executed actions."""
@ -132,42 +134,47 @@ class SetNodeBoot(RedfishBaseAction):
node_list = self.orchestrator.get_target_nodes(self.task) node_list = self.orchestrator.get_target_nodes(self.task)
for n in node_list: for n in node_list:
self.logger.debug("Setting bootdev to PXE for %s" % n.name)
self.task.add_status_msg( self.task.add_status_msg(
msg="Setting node to PXE boot.", msg="Setting node to PXE boot.",
error=False, error=False,
ctx=n.name, ctx=n.name,
ctx_type='node') ctx_type='node')
bootdev = None for i in range(REDFISH_MAX_ATTEMPTS):
try: bootdev = None
session = self.get_redfish_session(n) self.logger.debug("Setting bootdev to PXE for %s attempt #%s" % (n.name, i + 1))
bootdev = self.exec_redfish_command(n, session, RedfishSession.get_bootdev) try:
if bootdev.get('bootdev', '') != 'Pxe': session = self.get_redfish_session(n)
self.exec_redfish_command(n, session, RedfishSession.set_bootdev, 'Pxe')
bootdev = self.exec_redfish_command(n, session, RedfishSession.get_bootdev) bootdev = self.exec_redfish_command(n, session, RedfishSession.get_bootdev)
session.close_session() if bootdev.get('bootdev', '') != 'Pxe':
except errors.DriverError: self.exec_redfish_command(n, session, RedfishSession.set_bootdev, 'Pxe')
pass time.sleep(1)
bootdev = self.exec_redfish_command(n, session, RedfishSession.get_bootdev)
session.close_session()
except errors.DriverError as e:
self.logger.warning(
"An exception '%s' occurred while attempting to set boot device on %s" % (e, n.name))
if bootdev is not None and (bootdev.get('bootdev', if bootdev is not None and (bootdev.get('bootdev',
'') == 'Pxe'): '') == 'Pxe'):
self.task.add_status_msg( self.task.add_status_msg(
msg="Set bootdev to PXE.", msg="Set bootdev to PXE.",
error=False, error=False,
ctx=n.name, ctx=n.name,
ctx_type='node') ctx_type='node')
self.logger.debug("%s reports bootdev of network" % n.name) self.logger.debug("%s reports bootdev of network" % n.name)
self.task.success(focus=n.name) self.task.success(focus=n.name)
else: break
self.task.add_status_msg(
msg="Unable to set bootdev to PXE.", if i == REDFISH_MAX_ATTEMPTS - 1:
error=True, self.task.add_status_msg(
ctx=n.name, msg="Unable to set bootdev to PXE.",
ctx_type='node') error=True,
self.task.failure(focus=n.name) ctx=n.name,
self.logger.warning( ctx_type='node')
"Unable to set node %s to PXE boot." % (n.name)) self.task.failure(focus=n.name)
self.logger.warning(
"Unable to set node %s to PXE boot." % (n.name))
self.task.set_status(hd_fields.TaskStatus.Complete) self.task.set_status(hd_fields.TaskStatus.Complete)
self.task.save() self.task.save()