Add retries to set/get boot device actions
Signed-off-by: Ruslan Aliev <raliev@mirantis.com> Change-Id: I3c1f12fdad2bbd13503c85ae3ea54bc281f40207
This commit is contained in:
parent
389db640e4
commit
98f3d886d8
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user