summaryrefslogtreecommitdiff
path: root/ironic
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-11-02 02:45:02 +0000
committerGerrit Code Review <review@openstack.org>2020-11-02 02:45:02 +0000
commitb7f0d1230fa049e0a862142e9bb773db5002645d (patch)
treee2cd65787aa9e39ecc8358c67601cf4781c82984 /ironic
parent619c6052aef3f0935e6b4bb9d2df5205859d895c (diff)
parent861e91c8616db39e589589629bd5305909067331 (diff)
downloadironic-b7f0d1230fa049e0a862142e9bb773db5002645d.tar.gz
Merge "Sync boot mode when changing the boot device via Redfish" into stable/victoria
Diffstat (limited to 'ironic')
-rw-r--r--ironic/drivers/modules/redfish/management.py5
-rw-r--r--ironic/tests/unit/drivers/modules/redfish/test_management.py28
2 files changed, 22 insertions, 11 deletions
diff --git a/ironic/drivers/modules/redfish/management.py b/ironic/drivers/modules/redfish/management.py
index e4fec1a2e..1486767e0 100644
--- a/ironic/drivers/modules/redfish/management.py
+++ b/ironic/drivers/modules/redfish/management.py
@@ -33,6 +33,7 @@ from ironic.conductor import task_manager
from ironic.conductor import utils as manager_utils
from ironic.conf import CONF
from ironic.drivers import base
+from ironic.drivers.modules import boot_mode_utils
from ironic.drivers.modules import deploy_utils
from ironic.drivers.modules.redfish import utils as redfish_utils
@@ -222,6 +223,10 @@ class RedfishManagement(base.ManagementInterface):
LOG.error(error_msg)
raise exception.RedfishError(error=error_msg)
+ # Ensure that boot mode is synced with what is set.
+ # Some BMCs reset it to default (BIOS) when changing the boot device.
+ boot_mode_utils.sync_boot_mode(task)
+
def get_boot_device(self, task):
"""Get the current boot device for a node.
diff --git a/ironic/tests/unit/drivers/modules/redfish/test_management.py b/ironic/tests/unit/drivers/modules/redfish/test_management.py
index 827dbf9bb..f592c0865 100644
--- a/ironic/tests/unit/drivers/modules/redfish/test_management.py
+++ b/ironic/tests/unit/drivers/modules/redfish/test_management.py
@@ -101,9 +101,11 @@ class RedfishManagementTestCase(db_base.DbTestCase):
task.driver.management.set_boot_device(task, target)
# Asserts
- fake_system.set_system_boot_options.assert_called_once_with(
- expected, enabled=sushy.BOOT_SOURCE_ENABLED_ONCE)
- mock_get_system.assert_called_once_with(task.node)
+ fake_system.set_system_boot_options.assert_has_calls(
+ [mock.call(expected,
+ enabled=sushy.BOOT_SOURCE_ENABLED_ONCE),
+ mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
+ mock_get_system.assert_called_with(task.node)
self.assertNotIn('redfish_boot_device',
task.node.driver_internal_info)
@@ -126,9 +128,11 @@ class RedfishManagementTestCase(db_base.DbTestCase):
task.driver.management.set_boot_device(
task, boot_devices.PXE, persistent=target)
- fake_system.set_system_boot_options.assert_called_once_with(
- sushy.BOOT_SOURCE_TARGET_PXE, enabled=expected)
- mock_get_system.assert_called_once_with(task.node)
+ fake_system.set_system_boot_options.assert_has_calls(
+ [mock.call(sushy.BOOT_SOURCE_TARGET_PXE,
+ enabled=expected),
+ mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
+ mock_get_system.assert_called_with(task.node)
self.assertNotIn('redfish_boot_device',
task.node.driver_internal_info)
@@ -153,9 +157,10 @@ class RedfishManagementTestCase(db_base.DbTestCase):
task.driver.management.set_boot_device(
task, boot_devices.PXE, persistent=target)
- fake_system.set_system_boot_options.assert_called_once_with(
- sushy.BOOT_SOURCE_TARGET_PXE, enabled=None)
- mock_get_system.assert_called_once_with(task.node)
+ fake_system.set_system_boot_options.assert_has_calls(
+ [mock.call(sushy.BOOT_SOURCE_TARGET_PXE, enabled=None),
+ mock.call(mode=sushy.BOOT_SOURCE_MODE_BIOS)])
+ mock_get_system.assert_called_with(task.node)
# Reset mocks
fake_system.set_system_boot_options.reset_mock()
@@ -220,6 +225,7 @@ class RedfishManagementTestCase(db_base.DbTestCase):
fake_system.set_system_boot_options.side_effect = [
sushy.exceptions.SushyError(),
None,
+ None
]
mock_get_system.return_value = fake_system
with task_manager.acquire(self.context, self.node.uuid,
@@ -230,9 +236,9 @@ class RedfishManagementTestCase(db_base.DbTestCase):
mock.call(sushy.BOOT_SOURCE_TARGET_PXE,
enabled=sushy.BOOT_SOURCE_ENABLED_CONTINUOUS),
mock.call(sushy.BOOT_SOURCE_TARGET_PXE,
- enabled=sushy.BOOT_SOURCE_ENABLED_ONCE),
+ enabled=sushy.BOOT_SOURCE_ENABLED_ONCE)
])
- mock_get_system.assert_called_once_with(task.node)
+ mock_get_system.assert_called_with(task.node)
task.node.refresh()
self.assertEqual(