Merge "Fix iDRAC import configuration missing task handling"
This commit is contained in:
commit
472959c1d7
@ -535,7 +535,29 @@ class DracRedfishManagement(redfish_management.RedfishManagement):
|
||||
"""Checks progress of running import configuration task"""
|
||||
|
||||
node = task.node
|
||||
task_monitor = redfish_utils.get_task_monitor(node, task_monitor_url)
|
||||
try:
|
||||
task_monitor = redfish_utils.get_task_monitor(
|
||||
node, task_monitor_url)
|
||||
except exception.RedfishError as e:
|
||||
error_msg = (_("Failed import configuration task: "
|
||||
"%(task_monitor_url)s. Message: '%(message)s'. "
|
||||
"Most likely this happened because could not find "
|
||||
"the task anymore as it got deleted by iDRAC. "
|
||||
"If not already, upgrade iDRAC firmware to "
|
||||
"5.00.00.00 or later that preserves tasks for "
|
||||
"longer or decrease "
|
||||
"[drac]query_import_config_job_status_interval")
|
||||
% {'task_monitor_url': task_monitor_url,
|
||||
'message': e})
|
||||
log_msg = ("Import configuration task failed for node "
|
||||
"%(node)s. %(error)s" % {'node': task.node.uuid,
|
||||
'error': error_msg})
|
||||
info = node.driver_internal_info
|
||||
info.pop('import_task_monitor_url', None)
|
||||
node.driver_internal_info = info
|
||||
node.save()
|
||||
self._set_failed(task, log_msg, error_msg)
|
||||
return
|
||||
|
||||
if not task_monitor.is_processing:
|
||||
import_task = task_monitor.get_task()
|
||||
|
@ -1088,6 +1088,25 @@ class DracRedfishManagementTestCase(test_utils.BaseDracTest):
|
||||
._check_import_configuration_task
|
||||
.assert_called_once_with(task, '/TaskService/123'))
|
||||
|
||||
@mock.patch.object(redfish_utils, 'get_task_monitor', autospec=True)
|
||||
def test__check_import_configuration_task_missing(
|
||||
self, mock_get_task_monitor):
|
||||
mock_get_task_monitor.side_effect = exception.RedfishError(
|
||||
error='Task not found')
|
||||
self.management._set_success = mock.Mock()
|
||||
self.management._set_failed = mock.Mock()
|
||||
|
||||
with task_manager.acquire(self.context, self.node.uuid,
|
||||
shared=False) as task:
|
||||
self.management._check_import_configuration_task(
|
||||
task, '/TaskService/123')
|
||||
|
||||
self.management._set_failed.assert_called_once_with(
|
||||
task, mock.ANY, mock.ANY)
|
||||
self.management._set_success.assert_not_called()
|
||||
self.assertIsNone(
|
||||
task.node.driver_internal_info.get('import_task_monitor_url'))
|
||||
|
||||
@mock.patch.object(drac_mgmt.LOG, 'debug', autospec=True)
|
||||
@mock.patch.object(redfish_utils, 'get_task_monitor', autospec=True)
|
||||
def test__check_import_configuration_task_still_processing(
|
||||
|
@ -0,0 +1,12 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Fix ``idrac-redfish`` clean/deploy step ``import_configuration`` to handle
|
||||
completed import configuration tasks that are deleted by iDRAC before
|
||||
Ironic has checked task's status.
|
||||
Prior iDRAC firmware version 5.00.00.00 completed tasks are deleted after
|
||||
1 minute in iDRAC Redfish. That is not always sufficient to check for
|
||||
their status in periodic check that runs every minute by default. Before
|
||||
this fix node got stuck in wait mode forever. This is fixed by failing the
|
||||
step with error informing to decrease periodic check interval or upgrade
|
||||
iDRAC firmware if not done already.
|
Loading…
x
Reference in New Issue
Block a user