)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5a829a943ab700b1d65f83e169e98a8b5cae9852","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"aa1cdd8d_adbc858f","updated":"2026-06-10 17:40:00.000000000","message":"This is an operator-facing change and needs a release note.","commit_id":"21d4f8511829f52785eb333692eac3b56bf0bc65"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"dae836a637eda9b53d6abeeb3af3434ec25c62fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2830ca5c_a5275747","in_reply_to":"aa1cdd8d_adbc858f","updated":"2026-06-29 22:20:38.000000000","message":"Done","commit_id":"21d4f8511829f52785eb333692eac3b56bf0bc65"}],"ironic/conf/types.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"523e4ea25371a4e5329f801c7438699dbabf6acf","unresolved":true,"context_lines":[{"line_number":78,"context_line":"            raise ValueError("},{"line_number":79,"context_line":"                \u0027Value must be a valid kernel parameter string. Current value \u0027"},{"line_number":80,"context_line":"                \u0027is invalid. See \u0027"},{"line_number":81,"context_line":"                \u0027ironic.common.kernel_parameters.KERNEL_PARAMETER_GRAMMAR \u0027"},{"line_number":82,"context_line":"                \u0027for more information.\u0027)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":2,"id":"05cd6f1e_8ef7afd8","line":81,"updated":"2026-06-10 17:29:46.000000000","message":"This needs to reference something other than our own code. Perhaps enumerate the allowed grammar here or generically refer to Ironic documentation?","commit_id":"21d4f8511829f52785eb333692eac3b56bf0bc65"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"f6aac1a9959f623e02edbdd2152df57fa67422dc","unresolved":true,"context_lines":[{"line_number":78,"context_line":"            raise ValueError("},{"line_number":79,"context_line":"                \u0027Value must be a valid kernel parameter string. Current value \u0027"},{"line_number":80,"context_line":"                \u0027is invalid. See \u0027"},{"line_number":81,"context_line":"                \u0027ironic.common.kernel_parameters.KERNEL_PARAMETER_GRAMMAR \u0027"},{"line_number":82,"context_line":"                \u0027for more information.\u0027)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":2,"id":"e402a365_2bd325d1","line":81,"in_reply_to":"05cd6f1e_8ef7afd8","updated":"2026-06-15 12:39:02.000000000","message":"Common practice is to include the valid list in the error message.","commit_id":"21d4f8511829f52785eb333692eac3b56bf0bc65"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"ada7628bb7b30301939502d8aaf4103e07d8217c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            raise ValueError("},{"line_number":79,"context_line":"                \u0027Value must be a valid kernel parameter string. Current value \u0027"},{"line_number":80,"context_line":"                \u0027is invalid. See \u0027"},{"line_number":81,"context_line":"                \u0027ironic.common.kernel_parameters.KERNEL_PARAMETER_GRAMMAR \u0027"},{"line_number":82,"context_line":"                \u0027for more information.\u0027)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":2,"id":"da782b6c_76a62d57","line":81,"in_reply_to":"e402a365_2bd325d1","updated":"2026-06-29 22:18:33.000000000","message":"Done","commit_id":"21d4f8511829f52785eb333692eac3b56bf0bc65"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"2116499d084bbb0b3555c84299b494ebb48610f8","unresolved":true,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            kp.KernelCommandLine.parse(value)"},{"line_number":77,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":78,"context_line":"            raise ValueError("},{"line_number":79,"context_line":"                \u0027Value must be a valid kernel parameter string. Current value \u0027"},{"line_number":80,"context_line":"                \u0027is invalid. General format is an arbitrary number of kernel \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"ca5c3931_50e06a24","line":77,"updated":"2026-06-30 00:56:24.000000000","message":"We could only raise an error if [conductor]disable_kernel_parameter_parsing \u003d True. This would give operators a safety-relief if they upgrade and hit a parse error that cannot be immediately fixed. Something like the below message can be logged as a warning when disable_kernel_parameter_parsing \u003d False.","commit_id":"75c4fa72105881bfe219954aef5853f5539cbd3e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e3792692a158b6de8c77607111507fdfb800b0f6","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            kp.KernelCommandLine.parse(value)"},{"line_number":77,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":78,"context_line":"            raise ValueError("},{"line_number":79,"context_line":"                \u0027Value must be a valid kernel parameter string. Current value \u0027"},{"line_number":80,"context_line":"                \u0027is invalid. General format is an arbitrary number of kernel \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"008e9747_4af30e9f","line":77,"in_reply_to":"ca5c3931_50e06a24","updated":"2026-07-07 18:00:21.000000000","message":"Done","commit_id":"75c4fa72105881bfe219954aef5853f5539cbd3e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ad59ff08e20a9d77282e36264054477825aff40c","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        # NOTE(clif): We can\u0027t rely on this configuration variable or group"},{"line_number":80,"context_line":"        # existing during initial definition of options, particularly during"},{"line_number":81,"context_line":"        # validation of defaults. This short-circuits to assuming parsing"},{"line_number":82,"context_line":"        # is disabled if we can\u0027t retrieve the option."},{"line_number":83,"context_line":"        except cfg.NoSuchOptError:"},{"line_number":84,"context_line":"            return value"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"061a8fad_3a18b776","line":82,"updated":"2026-07-01 21:33:40.000000000","message":"We talked at some length about this behavior in IRC ( https://meetings.opendev.org/irclogs/%23openstack-ironic/%23openstack-ironic.2026-07-01.log.html#openstack-ironic.2026-07-01.log.html#t2026-07-01T20:44:44 )\n\nThe summary is:\n- _check_defaults() in oslo_config, at import time, will hit the exceptional case here, which is OK -- our default is valid\n- Until the conf is accessed (e.g. CONF.inspector.kernel_param) it is not converted to it\u0027s type\n- This means that this will -- for user supplied values -- always use the proper version of CONF.conductor.disable_kernel_parameter_parsing\n- Sadly this also means this will not raise until it\u0027s used -- much later in the startup process than we want\n- ^^ is undesirable behavior for this case and for others we are using config type validation for. We should tackle this as a bug, either in a patch in this stack or separately\n\nCan we document, specifically, the case where this fires (when evaluating defaults) and note that ConfigType.__call__() is not called until CONF.var.is_used. Also either fix or file a bug about the late-failure case for ExplicitAbsolutePath (and this shouldn\u0027t merge until KernelParameterString will fail on startup instead of late).","commit_id":"1c7718aa2c80468c6a4a762af822e640e99a968d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"bbf03998df310c9f17dd8cff0445598975ef518e","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        # NOTE(clif): We can\u0027t rely on this configuration variable or group"},{"line_number":80,"context_line":"        # existing during initial definition of options, particularly during"},{"line_number":81,"context_line":"        # validation of defaults. This short-circuits to assuming parsing"},{"line_number":82,"context_line":"        # is disabled if we can\u0027t retrieve the option."},{"line_number":83,"context_line":"        except cfg.NoSuchOptError:"},{"line_number":84,"context_line":"            return value"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"b7f9a33a_5d189b05","line":82,"in_reply_to":"061a8fad_3a18b776","updated":"2026-07-01 21:40:49.000000000","message":"The previous comment is all wrong. There\u0027s still an ordering issue.\n\nin oslo.config: ConfigOpts._parse_config_files calls ConfigOpts._validate_cli_options which calls ConfigOpts._convert_value(value, opt) for all valid opt, group pairs\n\nThis means we do have to consider and ensure ordering is sane for loading (but also, we don\u0027t have the late evaluation problem either)","commit_id":"1c7718aa2c80468c6a4a762af822e640e99a968d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e3792692a158b6de8c77607111507fdfb800b0f6","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        # NOTE(clif): We can\u0027t rely on this configuration variable or group"},{"line_number":80,"context_line":"        # existing during initial definition of options, particularly during"},{"line_number":81,"context_line":"        # validation of defaults. This short-circuits to assuming parsing"},{"line_number":82,"context_line":"        # is disabled if we can\u0027t retrieve the option."},{"line_number":83,"context_line":"        except cfg.NoSuchOptError:"},{"line_number":84,"context_line":"            return value"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"0c942054_d91fad15","line":82,"in_reply_to":"b7f9a33a_5d189b05","updated":"2026-07-07 18:00:21.000000000","message":"Done","commit_id":"1c7718aa2c80468c6a4a762af822e640e99a968d"}],"ironic/tests/unit/common/test_config.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e3792692a158b6de8c77607111507fdfb800b0f6","unresolved":true,"context_lines":[{"line_number":21,"context_line":"        # options should validate."},{"line_number":22,"context_line":"        self.assertFalse(CONF.conductor.disable_kernel_parameter_parsing)"},{"line_number":23,"context_line":"        self.assertIsNone("},{"line_number":24,"context_line":"            config.validate_opts_using_custom_ironic_config_types())"}],"source_content_type":"text/x-python","patch_set":5,"id":"a299972a_b6d150e2","line":24,"updated":"2026-07-07 18:00:21.000000000","message":"If I put something bad in a kernel command line, I end up in a situation where literally (almost) every test is failing. We can leave this in if we want, but I think it\u0027s not needed.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\nTotals\n\u003d\u003d\u003d\u003d\u003d\u003d\nRan: 10454 tests in 10.1874 sec.\n - Passed: 109\n - Skipped: 11\n - Expected Fail: 0\n - Unexpected Success: 0\n - Failed: 10334","commit_id":"5521fc43072449bfa3d743d382a052a3515a03fe"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"d15deae9ddee6f310b8bb15859bdb4d44e30aa60","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        # options should validate."},{"line_number":22,"context_line":"        self.assertFalse(CONF.conductor.disable_kernel_parameter_parsing)"},{"line_number":23,"context_line":"        self.assertIsNone("},{"line_number":24,"context_line":"            config.validate_opts_using_custom_ironic_config_types())"}],"source_content_type":"text/x-python","patch_set":5,"id":"7e6533cb_6dbd8ff6","line":24,"in_reply_to":"a299972a_b6d150e2","updated":"2026-07-27 16:41:45.000000000","message":"Acknowledged","commit_id":"5521fc43072449bfa3d743d382a052a3515a03fe"}],"releasenotes/notes/kernel-parameter-add-config-type-a34f3a9dfe4c4bb5.yaml":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"2116499d084bbb0b3555c84299b494ebb48610f8","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    `inspector.extra_kernel_params`, `pxe.kernel_append_params`, and"},{"line_number":7,"context_line":"    `redfish.extra_kernel_params`. These options will now be validated by"},{"line_number":8,"context_line":"    attempting to parse them as kernel parameters. Options failing parsing will"},{"line_number":9,"context_line":"    must be corrected by the operator."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"dc7108de_a1c10a00","line":9,"updated":"2026-06-30 00:56:24.000000000","message":"If enforcement is determined by conductor.disable_kernel_parameter_parsing \u003d True then this can be mentioned in the release note","commit_id":"75c4fa72105881bfe219954aef5853f5539cbd3e"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"d15deae9ddee6f310b8bb15859bdb4d44e30aa60","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    `inspector.extra_kernel_params`, `pxe.kernel_append_params`, and"},{"line_number":7,"context_line":"    `redfish.extra_kernel_params`. These options will now be validated by"},{"line_number":8,"context_line":"    attempting to parse them as kernel parameters. Options failing parsing will"},{"line_number":9,"context_line":"    must be corrected by the operator."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"6e2d7606_01bb8ff5","line":9,"in_reply_to":"56ce098f_68486d0f","updated":"2026-07-27 16:41:45.000000000","message":"Done","commit_id":"75c4fa72105881bfe219954aef5853f5539cbd3e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e3792692a158b6de8c77607111507fdfb800b0f6","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    `inspector.extra_kernel_params`, `pxe.kernel_append_params`, and"},{"line_number":7,"context_line":"    `redfish.extra_kernel_params`. These options will now be validated by"},{"line_number":8,"context_line":"    attempting to parse them as kernel parameters. Options failing parsing will"},{"line_number":9,"context_line":"    must be corrected by the operator."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"56ce098f_68486d0f","line":9,"in_reply_to":"dc7108de_a1c10a00","updated":"2026-07-07 18:00:21.000000000","message":"++ Please do this","commit_id":"75c4fa72105881bfe219954aef5853f5539cbd3e"}]}
