diff options
-rw-r--r-- | doc/source/admin/drivers/redfish.rst | 6 | ||||
-rw-r--r-- | ironic/conf/redfish.py | 8 | ||||
-rw-r--r-- | ironic/drivers/modules/redfish/boot.py | 17 | ||||
-rw-r--r-- | ironic/tests/unit/drivers/modules/redfish/test_boot.py | 21 | ||||
-rw-r--r-- | releasenotes/notes/add-kernel-params-redfish-72b87075465c87f6.yaml | 9 |
5 files changed, 56 insertions, 5 deletions
diff --git a/doc/source/admin/drivers/redfish.rst b/doc/source/admin/drivers/redfish.rst index cef9dbe76..9c20d6e1b 100644 --- a/doc/source/admin/drivers/redfish.rst +++ b/doc/source/admin/drivers/redfish.rst @@ -176,6 +176,12 @@ If ``[driver_info]/config_via_floppy`` boolean property of the node is set to 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. + .. _Redfish: http://redfish.dmtf.org/ .. _Sushy: https://opendev.org/openstack/sushy .. _TLS: https://en.wikipedia.org/wiki/Transport_Layer_Security diff --git a/ironic/conf/redfish.py b/ironic/conf/redfish.py index b67f51315..70696f7af 100644 --- a/ironic/conf/redfish.py +++ b/ironic/conf/redfish.py @@ -62,8 +62,12 @@ opts = [ 'enabled.')), cfg.StrOpt('kernel_append_params', default='nofb nomodeset vga=normal', - help=_('Additional kernel parameters for baremetal ' - 'Virtual Media boot.')), + help=_('Additional kernel parameters to pass down to the ' + 'instance kernel. These parameters can be consumed by ' + 'the kernel or by the applications by reading ' + '/proc/cmdline. Mind severe cmdline size limit! Can be ' + 'overridden by `instance_info/kernel_append_params` ' + 'property.')), ] diff --git a/ironic/drivers/modules/redfish/boot.py b/ironic/drivers/modules/redfish/boot.py index 8fe1fd527..608975ff8 100644 --- a/ironic/drivers/modules/redfish/boot.py +++ b/ironic/drivers/modules/redfish/boot.py @@ -50,11 +50,19 @@ OPTIONAL_PROPERTIES = { "driver should use virtual media Floppy device " "for passing configuration information to the " "ramdisk. Defaults to False. Optional."), + '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 " + "[redfish]/kernel_append_params ironic " + "option."), 'bootloader': _("URL or Glance UUID of the EFI system partition " "image containing EFI boot loader. This image will be " "used by ironic when building UEFI-bootable ISO " "out of kernel and ramdisk. Required for UEFI " - "boot from partition images.") + "boot from partition images."), + } RESCUE_PROPERTIES = { @@ -431,12 +439,15 @@ class RedfishVirtualMediaBoot(base.BootInterface): "building ISO for %(node)s") % {'node': task.node.uuid}) + i_info = task.node.instance_info + if deploy_utils.get_boot_option(task.node) == "ramdisk": - i_info = task.node.instance_info kernel_params = "root=/dev/ram0 text " kernel_params += i_info.get("ramdisk_kernel_arguments", "") + else: - kernel_params = CONF.redfish.kernel_append_params + kernel_params = i_info.get( + 'kernel_append_params', CONF.redfish.kernel_append_params) if params: kernel_params = ' '.join( diff --git a/ironic/tests/unit/drivers/modules/redfish/test_boot.py b/ironic/tests/unit/drivers/modules/redfish/test_boot.py index 44d337c1a..cb187971a 100644 --- a/ironic/tests/unit/drivers/modules/redfish/test_boot.py +++ b/ironic/tests/unit/drivers/modules/redfish/test_boot.py @@ -398,6 +398,27 @@ class RedfishVirtualMediaBootTestCase(db_base.DbTestCase): self.assertEqual(expected_url, url) @mock.patch.object(redfish_boot.RedfishVirtualMediaBoot, + '_publish_image', autospec=True) + @mock.patch.object(images, 'create_boot_iso', autospec=True) + def test__prepare_iso_image_kernel_params( + 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.instance_info.update(kernel_append_params=kernel_params) + + task.driver.boot._prepare_iso_image( + task, 'http://kernel/img', 'http://ramdisk/img', + bootloader_href=None, root_uuid=task.node.uuid) + + mock_create_boot_iso.assert_called_once_with( + mock.ANY, mock.ANY, 'http://kernel/img', 'http://ramdisk/img', + boot_mode=None, esp_image_href=None, + kernel_params=kernel_params, + root_uuid='1be26c0b-03f2-4d2e-ae87-c02d7f33c123') + + @mock.patch.object(redfish_boot.RedfishVirtualMediaBoot, '_prepare_iso_image', autospec=True) def test__prepare_deploy_iso(self, mock__prepare_iso_image): with task_manager.acquire(self.context, self.node.uuid, diff --git a/releasenotes/notes/add-kernel-params-redfish-72b87075465c87f6.yaml b/releasenotes/notes/add-kernel-params-redfish-72b87075465c87f6.yaml new file mode 100644 index 000000000..f61699a7a --- /dev/null +++ b/releasenotes/notes/add-kernel-params-redfish-72b87075465c87f6.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + Adds ``instance_info/kernel_append_params`` property support to ``redfish`` + hardware type. If given, this property overrides + ``[redfish]/kernel_append_params`` ironic option. The rationale for adding + this property is to allow passing node-specific kernel parameters to instance + kernel. One of the use-cases for this is to pass node static network + configuration to the kernel. |