summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/source/admin/drivers/redfish.rst19
-rw-r--r--ironic/drivers/modules/ilo/boot.py12
-rw-r--r--ironic/drivers/modules/image_utils.py5
-rw-r--r--ironic/tests/unit/drivers/modules/ilo/test_boot.py24
-rw-r--r--ironic/tests/unit/drivers/modules/test_image_utils.py23
-rw-r--r--releasenotes/notes/redfish-append-params-4d28d922484c2731.yaml14
6 files changed, 73 insertions, 24 deletions
diff --git a/doc/source/admin/drivers/redfish.rst b/doc/source/admin/drivers/redfish.rst
index b0f5c7ea8..cff72a48f 100644
--- a/doc/source/admin/drivers/redfish.rst
+++ b/doc/source/admin/drivers/redfish.rst
@@ -193,10 +193,21 @@ place into on a FAT image, then insert the image into node's virtual floppy
drive.
When booting over PXE or virtual media, and user instance requires some
-specific kernel configuration, ``[instance_info]/kernel_append_params``
-property can be used to pass user-specified kernel command line parameters.
-For ramdisk kernel, ``[instance_info]/kernel_append_params`` property serves
-the same purpose.
+specific kernel configuration, the node's
+``instance_info[kernel_append_params]`` or
+``driver_info[kernel_append_params]`` properties can be used to pass
+user-specified kernel command line parameters.
+
+.. code-block:: bash
+
+ baremetal node set node-0 \
+ --driver-info kernel_append_params="nofb nomodeset vga=normal"
+
+.. note::
+ The ``driver_info`` field is supported starting with the Xena release.
+
+For ramdisk boot, the ``instance_info[ramdisk_kernel_arguments]`` property
+serves the same purpose.
Pre-built ISO images
~~~~~~~~~~~~~~~~~~~~
diff --git a/ironic/drivers/modules/ilo/boot.py b/ironic/drivers/modules/ilo/boot.py
index 0452418fa..86f7d7006 100644
--- a/ironic/drivers/modules/ilo/boot.py
+++ b/ironic/drivers/modules/ilo/boot.py
@@ -79,12 +79,12 @@ OPTIONAL_PROPERTIES = {
"iLO.")
}
KERNEL_PARAM_PROPERTIES = {
- 'ilo_kernel_append_params': _("Additional kernel parameters to pass down "
- "to instance kernel. These parameters can "
- "be consumed by the kernel or by the "
- "applications by reading /proc/cmdline. "
- "Mind severe cmdline size limit. Overrides "
- "[ilo]/kernel_append_params ironic option.")
+ 'kernel_append_params': _("Additional kernel parameters to pass down "
+ "to instance kernel. These parameters can "
+ "be consumed by the kernel or by the "
+ "applications by reading /proc/cmdline. "
+ "Mind severe cmdline size limit. Overrides "
+ "[ilo]/kernel_append_params ironic option.")
}
COMMON_PROPERTIES = REQUIRED_PROPERTIES
VMEDIA_OPTIONAL_PROPERTIES = OPTIONAL_PROPERTIES.copy()
diff --git a/ironic/drivers/modules/image_utils.py b/ironic/drivers/modules/image_utils.py
index 37c59ecc3..250449ea4 100644
--- a/ironic/drivers/modules/image_utils.py
+++ b/ironic/drivers/modules/image_utils.py
@@ -33,6 +33,7 @@ from ironic.common import utils
from ironic.conf import CONF
from ironic.drivers.modules import boot_mode_utils
from ironic.drivers.modules import deploy_utils
+from ironic.drivers import utils as driver_utils
LOG = log.getLogger(__name__)
@@ -433,7 +434,6 @@ def _prepare_iso_image(task, kernel_href, ramdisk_href,
{"boot_iso": base_iso})
img_handler = ImageHandler(task.node.driver)
- k_param = img_handler.kernel_params
i_info = task.node.instance_info
@@ -447,7 +447,8 @@ def _prepare_iso_image(task, kernel_href, ramdisk_href,
kernel_params = None
else:
- kernel_params = i_info.get('kernel_append_params', k_param)
+ kernel_params = driver_utils.get_kernel_append_params(
+ task.node, default=img_handler.kernel_params)
if params and not base_iso:
kernel_params = ' '.join(
diff --git a/ironic/tests/unit/drivers/modules/ilo/test_boot.py b/ironic/tests/unit/drivers/modules/ilo/test_boot.py
index 81047956f..6b7cfe7c8 100644
--- a/ironic/tests/unit/drivers/modules/ilo/test_boot.py
+++ b/ironic/tests/unit/drivers/modules/ilo/test_boot.py
@@ -54,9 +54,9 @@ class IloBootCommonMethodsTestCase(test_common.BaseIloTest):
def test_parse_driver_info_deploy_iso(self):
self.node.driver_info['ilo_deploy_iso'] = 'deploy-iso'
- self.node.driver_info['ilo_kernel_append_params'] = 'kernel-param'
+ self.node.driver_info['kernel_append_params'] = 'kernel-param'
expected_driver_info = {'ilo_bootloader': None,
- 'ilo_kernel_append_params': 'kernel-param',
+ 'kernel_append_params': 'kernel-param',
'ilo_deploy_iso': 'deploy-iso'}
actual_driver_info = ilo_boot.parse_driver_info(self.node)
@@ -65,7 +65,7 @@ class IloBootCommonMethodsTestCase(test_common.BaseIloTest):
def test_parse_driver_info_rescue_iso(self):
self.node.driver_info['ilo_rescue_iso'] = 'rescue-iso'
expected_driver_info = {'ilo_bootloader': None,
- 'ilo_kernel_append_params': None,
+ 'kernel_append_params': None,
'ilo_rescue_iso': 'rescue-iso'}
actual_driver_info = ilo_boot.parse_driver_info(self.node, 'rescue')
@@ -75,11 +75,11 @@ class IloBootCommonMethodsTestCase(test_common.BaseIloTest):
self.node.driver_info['ilo_deploy_kernel'] = 'kernel'
self.node.driver_info['ilo_deploy_ramdisk'] = 'ramdisk'
self.node.driver_info['ilo_bootloader'] = 'bootloader'
- self.node.driver_info['ilo_kernel_append_params'] = 'kernel-param'
+ self.node.driver_info['kernel_append_params'] = 'kernel-param'
expected_driver_info = {'ilo_deploy_kernel': 'kernel',
'ilo_deploy_ramdisk': 'ramdisk',
'ilo_bootloader': 'bootloader',
- 'ilo_kernel_append_params': 'kernel-param'}
+ 'kernel_append_params': 'kernel-param'}
actual_driver_info = ilo_boot.parse_driver_info(self.node)
self.assertEqual(expected_driver_info, actual_driver_info)
@@ -91,7 +91,7 @@ class IloBootCommonMethodsTestCase(test_common.BaseIloTest):
expected_driver_info = {'ilo_rescue_kernel': 'kernel',
'ilo_rescue_ramdisk': 'ramdisk',
'ilo_bootloader': 'bootloader',
- 'ilo_kernel_append_params': None}
+ 'kernel_append_params': None}
actual_driver_info = ilo_boot.parse_driver_info(self.node, 'rescue')
self.assertEqual(expected_driver_info, actual_driver_info)
@@ -103,7 +103,7 @@ class IloBootCommonMethodsTestCase(test_common.BaseIloTest):
expected_driver_info = {'ilo_deploy_kernel': 'kernel',
'ilo_deploy_ramdisk': 'ramdisk',
'ilo_bootloader': 'bootloader',
- 'ilo_kernel_append_params': None}
+ 'kernel_append_params': None}
actual_driver_info = ilo_boot.parse_driver_info(self.node)
self.assertEqual(expected_driver_info, actual_driver_info)
@@ -116,7 +116,7 @@ class IloBootCommonMethodsTestCase(test_common.BaseIloTest):
expected_driver_info = {'ilo_rescue_kernel': 'kernel',
'ilo_rescue_ramdisk': 'ramdisk',
'ilo_bootloader': 'bootloader',
- 'ilo_kernel_append_params': None}
+ 'kernel_append_params': None}
actual_driver_info = ilo_boot.parse_driver_info(self.node, 'rescue')
self.assertEqual(expected_driver_info, actual_driver_info)
@@ -128,7 +128,7 @@ class IloBootCommonMethodsTestCase(test_common.BaseIloTest):
expected_driver_info = {'ilo_deploy_kernel': 'kernel',
'ilo_deploy_ramdisk': 'ramdisk',
'ilo_bootloader': None,
- 'ilo_kernel_append_params': None}
+ 'kernel_append_params': None}
actual_driver_info = ilo_boot.parse_driver_info(self.node)
self.assertEqual(expected_driver_info, actual_driver_info)
@@ -1546,7 +1546,7 @@ class IloUefiHttpsBootTestCase(db_base.DbTestCase):
'ilo_deploy_kernel': 'deploy-kernel',
'ilo_deploy_ramdisk': 'deploy-ramdisk',
'ilo_bootloader': 'bootloader',
- 'ilo_kernel_append_params': 'nofb nomodeset vga=normal'
+ 'kernel_append_params': 'nofb nomodeset vga=normal'
}
deploy_info.update({'ilo_username': 'admin',
@@ -1577,7 +1577,7 @@ class IloUefiHttpsBootTestCase(db_base.DbTestCase):
driver_info['ilo_rescue_ramdisk'] = 'rescue-ramdisk'
driver_info['ilo_bootloader'] = 'bootloader'
driver_info['ilo_add_certificates'] = 'false'
- driver_info['ilo_kernel_append_params'] = 'kernel-param'
+ driver_info['kernel_append_params'] = 'kernel-param'
driver_info['dummy_key'] = 'dummy-value'
self.node.driver_info = driver_info
self.node.save()
@@ -1588,7 +1588,7 @@ class IloUefiHttpsBootTestCase(db_base.DbTestCase):
'ilo_rescue_kernel': 'rescue-kernel',
'ilo_rescue_ramdisk': 'rescue-ramdisk',
'ilo_bootloader': 'bootloader',
- 'ilo_kernel_append_params': 'kernel-param'
+ 'kernel_append_params': 'kernel-param'
}
deploy_info.update({'ilo_username': 'admin',
diff --git a/ironic/tests/unit/drivers/modules/test_image_utils.py b/ironic/tests/unit/drivers/modules/test_image_utils.py
index c527c53dc..1e105a08f 100644
--- a/ironic/tests/unit/drivers/modules/test_image_utils.py
+++ b/ironic/tests/unit/drivers/modules/test_image_utils.py
@@ -553,6 +553,29 @@ class RedfishImageUtilsTestCase(db_base.DbTestCase):
root_uuid='1be26c0b-03f2-4d2e-ae87-c02d7f33c123',
base_iso='/path/to/baseiso', inject_files=None)
+ @mock.patch.object(image_utils.ImageHandler, 'publish_image',
+ autospec=True)
+ @mock.patch.object(images, 'create_boot_iso', autospec=True)
+ def test__prepare_iso_image_kernel_params_driver_info(
+ self, mock_create_boot_iso, mock_publish_image):
+ with task_manager.acquire(self.context, self.node.uuid,
+ shared=True) as task:
+ kernel_params = 'network-config=base64-cloudinit-blob'
+
+ task.node.driver_info['kernel_append_params'] = kernel_params
+
+ image_utils._prepare_iso_image(
+ task, 'http://kernel/img', 'http://ramdisk/img',
+ bootloader_href=None, root_uuid=task.node.uuid,
+ base_iso='/path/to/baseiso')
+
+ mock_create_boot_iso.assert_called_once_with(
+ mock.ANY, mock.ANY, 'http://kernel/img', 'http://ramdisk/img',
+ boot_mode='bios', esp_image_href=None,
+ kernel_params=kernel_params,
+ root_uuid='1be26c0b-03f2-4d2e-ae87-c02d7f33c123',
+ base_iso='/path/to/baseiso', inject_files=None)
+
def test__prepare_iso_image_bootable_iso(self):
with task_manager.acquire(self.context, self.node.uuid,
shared=True) as task:
diff --git a/releasenotes/notes/redfish-append-params-4d28d922484c2731.yaml b/releasenotes/notes/redfish-append-params-4d28d922484c2731.yaml
new file mode 100644
index 000000000..1f3872934
--- /dev/null
+++ b/releasenotes/notes/redfish-append-params-4d28d922484c2731.yaml
@@ -0,0 +1,14 @@
+---
+features:
+ - |
+ The ``redfish-virtual-media``, ``ilo-virtual-media`` and
+ ``idrac-redfish-virtual-media`` boot interfaces now support
+ ``kernel_append_params`` not only in the node's ``instance_info``, but also
+ ``driver_info``. This only applies when the boot image is built from
+ a kernel and an initramfs, not when a pre-built ISO is used.
+deprecations:
+ - |
+ The ``ilo-virtual-media`` boot interface has previously declared support
+ for the ``ilo_kernel_append_params`` option in ``driver_info``. It has
+ never been implemented in reality and has been replaces by the new
+ ``kernel_append_params``.