diff options
author | Zuul <zuul@review.opendev.org> | 2021-02-15 06:47:46 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2021-02-15 06:47:46 +0000 |
commit | 830a5e5de8ecce77c90bad0f86994ec2410a9315 (patch) | |
tree | 1aa8bcd18e3f5f9c1b4ac1cd3af97210defb81f6 | |
parent | cbccfa2a9ffa29ab1f74fb407973d78aedde1034 (diff) | |
parent | 80017a1d37a1423a721da83b06090f8151a08f0d (diff) | |
download | ironic-830a5e5de8ecce77c90bad0f86994ec2410a9315.tar.gz |
Merge "Fixes issue of redfish firmware update" into stable/victoria
3 files changed, 21 insertions, 2 deletions
diff --git a/ironic/drivers/modules/redfish/management.py b/ironic/drivers/modules/redfish/management.py index 276239433..c4ebd953c 100644 --- a/ironic/drivers/modules/redfish/management.py +++ b/ironic/drivers/modules/redfish/management.py @@ -742,6 +742,8 @@ class RedfishManagement(base.ManagementInterface): skip_current_step=True, polling=True) + deploy_opts = deploy_utils.build_agent_options(task.node) + task.driver.boot.prepare_ramdisk(task, deploy_opts) manager_utils.node_power_action(task, states.REBOOT) return deploy_utils.get_async_step_return_state(task.node) @@ -999,7 +1001,7 @@ class RedfishManagement(base.ManagementInterface): # Only parse the messages if the BMC did not return parsed # messages messages = [] - if not sushy_task.messages[0].message: + if sushy_task.messages and not sushy_task.messages[0].message: sushy_task.parse_messages() messages = [m.message for m in sushy_task.messages] diff --git a/ironic/tests/unit/drivers/modules/redfish/test_management.py b/ironic/tests/unit/drivers/modules/redfish/test_management.py index 98f3b75f7..f9e74d964 100644 --- a/ironic/tests/unit/drivers/modules/redfish/test_management.py +++ b/ironic/tests/unit/drivers/modules/redfish/test_management.py @@ -27,6 +27,7 @@ from ironic.common import states from ironic.conductor import task_manager from ironic.conductor import utils as manager_utils from ironic.drivers.modules import deploy_utils +from ironic.drivers.modules.redfish import boot as redfish_boot from ironic.drivers.modules.redfish import management as redfish_mgmt from ironic.drivers.modules.redfish import utils as redfish_utils from ironic.tests.unit.db import base as db_base @@ -740,6 +741,10 @@ class RedfishManagementTestCase(db_base.DbTestCase): response = task.driver.management.detect_vendor(task) self.assertEqual("Fake GmbH", response) + @mock.patch.object(deploy_utils, 'build_agent_options', + spec_set=True, autospec=True) + @mock.patch.object(redfish_boot.RedfishVirtualMediaBoot, 'prepare_ramdisk', + spec_set=True, autospec=True) @mock.patch.object(manager_utils, 'node_power_action', autospec=True) @mock.patch.object(deploy_utils, 'get_async_step_return_state', autospec=True) @@ -748,7 +753,9 @@ class RedfishManagementTestCase(db_base.DbTestCase): def test_update_firmware(self, mock_get_update_service, mock_set_async_step_flags, mock_get_async_step_return_state, - mock_node_power_action): + mock_node_power_action, mock_prepare, + build_mock): + build_mock.return_value = {'a': 'b'} mock_task_monitor = mock.Mock() mock_task_monitor.task_monitor = '/task/123' mock_update_service = mock.Mock() @@ -1142,6 +1149,7 @@ class RedfishManagementTestCase(db_base.DbTestCase): mock_message = mock.Mock() mock_message.message = 'Firmware upgrade failed' messages = mock.PropertyMock(side_effect=[[mock_message_unparsed], + [mock_message], [mock_message]]) type(mock_sushy_task).messages = messages mock_task_monitor = mock.Mock() diff --git a/releasenotes/notes/fixes-ilo5-redfish-firmware-update-issue-c6dfcd71a2f659a5.yaml b/releasenotes/notes/fixes-ilo5-redfish-firmware-update-issue-c6dfcd71a2f659a5.yaml new file mode 100644 index 000000000..bb114c2bc --- /dev/null +++ b/releasenotes/notes/fixes-ilo5-redfish-firmware-update-issue-c6dfcd71a2f659a5.yaml @@ -0,0 +1,9 @@ +--- +fixes: + - | + Fixes redfish firmware update for ilo5 based hardware by + making necessary changes to check whether sushy_task.messages + is present, since in case of iLo task data does not contain + messages attribute. Also it was not calling prepare_ramdisk() + before rebooting the system to update the firmware which has + been fixed in this patch. |