)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b68c02957fe001941081339e017fefc1c83720e0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4dd71e4b_35fb793f","updated":"2026-09-15 15:49:50.000000000","message":"-1 for discussion/idea purposes. Overall I\u0027m a little concerned by the automatic model still requiring configuration and would really prefer to see this leverage or be able to be leveraged by deploy_steps if at all possible.","commit_id":"2bf99b765cae0d3f0cbf56545bf539edf38eff6a"},{"author":{"_account_id":39280,"name":"Roussarie","display_name":"Roussarie","email":"laurent.roussarie@orange.com","username":"LRoussarie"},"change_message_id":"3ff1626bf6f668b28510369f0b1a2b5e7f545db6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cf841293_c15b7c08","updated":"2026-09-22 12:47:12.000000000","message":"Thanks you for the review.\nWith PS2, the whole design moves to the deploy step model you suggested:\nan explicit opt-in through a deploy template / deploy steps,\nno per-node flag, no network-interface restriction, boot parameters detected\non the image by the ramdisk, graceful fallback with an older agent.","commit_id":"6fe930b26f7193684d95f748e9a01e3e2e63eda3"}],"specs/approved/kexec-boot-support.rst":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b68c02957fe001941081339e017fefc1c83720e0","unresolved":true,"context_lines":[{"line_number":66,"context_line":"Scope"},{"line_number":67,"context_line":"-----"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"This spec is scoped to node provisioning using ``network_interface \u003d noop``."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"All other network interfaces are **out of scope**: a node configured with"},{"line_number":72,"context_line":"any of them falls back to the standard power cycle."}],"source_content_type":"text/x-rst","patch_set":1,"id":"6a7aec49_ef10530b","line":69,"updated":"2026-09-15 15:49:50.000000000","message":"I guess I\u0027m not super comfortable shifting entirely into this automatically if network_interface is set to noop. That locks out the feature from everyone else as well.\n\nI *think* one possible path is to present an alternate path where Ironic can still switch out the networks, but it becomes an \"opt in\" step which a deployer can ask for using a deploy template where an operator has made an explicit \"opt-in\" to understand the security trade-off and get the capability as well. A step would need to be ironic-side to hold the business logic on invocation as well, i.e. handle an older agent gracefully, but a deploy template becomes much more explicit.","commit_id":"2bf99b765cae0d3f0cbf56545bf539edf38eff6a"},{"author":{"_account_id":39280,"name":"Roussarie","display_name":"Roussarie","email":"laurent.roussarie@orange.com","username":"LRoussarie"},"change_message_id":"3ff1626bf6f668b28510369f0b1a2b5e7f545db6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"Scope"},{"line_number":67,"context_line":"-----"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"This spec is scoped to node provisioning using ``network_interface \u003d noop``."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"All other network interfaces are **out of scope**: a node configured with"},{"line_number":72,"context_line":"any of them falls back to the standard power cycle."}],"source_content_type":"text/x-rst","patch_set":1,"id":"788e3374_5c3db43e","line":69,"in_reply_to":"6a7aec49_ef10530b","updated":"2026-09-22 12:47:12.000000000","message":"Done in PS2.\nThe design now uses a deploy step with the opt-in mechanism you describe:\na `kexec_boot` deploy step (priority 0, disabled by default),\nrequested through a deploy template (CUSTOM_KEXEC_BOOT trait),\nor through the deploy_steps of the deploy request.\nThe business logic lives in the ironic conductor side: an older agent makes\nthe step fall back to the normal power cycle.\nThe step is not restricted to `noop`.\nSee \"Proposed change\" and the \"Scope\" paragraph","commit_id":"2bf99b765cae0d3f0cbf56545bf539edf38eff6a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b68c02957fe001941081339e017fefc1c83720e0","unresolved":true,"context_lines":[{"line_number":169,"context_line":"    holding the kernel and the initrd"},{"line_number":170,"context_line":"    (e.g. ``UUID\u003dad86a415-2967-49fe-8d30-b97887a6ae7c`` or ``/dev/sda2``)."},{"line_number":171,"context_line":"  - ``kexec_cmdline``: kernel command line string"},{"line_number":172,"context_line":"    (e.g. ``root\u003dLABEL\u003dcloudimg-rootfs ro console\u003dttyS0,115200``)."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"* ``AgentDeploy.validate()`` raises ``MissingParameterValue`` when kexec"},{"line_number":175,"context_line":"  is enabled for the node but any of the four parameters is missing, so"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7345034c_b8016fb5","line":172,"range":{"start_line":172,"start_character":42,"end_line":172,"end_character":62},"updated":"2026-09-15 15:49:50.000000000","message":"tip: you don\u0027t want to invoke serial consoles. It chews cpu0 interrupts :)","commit_id":"2bf99b765cae0d3f0cbf56545bf539edf38eff6a"},{"author":{"_account_id":39280,"name":"Roussarie","display_name":"Roussarie","email":"laurent.roussarie@orange.com","username":"LRoussarie"},"change_message_id":"3ff1626bf6f668b28510369f0b1a2b5e7f545db6","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    holding the kernel and the initrd"},{"line_number":170,"context_line":"    (e.g. ``UUID\u003dad86a415-2967-49fe-8d30-b97887a6ae7c`` or ``/dev/sda2``)."},{"line_number":171,"context_line":"  - ``kexec_cmdline``: kernel command line string"},{"line_number":172,"context_line":"    (e.g. ``root\u003dLABEL\u003dcloudimg-rootfs ro console\u003dttyS0,115200``)."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"* ``AgentDeploy.validate()`` raises ``MissingParameterValue`` when kexec"},{"line_number":175,"context_line":"  is enabled for the node but any of the four parameters is missing, so"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c26b9555_74d95846","line":172,"range":{"start_line":172,"start_character":42,"end_line":172,"end_character":62},"in_reply_to":"7345034c_b8016fb5","updated":"2026-09-22 12:47:12.000000000","message":"Done in PS2 with a new example.","commit_id":"2bf99b765cae0d3f0cbf56545bf539edf38eff6a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b68c02957fe001941081339e017fefc1c83720e0","unresolved":true,"context_lines":[{"line_number":327,"context_line":"     |                                    |                                  |"},{"line_number":328,"context_line":"     |  [prepare_instance_boot]           |                                  |"},{"line_number":329,"context_line":"     |-- set boot device: disk, persistent (via BMC) -----------------------\u003e|"},{"line_number":330,"context_line":"     |                                    |                                  |"},{"line_number":331,"context_line":"     |  [tear_down_agent]                 |                                  |"},{"line_number":332,"context_line":"     |  _should_use_kexec() -\u003e True       |                                  |"},{"line_number":333,"context_line":"     |                                    |                                  |"}],"source_content_type":"text/x-rst","patch_set":1,"id":"b58221b1_a3acb8d0","line":330,"updated":"2026-09-15 15:49:50.000000000","message":"We likely need to ensure we still do UEFI bootloader pathing setup from the existing flow, install bootloader. specifically some hardware may attempt to boot any device, or may not work, and becuse your going to the target OS, we know this will fail on some hardware which will only follow single set UEFI paths defined in config.","commit_id":"2bf99b765cae0d3f0cbf56545bf539edf38eff6a"},{"author":{"_account_id":39280,"name":"Roussarie","display_name":"Roussarie","email":"laurent.roussarie@orange.com","username":"LRoussarie"},"change_message_id":"3ff1626bf6f668b28510369f0b1a2b5e7f545db6","unresolved":false,"context_lines":[{"line_number":327,"context_line":"     |                                    |                                  |"},{"line_number":328,"context_line":"     |  [prepare_instance_boot]           |                                  |"},{"line_number":329,"context_line":"     |-- set boot device: disk, persistent (via BMC) -----------------------\u003e|"},{"line_number":330,"context_line":"     |                                    |                                  |"},{"line_number":331,"context_line":"     |  [tear_down_agent]                 |                                  |"},{"line_number":332,"context_line":"     |  _should_use_kexec() -\u003e True       |                                  |"},{"line_number":333,"context_line":"     |                                    |                                  |"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c415b380_0f173518","line":330,"in_reply_to":"b58221b1_a3acb8d0","updated":"2026-09-22 12:47:12.000000000","message":"`prepare_instance_boot` (priority 60) is unchanged and runs\nbefore `kexec_boot`. For a whole disk image in UEFI mode, the agent\u0027s `install_bootloader` is still called, so the next real reboot follows\nthe configured UEFI path.","commit_id":"2bf99b765cae0d3f0cbf56545bf539edf38eff6a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b68c02957fe001941081339e017fefc1c83720e0","unresolved":true,"context_lines":[{"line_number":408,"context_line":"``node set --instance-info`` interface::"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"  openstack baremetal node set $NODE \\"},{"line_number":411,"context_line":"    --instance-info deploy_with_kexec\u003dtrue \\"},{"line_number":412,"context_line":"    --instance-info kexec_kernel\u003d/boot/vmlinuz \\"},{"line_number":413,"context_line":"    --instance-info kexec_initrd\u003d/boot/initrd.img \\"},{"line_number":414,"context_line":"    --instance-info kexec_cmdline\u003d\"root\u003dLABEL\u003dcloudimg-rootfs ro\" \\"}],"source_content_type":"text/x-rst","patch_set":1,"id":"eb54666a_f7cdef47","line":411,"updated":"2026-09-15 15:49:50.000000000","message":"I suspect some other reviewers may have opinions on this in terms of putting such a boolean in.\n\nHoneslty, in the step model, this could all be in the deploy_template, but it would require some extra contextual knowledge like the partition UUID, which could still be detected. Even the kernel command line could be extracted.....","commit_id":"2bf99b765cae0d3f0cbf56545bf539edf38eff6a"},{"author":{"_account_id":39280,"name":"Roussarie","display_name":"Roussarie","email":"laurent.roussarie@orange.com","username":"LRoussarie"},"change_message_id":"3ff1626bf6f668b28510369f0b1a2b5e7f545db6","unresolved":false,"context_lines":[{"line_number":408,"context_line":"``node set --instance-info`` interface::"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"  openstack baremetal node set $NODE \\"},{"line_number":411,"context_line":"    --instance-info deploy_with_kexec\u003dtrue \\"},{"line_number":412,"context_line":"    --instance-info kexec_kernel\u003d/boot/vmlinuz \\"},{"line_number":413,"context_line":"    --instance-info kexec_initrd\u003d/boot/initrd.img \\"},{"line_number":414,"context_line":"    --instance-info kexec_cmdline\u003d\"root\u003dLABEL\u003dcloudimg-rootfs ro\" \\"}],"source_content_type":"text/x-rst","patch_set":1,"id":"d8f54db4_4ecef16e","line":411,"in_reply_to":"eb54666a_f7cdef47","updated":"2026-09-22 12:47:12.000000000","message":"Done in PS2.\nThe new `kexec_boot` step takes four optional arguments (kernel, initrd,\ncmdline, boot_partition). If an argument is missing, it is detected by the ramdisk\n(`standby.get_boot_parameters`). The detection function reads the image\u0027s\nbootloader configuration and reports the partition UUID, kernel, initrd\nand the kernel command line.\nThe argument mode is kept because detecting the bootloader parameters for any boot\nconfigurations (depending on OS, filesystems, bootloader) can be challenging.","commit_id":"2bf99b765cae0d3f0cbf56545bf539edf38eff6a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b68c02957fe001941081339e017fefc1c83720e0","unresolved":true,"context_lines":[{"line_number":468,"context_line":"pending, as firmware update requires a real power cycle."},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"**Memory is not cleared.** kexec preserves the contents of RAM where a"},{"line_number":471,"context_line":"real power cycle would have cleared it."},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"**Device state is not reset.** During the boot with kexec, devices are not"},{"line_number":474,"context_line":"re-initialised."}],"source_content_type":"text/x-rst","patch_set":1,"id":"f1f2a0e9_9b0993c2","line":471,"updated":"2026-09-15 15:49:50.000000000","message":"Worth highlighting for users, this means the agent token may be able to be extracted if the runtime memory space is not overwritten quickly inside the newly booted OS.","commit_id":"2bf99b765cae0d3f0cbf56545bf539edf38eff6a"},{"author":{"_account_id":39280,"name":"Roussarie","display_name":"Roussarie","email":"laurent.roussarie@orange.com","username":"LRoussarie"},"change_message_id":"3ff1626bf6f668b28510369f0b1a2b5e7f545db6","unresolved":false,"context_lines":[{"line_number":468,"context_line":"pending, as firmware update requires a real power cycle."},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"**Memory is not cleared.** kexec preserves the contents of RAM where a"},{"line_number":471,"context_line":"real power cycle would have cleared it."},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"**Device state is not reset.** During the boot with kexec, devices are not"},{"line_number":474,"context_line":"re-initialised."}],"source_content_type":"text/x-rst","patch_set":1,"id":"d509c560_1311d336","line":471,"in_reply_to":"f1f2a0e9_9b0993c2","updated":"2026-09-22 12:47:12.000000000","message":"I agree with highlighting this point for users, maybe in the admin guide (`doc/source/admin/node-deployment.rst`) updated with the `kexec`\nfunctionalities and trade-offs.","commit_id":"2bf99b765cae0d3f0cbf56545bf539edf38eff6a"}]}
