summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2021-03-31 05:19:48 +0000
committerGerrit Code Review <review@openstack.org>2021-03-31 05:19:48 +0000
commitc2ac96458a93aa023132749723592d6e60387b6b (patch)
tree68e27f90367d04216b25c5b84e3df4467957c42c
parent34b2183862fe6efdcd08ff9a56c49dd4a9ae4d40 (diff)
parent4bd1c40bdcf4ef890930c82a5c4adcd4b18e5d99 (diff)
downloadironic-c2ac96458a93aa023132749723592d6e60387b6b.tar.gz
Merge "Always add 'boot_method' vmedia in redfish/ilo vmedia boot"
-rw-r--r--ironic/drivers/modules/ilo/boot.py5
-rw-r--r--ironic/drivers/modules/redfish/boot.py8
-rw-r--r--ironic/tests/unit/drivers/modules/ilo/test_boot.py3
-rw-r--r--ironic/tests/unit/drivers/modules/redfish/test_boot.py2
-rw-r--r--releasenotes/notes/fix-vmedia-boot-method-label-8008f49ace96f1cc.yaml15
5 files changed, 28 insertions, 5 deletions
diff --git a/ironic/drivers/modules/ilo/boot.py b/ironic/drivers/modules/ilo/boot.py
index a5428ad4f..0452418fa 100644
--- a/ironic/drivers/modules/ilo/boot.py
+++ b/ironic/drivers/modules/ilo/boot.py
@@ -453,6 +453,8 @@ class IloVirtualMediaBoot(base.BootInterface):
task.node.driver_internal_info['agent_secret_token']
task.node.save()
+ ramdisk_params['boot_method'] = 'vmedia'
+
deploy_nic_mac = deploy_utils.get_single_nic_with_vif_port_id(task)
if deploy_nic_mac is not None:
ramdisk_params['BOOTIF'] = deploy_nic_mac
@@ -1097,6 +1099,9 @@ class IloUefiHttpsBoot(base.BootInterface):
if deploy_nic_mac is not None:
ramdisk_params['BOOTIF'] = deploy_nic_mac
+ # Signal to IPA that this is a vmedia boot operation.
+ ramdisk_params['boot_method'] = 'vmedia'
+
mode = 'deploy'
if node.provision_state == states.RESCUING:
mode = 'rescue'
diff --git a/ironic/drivers/modules/redfish/boot.py b/ironic/drivers/modules/redfish/boot.py
index fc1c8851a..5b4971484 100644
--- a/ironic/drivers/modules/redfish/boot.py
+++ b/ironic/drivers/modules/redfish/boot.py
@@ -487,6 +487,10 @@ class RedfishVirtualMediaBoot(base.BootInterface):
managers = redfish_utils.get_system(task.node).managers
+ # NOTE(TheJulia): This is a mandatory setting for virtual media
+ # based deployment operations.
+ ramdisk_params['boot_method'] = 'vmedia'
+
if config_via_removable:
removable = _has_vmedia_device(
@@ -494,10 +498,6 @@ class RedfishVirtualMediaBoot(base.BootInterface):
# Prefer USB devices since floppies are outdated
[sushy.VIRTUAL_MEDIA_USBSTICK, sushy.VIRTUAL_MEDIA_FLOPPY])
if removable:
- # NOTE (etingof): IPA will read the device only if
- # we tell it to
- ramdisk_params['boot_method'] = 'vmedia'
-
floppy_ref = image_utils.prepare_floppy_image(
task, params=ramdisk_params)
diff --git a/ironic/tests/unit/drivers/modules/ilo/test_boot.py b/ironic/tests/unit/drivers/modules/ilo/test_boot.py
index 761a910e0..0c496772e 100644
--- a/ironic/tests/unit/drivers/modules/ilo/test_boot.py
+++ b/ironic/tests/unit/drivers/modules/ilo/test_boot.py
@@ -592,7 +592,8 @@ class IloVirtualMediaBootTestCase(test_common.BaseIloTest):
prepare_node_for_deploy_mock.assert_called_once_with(task)
eject_mock.assert_called_once_with(task)
expected_ramdisk_opts = {'a': 'b', 'BOOTIF': '12:34:56:78:90:ab',
- 'ipa-agent-token': mock.ANY}
+ 'ipa-agent-token': mock.ANY,
+ 'boot_method': 'vmedia'}
get_nic_mock.assert_called_once_with(task)
setup_vmedia_mock.assert_called_once_with(task, iso,
expected_ramdisk_opts)
diff --git a/ironic/tests/unit/drivers/modules/redfish/test_boot.py b/ironic/tests/unit/drivers/modules/redfish/test_boot.py
index 27ec9c848..d75712b67 100644
--- a/ironic/tests/unit/drivers/modules/redfish/test_boot.py
+++ b/ironic/tests/unit/drivers/modules/redfish/test_boot.py
@@ -448,6 +448,7 @@ class RedfishVirtualMediaBootTestCase(db_base.DbTestCase):
expected_params = {
'ipa-agent-token': mock.ANY,
'ipa-debug': '1',
+ 'boot_method': 'vmedia',
}
mock_prepare_deploy_iso.assert_called_once_with(
@@ -494,6 +495,7 @@ class RedfishVirtualMediaBootTestCase(db_base.DbTestCase):
expected_params = {
'ipa-agent-token': mock.ANY,
+ 'boot_method': 'vmedia',
}
mock_prepare_deploy_iso.assert_called_once_with(
diff --git a/releasenotes/notes/fix-vmedia-boot-method-label-8008f49ace96f1cc.yaml b/releasenotes/notes/fix-vmedia-boot-method-label-8008f49ace96f1cc.yaml
new file mode 100644
index 000000000..1edcba1af
--- /dev/null
+++ b/releasenotes/notes/fix-vmedia-boot-method-label-8008f49ace96f1cc.yaml
@@ -0,0 +1,15 @@
+---
+security:
+ - |
+ Fixes an issue where ironic was not properly labeling dynamicly built
+ virtual media ramdisks with the signifier flag so the ramdisk understands
+ it was booted from virtual media.
+fixes:
+ - |
+ Fixes the missing ``boot_method`` ramdisk parameter for dynamicly build
+ virtual media payloads. This value must be set to ``vmedia`` for the
+ ramdisk running on virtual media to understand it is executing from
+ virtual media. This was fixed for cases where it is used with the
+ ``redfish-virtual-media`` based boot interfaces as well as the
+ ``ilo-virtual-media`` boot interface, which is where dynamic virtual media
+ deployment/cleaning ramdisk generation is supported.