)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"adf5101c8423bd16fdae6f1c127221c040322432","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"babde549_1c947b45","updated":"2026-06-08 11:04:55.000000000","message":"Some Claude-cleanup-comments, will see what others think prior to applying","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8c1c95969bf9c161515ed1ca1df5ef6c9315217c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"8a12b278_35776ec1","updated":"2026-06-18 09:26:44.000000000","message":"self-review in progress","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"58e5ee054d56fd05c7b14462d67070009cc59b30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"b3eb496c_1a7026ac","updated":"2026-06-18 10:38:18.000000000","message":"Folks, when you have time, I would appreciate your feedback on this early version of Ironic firmware 2.0 spec.","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":38806,"name":"Konstantinos Karampogias","email":"kkarampo@redhat.com","username":"karampok","status":"Red Hat"},"change_message_id":"398564424e1be81c5957168d2f538fc5f6c200ab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"9172e83d_be4f1655","updated":"2026-06-22 08:59:26.000000000","message":"I am wondering if there is a way that user can define per node setup the reboot order?\n\nMaybe extend the firmware API along with the url to have something like \"ApplyTime\" \"Immediate|OnReset|AtMaintenance\" or something like Wave/Bucket","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6262a363e805c824ec2361f886962e82347ab7d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c9dcbbc5_c7600c85","updated":"2026-06-24 13:46:50.000000000","message":"I\u0027ll have another read before approving, but I think it should be good to go after a couple of minor updates, thanks!","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"016a730bc6017cfb2bc74a58daa32fe09fbe9b41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"ef6be9a5_774eaba8","updated":"2026-06-22 10:36:26.000000000","message":"Thank you for your review, Konstantinos. Great questions, responses in-line. Please let me know if I answered your concerns, if not we\u0027ll discuss further.","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"eb7c891ad7ddc51494fd1de581d987eb0fae5323","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"7046a106_122f1923","updated":"2026-06-22 14:25:20.000000000","message":"thanks! I like the design direction, I have some concerns in the comments","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8b64aac5e7fd53ecb261bb0e8dfee437820328f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"13f101fa_6860cba6","in_reply_to":"7046a106_122f1923","updated":"2026-06-23 05:12:45.000000000","message":"Thank you Riccardo. Great insights, responses incoming.","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"016a730bc6017cfb2bc74a58daa32fe09fbe9b41","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"a3fd6e44_dd753408","in_reply_to":"9172e83d_be4f1655","updated":"2026-06-22 10:36:26.000000000","message":"Responses in-line to try best preserve context.\n\n\u003e if there is a way that user can define per node setup the reboot order\n\nmy current thinking is respecting the original ordering of steps specified by the user, so this would provide control\n\n\u003e Maybe extend the firmware API along with the url to have something like \"ApplyTime\" \"Immediate|OnReset|AtMaintenance\" \n\nThe problem I see here is two-fold. 1) inconsistent support for ApplyTime. In my experience, implementation of ApplyTime varies. Many machines completely ignore ApplyTime for BMCs and always do it immediately. Also I suspect some other updates may be staged immediately and then the reboot only flips the active version - we would need to throughly re-test everything we have access to to tell more.\n2) handling the state of the node between requesting the update operation and the eventual reboot. During recent mid-cycle, we discussed the idea of deferred reboot in the previous iteration of the spec (see https://review.opendev.org/c/openstack/ironic-specs/+/992208/8/specs/approved/multi-component-firmware-updates.rst#153 ). Community consensus was that we\u0027re concerned about stability of some hardware between firmware updates being applied and the reboot happening - not everyone would be happy to let users run workloads on machines in such state due to concerns about stability as well as user doing something that may interfere with clean application of the firmware updates.\n\nSo long story short, unless there\u0027s strong incentive coming from end users I would lean towards always using Immediate for BMC and OnReboot for other components. If you do have solid user stories that suggest this is insufficient please share and we\u0027ll be happy to discuss.\n\n\u003e or something like Wave/Bucket\n\nI am not sure if I understand, can you explain bit more?","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":38806,"name":"Konstantinos Karampogias","email":"kkarampo@redhat.com","username":"karampok","status":"Red Hat"},"change_message_id":"239a5be0b8f76c929fcabe2353dbcaff3d8421fe","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"b5f12d69_b7ed296d","in_reply_to":"a3fd6e44_dd753408","updated":"2026-06-29 07:33:27.000000000","message":"I suggesting keeping the Redfish API towards the client. e.g. if client says `ApplyTime:immediate` then the ironic implementation will not group that firmware update to any other update reboot. User could also add `applyTime: noReboot` if there is vendor/component that needs no reboot for example.\n\n\nAbout the \"Wave\",  is something the ACM/day 2policies in OCP works. You define a field `wave: 0` on BMC, `wave: 2` on the nic component. Implementation should handle the the wave0 first and once finish to go to next wave.","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"bc026f39_4c56eae8","in_reply_to":"b5f12d69_b7ed296d","updated":"2026-07-07 01:04:53.000000000","message":"\u003e I suggesting keeping the Redfish API towards the client. e.g. if client says `ApplyTime:immediate` then the ironic implementation will not group that firmware update to any other update reboot. User could also add `applyTime: noReboot` if there is vendor/component that needs no reboot for example.\n\nWe discussed this with the folks, consensus is that it\u0027s a valuable idea but most likely best left out of this spec for the sake of simplicity and forward progress (there is some tricky corner cases discussed in this comment thread). We are happy to revisit this later.\n\n\u003e \n\u003e \n\u003e About the \"Wave\",  is something the ACM/day 2policies in OCP works. You define a field `wave: 0` on BMC, `wave: 2` on the nic component. Implementation should handle the the wave0 first and once finish to go to next wave.\n\nTo me this part feels like it\u0027s best addressed in a layer above Ironic.","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"78ea3f591cfd3cc44eb9c939d7610a151818504c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c0e520dd_04cefa49","in_reply_to":"c9dcbbc5_c7600c85","updated":"2026-06-26 05:55:02.000000000","message":"Thank you Riccardo. I will try update the spec today and include what we discussed in comments. Once that\u0027s done the spec should be ready for another read.","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"dd1c83be410396bf9f822440286c0500c8a21223","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"ff41fed3_a71e8b92","updated":"2026-06-26 11:45:32.000000000","message":"Thank you for your comments, folks. I think I addressed them all in the current revision. PTAL when you can, thank you.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"5eb25d71_a8ad3057","updated":"2026-07-06 10:19:20.000000000","message":"Thank you for your review Dmitry. Good points, I think I answered all, will rework the spec now.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"81fb5275_c61defcf","updated":"2026-07-07 01:04:53.000000000","message":"Thank you for your reviews and comments, folks. Pushing updated version, I hope I managed to address all the errors omissions and concerns. PTAL and let me know what you think.","commit_id":"64865f135b58650d70f24aec257a42aa97d11641"}],"specs/approved/multi-component-firmware-updates.rst":[{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"adf5101c8423bd16fdae6f1c127221c040322432","unresolved":true,"context_lines":[{"line_number":143,"context_line":"Driver API impact"},{"line_number":144,"context_line":"-----------------"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"``FirmwareInterface.update(settings)`` unchanged.  ``RedfishFirmware``"},{"line_number":147,"context_line":"gains BMC/non-BMC phasing, task tracking, single non-BMC reboot, and"},{"line_number":148,"context_line":"post-update validation.  JSON Schema and caching extended per new"},{"line_number":149,"context_line":"component type as validated."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Nova driver impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"17ae4a87_849e81a8","line":149,"range":{"start_line":146,"start_character":0,"end_line":149,"end_character":28},"updated":"2026-06-08 11:04:55.000000000","message":"None","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"23f3cd7ae9056b59f887195fa3251415cd39e01a","unresolved":false,"context_lines":[{"line_number":143,"context_line":"Driver API impact"},{"line_number":144,"context_line":"-----------------"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"``FirmwareInterface.update(settings)`` unchanged.  ``RedfishFirmware``"},{"line_number":147,"context_line":"gains BMC/non-BMC phasing, task tracking, single non-BMC reboot, and"},{"line_number":148,"context_line":"post-update validation.  JSON Schema and caching extended per new"},{"line_number":149,"context_line":"component type as validated."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Nova driver impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"97441068_b63f891d","line":149,"range":{"start_line":146,"start_character":0,"end_line":149,"end_character":28},"in_reply_to":"17ae4a87_849e81a8","updated":"2026-06-08 11:58:12.000000000","message":"Done","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"adf5101c8423bd16fdae6f1c127221c040322432","unresolved":true,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Ramdisk impact"},{"line_number":159,"context_line":"--------------"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"No IPA API changes.  Operators must boot IPA or instance OS before"},{"line_number":162,"context_line":"non-BMC updates when NIC paths require it."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1434a595_7ec23129","line":162,"range":{"start_line":160,"start_character":1,"end_line":162,"end_character":41},"updated":"2026-06-08 11:04:55.000000000","message":"None","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"23f3cd7ae9056b59f887195fa3251415cd39e01a","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Ramdisk impact"},{"line_number":159,"context_line":"--------------"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"No IPA API changes.  Operators must boot IPA or instance OS before"},{"line_number":162,"context_line":"non-BMC updates when NIC paths require it."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"a853858f_d07cb80d","line":162,"range":{"start_line":160,"start_character":1,"end_line":162,"end_character":41},"in_reply_to":"1434a595_7ec23129","updated":"2026-06-08 11:58:12.000000000","message":"Done","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"adf5101c8423bd16fdae6f1c127221c040322432","unresolved":true,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"Other end user impact"},{"line_number":172,"context_line":"---------------------"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Shorter maintenance windows; clearer multi-component step failures."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Scalability impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1906c40a_19b5f699","line":174,"range":{"start_line":173,"start_character":1,"end_line":174,"end_character":67},"updated":"2026-06-08 11:04:55.000000000","message":"None","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"23f3cd7ae9056b59f887195fa3251415cd39e01a","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"Other end user impact"},{"line_number":172,"context_line":"---------------------"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Shorter maintenance windows; clearer multi-component step failures."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Scalability impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"c2c6c8e9_582f4837","line":174,"range":{"start_line":173,"start_character":1,"end_line":174,"end_character":67},"in_reply_to":"1906c40a_19b5f699","updated":"2026-06-08 11:58:12.000000000","message":"Done","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"adf5101c8423bd16fdae6f1c127221c040322432","unresolved":true,"context_lines":[{"line_number":177,"context_line":"Scalability impact"},{"line_number":178,"context_line":"------------------"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"Longer single-step runtime when many components are requested; no new"},{"line_number":181,"context_line":"periodic tasks."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"6623b325_d856852c","line":181,"range":{"start_line":180,"start_character":0,"end_line":181,"end_character":15},"updated":"2026-06-08 11:04:55.000000000","message":"not true - remove","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"23f3cd7ae9056b59f887195fa3251415cd39e01a","unresolved":false,"context_lines":[{"line_number":177,"context_line":"Scalability impact"},{"line_number":178,"context_line":"------------------"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"Longer single-step runtime when many components are requested; no new"},{"line_number":181,"context_line":"periodic tasks."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"c35f6139_266a376c","line":181,"range":{"start_line":180,"start_character":0,"end_line":181,"end_character":15},"in_reply_to":"6623b325_d856852c","updated":"2026-06-08 11:58:12.000000000","message":"Done","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"adf5101c8423bd16fdae6f1c127221c040322432","unresolved":true,"context_lines":[{"line_number":192,"context_line":"---------------------"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"BMC and non-BMC targets may appear in one step; operators must list"},{"line_number":195,"context_line":"``bmc`` before other components where required.  Optional config for"},{"line_number":196,"context_line":"submission pacing if auto-detection is insufficient."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"Developer impact"},{"line_number":200,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"87d2d9a1_e65a2ed4","line":197,"range":{"start_line":195,"start_character":49,"end_line":197,"end_character":1},"updated":"2026-06-08 11:04:55.000000000","message":"I\u0027d drop this","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"23f3cd7ae9056b59f887195fa3251415cd39e01a","unresolved":false,"context_lines":[{"line_number":192,"context_line":"---------------------"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"BMC and non-BMC targets may appear in one step; operators must list"},{"line_number":195,"context_line":"``bmc`` before other components where required.  Optional config for"},{"line_number":196,"context_line":"submission pacing if auto-detection is insufficient."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"Developer impact"},{"line_number":200,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"17facf83_239b3b72","line":197,"range":{"start_line":195,"start_character":49,"end_line":197,"end_character":1},"in_reply_to":"87d2d9a1_e65a2ed4","updated":"2026-06-08 11:58:12.000000000","message":"Done","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"adf5101c8423bd16fdae6f1c127221c040322432","unresolved":true,"context_lines":[{"line_number":238,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"Unit tests (fake Redfish): phasing, reboot count, validation."},{"line_number":241,"context_line":"Third-party CI (Dell/HPE): BMC-only; BIOS+NIC batch; full bundle;"},{"line_number":242,"context_line":"sequential vs parallel platforms.  Regression on single-component updates."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"Upgrades and Backwards Compatibility"}],"source_content_type":"text/x-rst","patch_set":2,"id":"b9aff216_3ce96eb3","line":242,"range":{"start_line":241,"start_character":0,"end_line":242,"end_character":74},"updated":"2026-06-08 11:04:55.000000000","message":"not sure if this is realistic","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"23f3cd7ae9056b59f887195fa3251415cd39e01a","unresolved":false,"context_lines":[{"line_number":238,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"Unit tests (fake Redfish): phasing, reboot count, validation."},{"line_number":241,"context_line":"Third-party CI (Dell/HPE): BMC-only; BIOS+NIC batch; full bundle;"},{"line_number":242,"context_line":"sequential vs parallel platforms.  Regression on single-component updates."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"Upgrades and Backwards Compatibility"}],"source_content_type":"text/x-rst","patch_set":2,"id":"22e9a180_d0ea2e54","line":242,"range":{"start_line":241,"start_character":0,"end_line":242,"end_character":74},"in_reply_to":"b9aff216_3ce96eb3","updated":"2026-06-08 11:58:12.000000000","message":"Done","commit_id":"0a218835aa1ed9b4afd4d02bdb74f45a81e46eb5"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"20f34bdc856b044ef2135f1379502fbbb27bb29b","unresolved":true,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Redfish ``SimpleUpdate`` is largely image-driven; components beyond"},{"line_number":40,"context_line":"``bmc``, ``bios``, and ``nic:\u003cId\u003e`` may be added incrementally once JSON"},{"line_number":41,"context_line":"Schema validation and ``cache_firmware_components()`` support them."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"**Update mechanism flexibility:** ``SimpleUpdate`` uses a **pull**"},{"line_number":44,"context_line":"connectivity pattern—the BMC fetches firmware from a URL the operator"}],"source_content_type":"text/x-rst","patch_set":7,"id":"0f0a6186_d11ac5b9","line":41,"updated":"2026-06-16 15:18:34.000000000","message":"Does the JSON Schema validation happen on the BMC side? So ironic prepares a JSON and lets the BMC validate it before requesting to apply it?","commit_id":"9c41e7f2d2ad015e1eef38e23bd4f411558b7494"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2f1eb385a7b1ae67c3907aae14eba32e4e271ff6","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Redfish ``SimpleUpdate`` is largely image-driven; components beyond"},{"line_number":40,"context_line":"``bmc``, ``bios``, and ``nic:\u003cId\u003e`` may be added incrementally once JSON"},{"line_number":41,"context_line":"Schema validation and ``cache_firmware_components()`` support them."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"**Update mechanism flexibility:** ``SimpleUpdate`` uses a **pull**"},{"line_number":44,"context_line":"connectivity pattern—the BMC fetches firmware from a URL the operator"}],"source_content_type":"text/x-rst","patch_set":7,"id":"a28cb7ef_5f7f01c0","line":41,"in_reply_to":"0f0a6186_d11ac5b9","updated":"2026-06-18 09:16:52.000000000","message":"in this context, this is an Ironic defined schema (``bmc``, ``bios``, and ``nic:\u003cId\u003e``) - BMC never gets to see it, it just gets an URL to a firmware image and interprets it itself.","commit_id":"9c41e7f2d2ad015e1eef38e23bd4f411558b7494"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"b3aa17a11ff5313640c6b51f6c88919c8c807268","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Redfish ``SimpleUpdate`` is largely image-driven; components beyond"},{"line_number":40,"context_line":"``bmc``, ``bios``, and ``nic:\u003cId\u003e`` may be added incrementally once JSON"},{"line_number":41,"context_line":"Schema validation and ``cache_firmware_components()`` support them."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"**Update mechanism flexibility:** ``SimpleUpdate`` uses a **pull**"},{"line_number":44,"context_line":"connectivity pattern—the BMC fetches firmware from a URL the operator"}],"source_content_type":"text/x-rst","patch_set":7,"id":"0c2dceba_5cca2308","line":41,"in_reply_to":"a28cb7ef_5f7f01c0","updated":"2026-06-18 09:47:53.000000000","message":"Ack, thanks Jacob!","commit_id":"9c41e7f2d2ad015e1eef38e23bd4f411558b7494"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"3426795978a42bb0fb6353b64837cf7a42a45a86","unresolved":true,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"BMC firmware cannot safely share a reboot batch with other components on"},{"line_number":41,"context_line":"certain platforms (for example Dell R640/XR8620t or HP DL380/DL110)."},{"line_number":42,"context_line":"Non-BMC ``SimpleUpdate`` requests can often be staged and applied together"},{"line_number":43,"context_line":"after one reboot, with platform-specific submission pacing (Dell vs HPE)."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Redfish ``SimpleUpdate`` is largely image-driven; components beyond"},{"line_number":46,"context_line":"``bmc``, ``bios``, and ``nic:\u003cId\u003e`` may be added incrementally once JSON"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5de6d81b_6de23f41","line":43,"range":{"start_line":42,"start_character":0,"end_line":43,"end_character":73},"updated":"2026-06-18 10:07:36.000000000","message":"The same appears to apply to BIOS settings changes on tested platforms.","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"ffef8b0ac81ccfd6cb0e506778e51cfb25e4e36a","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"BMC firmware cannot safely share a reboot batch with other components on"},{"line_number":41,"context_line":"certain platforms (for example Dell R640/XR8620t or HP DL380/DL110)."},{"line_number":42,"context_line":"Non-BMC ``SimpleUpdate`` requests can often be staged and applied together"},{"line_number":43,"context_line":"after one reboot, with platform-specific submission pacing (Dell vs HPE)."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Redfish ``SimpleUpdate`` is largely image-driven; components beyond"},{"line_number":46,"context_line":"``bmc``, ``bios``, and ``nic:\u003cId\u003e`` may be added incrementally once JSON"}],"source_content_type":"text/x-rst","patch_set":10,"id":"499b73cf_59874cbb","line":43,"range":{"start_line":42,"start_character":0,"end_line":43,"end_character":73},"in_reply_to":"5de6d81b_6de23f41","updated":"2026-06-18 10:28:29.000000000","message":"Done","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"3426795978a42bb0fb6353b64837cf7a42a45a86","unresolved":true,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"The aim is to support a scenario where an operator can request firmware"},{"line_number":54,"context_line":"updates on multiple components in a time-optimised manner (minimal host"},{"line_number":55,"context_line":"reboots and BMC disruption).  To achieve this, components must be listed"},{"line_number":56,"context_line":"in an order that is optimal for the hardware—typically ``bmc`` first,"},{"line_number":57,"context_line":"followed by ``bios`` and other non-BMC components.  **Ironic will not"},{"line_number":58,"context_line":"reorder** the ``settings`` list; the operator (or upstream tooling) is"}],"source_content_type":"text/x-rst","patch_set":10,"id":"c0aff54d_4ae98363","line":55,"range":{"start_line":55,"start_character":30,"end_line":55,"end_character":45},"updated":"2026-06-18 10:07:36.000000000","message":"To achieve this, when single-reboot flow is requested,","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"9bf88a9911a00bdc471a54e581750ef6b17c3991","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"The aim is to support a scenario where an operator can request firmware"},{"line_number":54,"context_line":"updates on multiple components in a time-optimised manner (minimal host"},{"line_number":55,"context_line":"reboots and BMC disruption).  To achieve this, components must be listed"},{"line_number":56,"context_line":"in an order that is optimal for the hardware—typically ``bmc`` first,"},{"line_number":57,"context_line":"followed by ``bios`` and other non-BMC components.  **Ironic will not"},{"line_number":58,"context_line":"reorder** the ``settings`` list; the operator (or upstream tooling) is"}],"source_content_type":"text/x-rst","patch_set":10,"id":"c71e918a_dd9739a9","line":55,"range":{"start_line":55,"start_character":30,"end_line":55,"end_character":45},"in_reply_to":"c0aff54d_4ae98363","updated":"2026-06-18 10:27:45.000000000","message":"Done","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"3426795978a42bb0fb6353b64837cf7a42a45a86","unresolved":true,"context_lines":[{"line_number":58,"context_line":"reorder** the ``settings`` list; the operator (or upstream tooling) is"},{"line_number":59,"context_line":"responsible for supplying components in the correct sequence."},{"line_number":60,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":61,"context_line":"of this change may be forfeited."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Keep the existing ``firmware.update`` step API"},{"line_number":64,"context_line":"(``[{\"component\": ..., \"url\": ...}, ...]``).  Change orchestration only:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"0b2eef70_20c169e2","line":61,"updated":"2026-06-18 10:07:36.000000000","message":"and the entire operation may fail","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"9bf88a9911a00bdc471a54e581750ef6b17c3991","unresolved":false,"context_lines":[{"line_number":58,"context_line":"reorder** the ``settings`` list; the operator (or upstream tooling) is"},{"line_number":59,"context_line":"responsible for supplying components in the correct sequence."},{"line_number":60,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":61,"context_line":"of this change may be forfeited."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Keep the existing ``firmware.update`` step API"},{"line_number":64,"context_line":"(``[{\"component\": ..., \"url\": ...}, ...]``).  Change orchestration only:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"c82536d8_e3d6a13a","line":61,"in_reply_to":"0b2eef70_20c169e2","updated":"2026-06-18 10:27:45.000000000","message":"Done","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"3426795978a42bb0fb6353b64837cf7a42a45a86","unresolved":true,"context_lines":[{"line_number":60,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":61,"context_line":"of this change may be forfeited."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Keep the existing ``firmware.update`` step API"},{"line_number":64,"context_line":"(``[{\"component\": ..., \"url\": ...}, ...]``).  Change orchestration only:"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"1. **BMC phase** — when ``bmc`` appears before non-BMC entries, process"},{"line_number":67,"context_line":"   it and wait for BMC recovery before continuing."},{"line_number":68,"context_line":"2. **Non-BMC batch** — submit ``SimpleUpdate`` per component (``bios``,"}],"source_content_type":"text/x-rst","patch_set":10,"id":"06db2f00_c76cfa99","line":65,"range":{"start_line":63,"start_character":0,"end_line":65,"end_character":1},"updated":"2026-06-18 10:07:36.000000000","message":"To be able to do this across firmware updates and BIOS settings we may need a new reboot parameter at the top-level of provisioning API call. Working proposal:\nreboot\u003donce|after_each_step with after_each_step being the default in the first iteration to maintain behaviour consistent with the current implementation","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"9bf88a9911a00bdc471a54e581750ef6b17c3991","unresolved":false,"context_lines":[{"line_number":60,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":61,"context_line":"of this change may be forfeited."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Keep the existing ``firmware.update`` step API"},{"line_number":64,"context_line":"(``[{\"component\": ..., \"url\": ...}, ...]``).  Change orchestration only:"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"1. **BMC phase** — when ``bmc`` appears before non-BMC entries, process"},{"line_number":67,"context_line":"   it and wait for BMC recovery before continuing."},{"line_number":68,"context_line":"2. **Non-BMC batch** — submit ``SimpleUpdate`` per component (``bios``,"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3287e07a_128394da","line":65,"range":{"start_line":63,"start_character":0,"end_line":65,"end_character":1},"in_reply_to":"06db2f00_c76cfa99","updated":"2026-06-18 10:27:45.000000000","message":"Done","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"3426795978a42bb0fb6353b64837cf7a42a45a86","unresolved":true,"context_lines":[{"line_number":95,"context_line":"**BIOS settings co-batching:** BIOS settings changes"},{"line_number":96,"context_line":"(``HostFirmwareSettings.spec.settings``) already use an ``OnReset``"},{"line_number":97,"context_line":"apply time via Redfish — they are staged on the BMC and take effect at"},{"line_number":98,"context_line":"next boot.  When ``firmware.update`` triggers its consolidated reboot,"},{"line_number":99,"context_line":"any pending BIOS settings are applied in the same cycle at no extra"},{"line_number":100,"context_line":"cost.  The conductor detects pending BIOS changes and stages them"},{"line_number":101,"context_line":"before issuing the reboot.  If no firmware components are being"}],"source_content_type":"text/x-rst","patch_set":10,"id":"33ccdbff_535c8132","line":98,"range":{"start_line":98,"start_character":17,"end_line":98,"end_character":36},"updated":"2026-06-18 10:07:36.000000000","message":"in the current firmware updates + BIOS settings flow, it will be conductor requesting the reboot, not firmware.update","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"9bf88a9911a00bdc471a54e581750ef6b17c3991","unresolved":false,"context_lines":[{"line_number":95,"context_line":"**BIOS settings co-batching:** BIOS settings changes"},{"line_number":96,"context_line":"(``HostFirmwareSettings.spec.settings``) already use an ``OnReset``"},{"line_number":97,"context_line":"apply time via Redfish — they are staged on the BMC and take effect at"},{"line_number":98,"context_line":"next boot.  When ``firmware.update`` triggers its consolidated reboot,"},{"line_number":99,"context_line":"any pending BIOS settings are applied in the same cycle at no extra"},{"line_number":100,"context_line":"cost.  The conductor detects pending BIOS changes and stages them"},{"line_number":101,"context_line":"before issuing the reboot.  If no firmware components are being"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ed09d3d8_28009c59","line":98,"range":{"start_line":98,"start_character":17,"end_line":98,"end_character":36},"in_reply_to":"33ccdbff_535c8132","updated":"2026-06-18 10:27:45.000000000","message":"Done","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"3426795978a42bb0fb6353b64837cf7a42a45a86","unresolved":true,"context_lines":[{"line_number":97,"context_line":"apply time via Redfish — they are staged on the BMC and take effect at"},{"line_number":98,"context_line":"next boot.  When ``firmware.update`` triggers its consolidated reboot,"},{"line_number":99,"context_line":"any pending BIOS settings are applied in the same cycle at no extra"},{"line_number":100,"context_line":"cost.  The conductor detects pending BIOS changes and stages them"},{"line_number":101,"context_line":"before issuing the reboot.  If no firmware components are being"},{"line_number":102,"context_line":"updated, BIOS settings continue to use the existing"},{"line_number":103,"context_line":"``bios.apply_configuration`` path unchanged."},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"c35f8bce_ca81601f","line":101,"range":{"start_line":100,"start_character":7,"end_line":101,"end_character":27},"updated":"2026-06-18 10:07:36.000000000","message":"deduplicate?","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"9bf88a9911a00bdc471a54e581750ef6b17c3991","unresolved":false,"context_lines":[{"line_number":97,"context_line":"apply time via Redfish — they are staged on the BMC and take effect at"},{"line_number":98,"context_line":"next boot.  When ``firmware.update`` triggers its consolidated reboot,"},{"line_number":99,"context_line":"any pending BIOS settings are applied in the same cycle at no extra"},{"line_number":100,"context_line":"cost.  The conductor detects pending BIOS changes and stages them"},{"line_number":101,"context_line":"before issuing the reboot.  If no firmware components are being"},{"line_number":102,"context_line":"updated, BIOS settings continue to use the existing"},{"line_number":103,"context_line":"``bios.apply_configuration`` path unchanged."},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"e0918b39_d2370db6","line":101,"range":{"start_line":100,"start_character":7,"end_line":101,"end_character":27},"in_reply_to":"c35f8bce_ca81601f","updated":"2026-06-18 10:27:45.000000000","message":"Done","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"3426795978a42bb0fb6353b64837cf7a42a45a86","unresolved":true,"context_lines":[{"line_number":109,"context_line":"updates may have to complete while the instance OS is still up, before the"},{"line_number":110,"context_line":"consolidated host reboot that applies the batched non-BMC updates."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Hypothetical CLI example (firmware updates only, one non-BMC reboot)::"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"  openstack baremetal node service --service-steps \u0027["},{"line_number":115,"context_line":"    {\"interface\": \"firmware\", \"step\": \"update\", \"args\": {\"settings\": ["},{"line_number":116,"context_line":"      {\"component\": \"bmc\", \"url\": \"https://example.com/bmc.bin\"},"},{"line_number":117,"context_line":"      {\"component\": \"bios\", \"url\": \"https://example.com/bios.exe\"},"},{"line_number":118,"context_line":"      {\"component\": \"raid\", \"url\": \"https://example.com/raid.exe\"},"},{"line_number":119,"context_line":"      {\"component\": \"nic:NIC.Integrated.1-1-1\", \"url\": \"https://example.com/nic.zip\"}"},{"line_number":120,"context_line":"    ]}}"},{"line_number":121,"context_line":"  ]\u0027 mynode"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"If ``HostFirmwareSettings`` has pending changes at the time this step"},{"line_number":124,"context_line":"runs, those BIOS settings are staged via ``Bios/Settings`` PATCH and"}],"source_content_type":"text/x-rst","patch_set":10,"id":"b8ceffd2_c7900abc","line":121,"range":{"start_line":112,"start_character":0,"end_line":121,"end_character":11},"updated":"2026-06-18 10:07:36.000000000","message":"add an example with several firmware components + BIOS settings and reboot parameter set to once","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"9bf88a9911a00bdc471a54e581750ef6b17c3991","unresolved":false,"context_lines":[{"line_number":109,"context_line":"updates may have to complete while the instance OS is still up, before the"},{"line_number":110,"context_line":"consolidated host reboot that applies the batched non-BMC updates."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Hypothetical CLI example (firmware updates only, one non-BMC reboot)::"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"  openstack baremetal node service --service-steps \u0027["},{"line_number":115,"context_line":"    {\"interface\": \"firmware\", \"step\": \"update\", \"args\": {\"settings\": ["},{"line_number":116,"context_line":"      {\"component\": \"bmc\", \"url\": \"https://example.com/bmc.bin\"},"},{"line_number":117,"context_line":"      {\"component\": \"bios\", \"url\": \"https://example.com/bios.exe\"},"},{"line_number":118,"context_line":"      {\"component\": \"raid\", \"url\": \"https://example.com/raid.exe\"},"},{"line_number":119,"context_line":"      {\"component\": \"nic:NIC.Integrated.1-1-1\", \"url\": \"https://example.com/nic.zip\"}"},{"line_number":120,"context_line":"    ]}}"},{"line_number":121,"context_line":"  ]\u0027 mynode"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"If ``HostFirmwareSettings`` has pending changes at the time this step"},{"line_number":124,"context_line":"runs, those BIOS settings are staged via ``Bios/Settings`` PATCH and"}],"source_content_type":"text/x-rst","patch_set":10,"id":"71758dd4_baf89ce4","line":121,"range":{"start_line":112,"start_character":0,"end_line":121,"end_character":11},"in_reply_to":"b8ceffd2_c7900abc","updated":"2026-06-18 10:27:45.000000000","message":"Done","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"3426795978a42bb0fb6353b64837cf7a42a45a86","unresolved":true,"context_lines":[{"line_number":120,"context_line":"    ]}}"},{"line_number":121,"context_line":"  ]\u0027 mynode"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"If ``HostFirmwareSettings`` has pending changes at the time this step"},{"line_number":124,"context_line":"runs, those BIOS settings are staged via ``Bios/Settings`` PATCH and"},{"line_number":125,"context_line":"applied during the same reboot — no additional reboot required.  The"},{"line_number":126,"context_line":"operator does not need to explicitly schedule ``bios.apply_configuration``"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fe76c2b9_c667d863","line":123,"range":{"start_line":123,"start_character":5,"end_line":123,"end_character":25},"updated":"2026-06-18 10:07:36.000000000","message":"this is not an Ironic term, replace with BIOS settings","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"9bf88a9911a00bdc471a54e581750ef6b17c3991","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    ]}}"},{"line_number":121,"context_line":"  ]\u0027 mynode"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"If ``HostFirmwareSettings`` has pending changes at the time this step"},{"line_number":124,"context_line":"runs, those BIOS settings are staged via ``Bios/Settings`` PATCH and"},{"line_number":125,"context_line":"applied during the same reboot — no additional reboot required.  The"},{"line_number":126,"context_line":"operator does not need to explicitly schedule ``bios.apply_configuration``"}],"source_content_type":"text/x-rst","patch_set":10,"id":"52e5bff9_6f9a39ac","line":123,"range":{"start_line":123,"start_character":5,"end_line":123,"end_character":25},"in_reply_to":"fe76c2b9_c667d863","updated":"2026-06-18 10:27:45.000000000","message":"Done","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8c1c95969bf9c161515ed1ca1df5ef6c9315217c","unresolved":true,"context_lines":[{"line_number":127,"context_line":"as a separate step in this scenario."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"**Out of scope:** REST API changes, in-band delivery."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":10,"id":"f661a9ad_c4859ec7","line":130,"range":{"start_line":130,"start_character":18,"end_line":130,"end_character":34},"updated":"2026-06-18 09:26:44.000000000","message":"if reboot\u003donce|each (or similar) param lives in the provision API call, that IS a REST API change.","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"9bf88a9911a00bdc471a54e581750ef6b17c3991","unresolved":false,"context_lines":[{"line_number":127,"context_line":"as a separate step in this scenario."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"**Out of scope:** REST API changes, in-band delivery."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d906a909_56f577cf","line":130,"range":{"start_line":130,"start_character":18,"end_line":130,"end_character":34},"in_reply_to":"f661a9ad_c4859ec7","updated":"2026-06-18 10:27:45.000000000","message":"Done","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"3426795978a42bb0fb6353b64837cf7a42a45a86","unresolved":true,"context_lines":[{"line_number":154,"context_line":"None"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"REST API impact"},{"line_number":158,"context_line":"---------------"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Client (CLI) impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d20f3151_be4a9de2","line":160,"range":{"start_line":157,"start_character":0,"end_line":160,"end_character":4},"updated":"2026-06-18 10:07:36.000000000","message":"ditto","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"9bf88a9911a00bdc471a54e581750ef6b17c3991","unresolved":false,"context_lines":[{"line_number":154,"context_line":"None"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"REST API impact"},{"line_number":158,"context_line":"---------------"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Client (CLI) impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"f2071c90_20faec28","line":160,"range":{"start_line":157,"start_character":0,"end_line":160,"end_character":4},"in_reply_to":"d20f3151_be4a9de2","updated":"2026-06-18 10:27:45.000000000","message":"Done","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"3426795978a42bb0fb6353b64837cf7a42a45a86","unresolved":true,"context_lines":[{"line_number":160,"context_line":"None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Client (CLI) impact"},{"line_number":164,"context_line":"-------------------"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"None"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"\"openstack baremetal\" CLI"},{"line_number":170,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"None"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"\"openstacksdk\""},{"line_number":176,"context_line":"~~~~~~~~~~~~~~"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"None"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"RPC API impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"41bc6ad7_d68ff4a7","line":178,"range":{"start_line":163,"start_character":0,"end_line":178,"end_character":4},"updated":"2026-06-18 10:07:36.000000000","message":"we\u0027ll need reboot param support","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"9bf88a9911a00bdc471a54e581750ef6b17c3991","unresolved":false,"context_lines":[{"line_number":160,"context_line":"None"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Client (CLI) impact"},{"line_number":164,"context_line":"-------------------"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"None"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"\"openstack baremetal\" CLI"},{"line_number":170,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"None"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"\"openstacksdk\""},{"line_number":176,"context_line":"~~~~~~~~~~~~~~"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"None"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"RPC API impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"e3bb4fec_65a67016","line":178,"range":{"start_line":163,"start_character":0,"end_line":178,"end_character":4},"in_reply_to":"41bc6ad7_d68ff4a7","updated":"2026-06-18 10:27:45.000000000","message":"Done","commit_id":"ce38eb0eebc76a5bcf561eabd8b9f9ba805cf98e"},{"author":{"_account_id":38806,"name":"Konstantinos Karampogias","email":"kkarampo@redhat.com","username":"karampok","status":"Red Hat"},"change_message_id":"398564424e1be81c5957168d2f538fc5f6c200ab","unresolved":true,"context_lines":[{"line_number":33,"context_line":"Similarly, BIOS settings changes (``bios.apply_configuration``) require"},{"line_number":34,"context_line":"their own reboot cycle even though the Redfish ``Bios/Settings`` PATCH"},{"line_number":35,"context_line":"uses ``@Redfish.SettingsApplyTime: OnReset``—the settings are already"},{"line_number":36,"context_line":"staged for the next boot.  When an operator needs both a firmware update"},{"line_number":37,"context_line":"and a BIOS configuration change, the current flow requires at least two"},{"line_number":38,"context_line":"separate reboots."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"5414bc07_1f9692b7","line":36,"updated":"2026-06-22 08:59:26.000000000","message":"Can we define what is \"staged\"? Is it when we do a SimpleUpdate with OnReset?","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"016a730bc6017cfb2bc74a58daa32fe09fbe9b41","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Similarly, BIOS settings changes (``bios.apply_configuration``) require"},{"line_number":34,"context_line":"their own reboot cycle even though the Redfish ``Bios/Settings`` PATCH"},{"line_number":35,"context_line":"uses ``@Redfish.SettingsApplyTime: OnReset``—the settings are already"},{"line_number":36,"context_line":"staged for the next boot.  When an operator needs both a firmware update"},{"line_number":37,"context_line":"and a BIOS configuration change, the current flow requires at least two"},{"line_number":38,"context_line":"separate reboots."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"8bcc02b4_7d3a5131","line":36,"in_reply_to":"5414bc07_1f9692b7","updated":"2026-06-22 10:36:26.000000000","message":"Correct.","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":38806,"name":"Konstantinos Karampogias","email":"kkarampo@redhat.com","username":"karampok","status":"Red Hat"},"change_message_id":"398564424e1be81c5957168d2f538fc5f6c200ab","unresolved":true,"context_lines":[{"line_number":54,"context_line":"The aim is to support a scenario where an operator can request firmware"},{"line_number":55,"context_line":"updates on multiple components in a time-optimised manner (minimal host"},{"line_number":56,"context_line":"reboots and BMC disruption).  To achieve this, when single-reboot flow"},{"line_number":57,"context_line":"is requested, components must be listed in an order that is optimal for"},{"line_number":58,"context_line":"the hardware—typically ``bmc`` first,"},{"line_number":59,"context_line":"followed by ``bios`` and other non-BMC components.  **Ironic will not"},{"line_number":60,"context_line":"reorder** the ``settings`` list; the operator (or upstream tooling) is"}],"source_content_type":"text/x-rst","patch_set":12,"id":"383c5e89_4a23144e","line":57,"updated":"2026-06-22 08:59:26.000000000","message":"\"must be listed in an order\"\nimo the strict order as API is fragile because there might be libs that do random order (e.g. you have a go struct which will be printed in random order in an array).","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"016a730bc6017cfb2bc74a58daa32fe09fbe9b41","unresolved":true,"context_lines":[{"line_number":54,"context_line":"The aim is to support a scenario where an operator can request firmware"},{"line_number":55,"context_line":"updates on multiple components in a time-optimised manner (minimal host"},{"line_number":56,"context_line":"reboots and BMC disruption).  To achieve this, when single-reboot flow"},{"line_number":57,"context_line":"is requested, components must be listed in an order that is optimal for"},{"line_number":58,"context_line":"the hardware—typically ``bmc`` first,"},{"line_number":59,"context_line":"followed by ``bios`` and other non-BMC components.  **Ironic will not"},{"line_number":60,"context_line":"reorder** the ``settings`` list; the operator (or upstream tooling) is"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5703a1e4_36f31f7b","line":57,"in_reply_to":"383c5e89_4a23144e","updated":"2026-06-22 10:36:26.000000000","message":"That is an interesting concern.. Are you thinking BMO? My thinking was:\n* Ironic following user-provided ordering of steps. This is an Ironic spec so this is where our concerns end at this point in time.\n* (for context only): In metal3/BMO I WOULD curate the order in which steps are built and sent to Ironic. Since these are auto-generated from HFC/HFS changes there is no real user-specified order, it is up to BMO to define it.\nDoes this answer your concern?","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"dd1c83be410396bf9f822440286c0500c8a21223","unresolved":false,"context_lines":[{"line_number":54,"context_line":"The aim is to support a scenario where an operator can request firmware"},{"line_number":55,"context_line":"updates on multiple components in a time-optimised manner (minimal host"},{"line_number":56,"context_line":"reboots and BMC disruption).  To achieve this, when single-reboot flow"},{"line_number":57,"context_line":"is requested, components must be listed in an order that is optimal for"},{"line_number":58,"context_line":"the hardware—typically ``bmc`` first,"},{"line_number":59,"context_line":"followed by ``bios`` and other non-BMC components.  **Ironic will not"},{"line_number":60,"context_line":"reorder** the ``settings`` list; the operator (or upstream tooling) is"}],"source_content_type":"text/x-rst","patch_set":12,"id":"b5d2894e_a81ab167","line":57,"in_reply_to":"5703a1e4_36f31f7b","updated":"2026-06-26 11:45:32.000000000","message":"Done","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"eb7c891ad7ddc51494fd1de581d987eb0fae5323","unresolved":true,"context_lines":[{"line_number":56,"context_line":"reboots and BMC disruption).  To achieve this, when single-reboot flow"},{"line_number":57,"context_line":"is requested, components must be listed in an order that is optimal for"},{"line_number":58,"context_line":"the hardware—typically ``bmc`` first,"},{"line_number":59,"context_line":"followed by ``bios`` and other non-BMC components.  **Ironic will not"},{"line_number":60,"context_line":"reorder** the ``settings`` list; the operator (or upstream tooling) is"},{"line_number":61,"context_line":"responsible for supplying components in the correct sequence."},{"line_number":62,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":63,"context_line":"of this change may be forfeited and the entire operation may fail."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"To be able to batch firmware updates and BIOS settings changes into a"},{"line_number":66,"context_line":"single reboot, a new ``reboot`` parameter is proposed at the top level"}],"source_content_type":"text/x-rst","patch_set":12,"id":"15e84b66_7d4b81a1","line":63,"range":{"start_line":59,"start_character":52,"end_line":63,"end_character":66},"updated":"2026-06-22 14:25:20.000000000","message":"wondering if it\u0027s worth having ironic do some kind of validation to reject obviously wrong orders (e.g. bmc after bios)","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8b64aac5e7fd53ecb261bb0e8dfee437820328f1","unresolved":true,"context_lines":[{"line_number":56,"context_line":"reboots and BMC disruption).  To achieve this, when single-reboot flow"},{"line_number":57,"context_line":"is requested, components must be listed in an order that is optimal for"},{"line_number":58,"context_line":"the hardware—typically ``bmc`` first,"},{"line_number":59,"context_line":"followed by ``bios`` and other non-BMC components.  **Ironic will not"},{"line_number":60,"context_line":"reorder** the ``settings`` list; the operator (or upstream tooling) is"},{"line_number":61,"context_line":"responsible for supplying components in the correct sequence."},{"line_number":62,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":63,"context_line":"of this change may be forfeited and the entire operation may fail."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"To be able to batch firmware updates and BIOS settings changes into a"},{"line_number":66,"context_line":"single reboot, a new ``reboot`` parameter is proposed at the top level"}],"source_content_type":"text/x-rst","patch_set":12,"id":"17b98150_f4e4b08a","line":63,"range":{"start_line":59,"start_character":52,"end_line":63,"end_character":66},"in_reply_to":"15e84b66_7d4b81a1","updated":"2026-06-23 05:12:45.000000000","message":"Good question. I am leaning towards leveraging the documentation (both Ironic and hardware vendor kind) to tell operators what they should be doing and not touching steps.\n\nInstead, in single-reboot-flow I would make sure if they do specify BIOS first BMC second, it will work, just losing single-reboot inefficiency. The value of giving user control in scenarios we didn\u0027t know/think about (weird hardware etc) seems to be greater than enforcing best-performance in cases where user did a poor job ordering the steps.\n\nIn \"failsafe\" flow we\u0027ve been discussing (which is not in the spec yet) we would likely reboot between each step so I have minimal concerns about things breaking (should be OK regardless of ordering - and ordering shouldn\u0027t have much impact on failsafe mode performance, which will be expected to be very poor).\nWhat are your thoughts?","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6262a363e805c824ec2361f886962e82347ab7d1","unresolved":true,"context_lines":[{"line_number":56,"context_line":"reboots and BMC disruption).  To achieve this, when single-reboot flow"},{"line_number":57,"context_line":"is requested, components must be listed in an order that is optimal for"},{"line_number":58,"context_line":"the hardware—typically ``bmc`` first,"},{"line_number":59,"context_line":"followed by ``bios`` and other non-BMC components.  **Ironic will not"},{"line_number":60,"context_line":"reorder** the ``settings`` list; the operator (or upstream tooling) is"},{"line_number":61,"context_line":"responsible for supplying components in the correct sequence."},{"line_number":62,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":63,"context_line":"of this change may be forfeited and the entire operation may fail."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"To be able to batch firmware updates and BIOS settings changes into a"},{"line_number":66,"context_line":"single reboot, a new ``reboot`` parameter is proposed at the top level"}],"source_content_type":"text/x-rst","patch_set":12,"id":"69462456_7e782a0a","line":63,"range":{"start_line":59,"start_character":52,"end_line":63,"end_character":66},"in_reply_to":"17b98150_f4e4b08a","updated":"2026-06-24 13:46:50.000000000","message":"sounds all good, my concern is due to final user over protection! :)\nas far as we document the different scenarios, I\u0027m ok with giving users all the possible freedom","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"dd1c83be410396bf9f822440286c0500c8a21223","unresolved":false,"context_lines":[{"line_number":56,"context_line":"reboots and BMC disruption).  To achieve this, when single-reboot flow"},{"line_number":57,"context_line":"is requested, components must be listed in an order that is optimal for"},{"line_number":58,"context_line":"the hardware—typically ``bmc`` first,"},{"line_number":59,"context_line":"followed by ``bios`` and other non-BMC components.  **Ironic will not"},{"line_number":60,"context_line":"reorder** the ``settings`` list; the operator (or upstream tooling) is"},{"line_number":61,"context_line":"responsible for supplying components in the correct sequence."},{"line_number":62,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":63,"context_line":"of this change may be forfeited and the entire operation may fail."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"To be able to batch firmware updates and BIOS settings changes into a"},{"line_number":66,"context_line":"single reboot, a new ``reboot`` parameter is proposed at the top level"}],"source_content_type":"text/x-rst","patch_set":12,"id":"45b7e6de_54feec36","line":63,"range":{"start_line":59,"start_character":52,"end_line":63,"end_character":66},"in_reply_to":"69462456_7e782a0a","updated":"2026-06-26 11:45:32.000000000","message":"Done","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":38806,"name":"Konstantinos Karampogias","email":"kkarampo@redhat.com","username":"karampok","status":"Red Hat"},"change_message_id":"398564424e1be81c5957168d2f538fc5f6c200ab","unresolved":true,"context_lines":[{"line_number":66,"context_line":"single reboot, a new ``reboot`` parameter is proposed at the top level"},{"line_number":67,"context_line":"of the provisioning API service call.  Working proposal::"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  reboot \u003d once | each_step"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":72,"context_line":"behaviour consistent with the current implementation.  When"}],"source_content_type":"text/x-rst","patch_set":12,"id":"780c8632_b9737323","line":69,"updated":"2026-06-22 08:59:26.000000000","message":"How can we define that per node? or is general approach?","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"eb7c891ad7ddc51494fd1de581d987eb0fae5323","unresolved":true,"context_lines":[{"line_number":62,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":63,"context_line":"of this change may be forfeited and the entire operation may fail."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"To be able to batch firmware updates and BIOS settings changes into a"},{"line_number":66,"context_line":"single reboot, a new ``reboot`` parameter is proposed at the top level"},{"line_number":67,"context_line":"of the provisioning API service call.  Working proposal::"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  reboot \u003d once | each_step"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":72,"context_line":"behaviour consistent with the current implementation.  When"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1b2492dc_a2260611","line":69,"range":{"start_line":65,"start_character":0,"end_line":69,"end_character":27},"updated":"2026-06-22 14:25:20.000000000","message":"this means that a user could pass --reboot once with steps that have nothing to do with firmware ?\nWe should clarify whether reboot\u003donce is only executed for firmware/BIOS steps, or whether it\u0027s a generic mechanism the conductor applies across all step types. If it\u0027s firmware-only, maybe it belongs in the step args rather than as a top-level parameter.\n\nalso reboot is quite generic, maybe have something more explicit and self-documenting like step_reboot_mode","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8b64aac5e7fd53ecb261bb0e8dfee437820328f1","unresolved":true,"context_lines":[{"line_number":62,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":63,"context_line":"of this change may be forfeited and the entire operation may fail."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"To be able to batch firmware updates and BIOS settings changes into a"},{"line_number":66,"context_line":"single reboot, a new ``reboot`` parameter is proposed at the top level"},{"line_number":67,"context_line":"of the provisioning API service call.  Working proposal::"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  reboot \u003d once | each_step"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":72,"context_line":"behaviour consistent with the current implementation.  When"}],"source_content_type":"text/x-rst","patch_set":12,"id":"4d7d57d6_a6c18ea4","line":69,"range":{"start_line":65,"start_character":0,"end_line":69,"end_character":27},"in_reply_to":"1b2492dc_a2260611","updated":"2026-06-23 05:12:45.000000000","message":"That is a really good question worth further discussion. I didn\u0027t want to put the reboot on the step level because 1) it is \"shared\" between various firmware update steps and BIOS settings changes and 2) I think I remember objections against this idea being raised during mid-cycle. But how about completely unrelated steps?\n\nYour point about reboot being generic hints some options: One way to do it could be name it something firmare specific (e.g. fw_upd_reboot_mode) and only accept (or interpret) it in firmware-related operations. WDYT?","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"dd1c83be410396bf9f822440286c0500c8a21223","unresolved":false,"context_lines":[{"line_number":62,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":63,"context_line":"of this change may be forfeited and the entire operation may fail."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"To be able to batch firmware updates and BIOS settings changes into a"},{"line_number":66,"context_line":"single reboot, a new ``reboot`` parameter is proposed at the top level"},{"line_number":67,"context_line":"of the provisioning API service call.  Working proposal::"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  reboot \u003d once | each_step"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":72,"context_line":"behaviour consistent with the current implementation.  When"}],"source_content_type":"text/x-rst","patch_set":12,"id":"733fb666_5cecc2f4","line":69,"range":{"start_line":65,"start_character":0,"end_line":69,"end_character":27},"in_reply_to":"2a76764c_4412ea95","updated":"2026-06-26 11:45:32.000000000","message":"Done","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6262a363e805c824ec2361f886962e82347ab7d1","unresolved":true,"context_lines":[{"line_number":62,"context_line":"If components are listed in a sub-optimal order, the efficiency benefits"},{"line_number":63,"context_line":"of this change may be forfeited and the entire operation may fail."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"To be able to batch firmware updates and BIOS settings changes into a"},{"line_number":66,"context_line":"single reboot, a new ``reboot`` parameter is proposed at the top level"},{"line_number":67,"context_line":"of the provisioning API service call.  Working proposal::"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  reboot \u003d once | each_step"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":72,"context_line":"behaviour consistent with the current implementation.  When"}],"source_content_type":"text/x-rst","patch_set":12,"id":"2a76764c_4412ea95","line":69,"range":{"start_line":65,"start_character":0,"end_line":69,"end_character":27},"in_reply_to":"4d7d57d6_a6c18ea4","updated":"2026-06-24 13:46:50.000000000","message":"unfortunately I was not present at the mid-cycle discussion :(\nas I mention it below in a different comment, assigning a proper name should at least give a proper idea about what that really is for, so we should be fine with what you suggest","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"016a730bc6017cfb2bc74a58daa32fe09fbe9b41","unresolved":false,"context_lines":[{"line_number":66,"context_line":"single reboot, a new ``reboot`` parameter is proposed at the top level"},{"line_number":67,"context_line":"of the provisioning API service call.  Working proposal::"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  reboot \u003d once | each_step"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":72,"context_line":"behaviour consistent with the current implementation.  When"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3ab5b162_54d2f433","line":69,"in_reply_to":"780c8632_b9737323","updated":"2026-06-22 10:36:26.000000000","message":"As per this proposal, this would be a general approach where this is set per-API call (not even per-node - we could make two API calls against same node with one requesting reboot: once and another reboot:each_step if we wanted)","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":38806,"name":"Konstantinos Karampogias","email":"kkarampo@redhat.com","username":"karampok","status":"Red Hat"},"change_message_id":"398564424e1be81c5957168d2f538fc5f6c200ab","unresolved":true,"context_lines":[{"line_number":77,"context_line":"(``[{\"component\": ..., \"url\": ...}, ...]``).  Change orchestration"},{"line_number":78,"context_line":"(when ``reboot\u003donce``):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"1. **BMC phase** — when ``bmc`` appears before non-BMC entries, process"},{"line_number":81,"context_line":"   it and wait for BMC recovery before continuing."},{"line_number":82,"context_line":"2. **Non-BMC batch** — submit ``SimpleUpdate`` per component (``bios``,"},{"line_number":83,"context_line":"   ``nic:\u003cId\u003e``, and validated types such as ``raid``); track Redfish"}],"source_content_type":"text/x-rst","patch_set":12,"id":"95ed7d9a_09dd21ba","line":80,"updated":"2026-06-22 08:59:26.000000000","message":"Is BMC update actually reboots node? Like if OS running will that have downtime?","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"016a730bc6017cfb2bc74a58daa32fe09fbe9b41","unresolved":false,"context_lines":[{"line_number":77,"context_line":"(``[{\"component\": ..., \"url\": ...}, ...]``).  Change orchestration"},{"line_number":78,"context_line":"(when ``reboot\u003donce``):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"1. **BMC phase** — when ``bmc`` appears before non-BMC entries, process"},{"line_number":81,"context_line":"   it and wait for BMC recovery before continuing."},{"line_number":82,"context_line":"2. **Non-BMC batch** — submit ``SimpleUpdate`` per component (``bios``,"},{"line_number":83,"context_line":"   ``nic:\u003cId\u003e``, and validated types such as ``raid``); track Redfish"}],"source_content_type":"text/x-rst","patch_set":12,"id":"2e74b8d6_2fa9fab4","line":80,"in_reply_to":"95ed7d9a_09dd21ba","updated":"2026-06-22 10:36:26.000000000","message":"Typically it does not. BMC should restart but OS should remain unaffected. That is the golden rule of BMC:OS separation. Having said that I have seen cases where OS reboot breaks BMC update (Dell XR8620T) and may have seen cases where BMC update does require node reboot. On most hardware I tested however you can update BMC and restart BMC without affecting the OS.","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"eb7c891ad7ddc51494fd1de581d987eb0fae5323","unresolved":true,"context_lines":[{"line_number":96,"context_line":"   mostly to make changes take effect."},{"line_number":97,"context_line":"4. **One host reboot** — apply all staged non-BMC firmware updates and"},{"line_number":98,"context_line":"   BIOS settings changes together."},{"line_number":99,"context_line":"5. **Validate** — refresh firmware component cache and BIOS settings"},{"line_number":100,"context_line":"   cache; confirm versions and settings match expected values after"},{"line_number":101,"context_line":"   reboot."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"**Component rules:** validation stays strict (today: ``bmc``, ``bios``,"},{"line_number":104,"context_line":"``nic:.*`` [3]_).  New identifiers are added to the schema and cache only"}],"source_content_type":"text/x-rst","patch_set":12,"id":"fecd5e84_e02c2f45","line":101,"range":{"start_line":99,"start_character":0,"end_line":101,"end_character":10},"updated":"2026-06-22 14:25:20.000000000","message":"if BIOS firmware staging succeeds but NIC staging fails before the consolidated reboot, what\u0027s the expected state?\nwe should define this explicitly because some vendors will silently apply staged updates on the next reboot regardless.","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"dd1c83be410396bf9f822440286c0500c8a21223","unresolved":false,"context_lines":[{"line_number":96,"context_line":"   mostly to make changes take effect."},{"line_number":97,"context_line":"4. **One host reboot** — apply all staged non-BMC firmware updates and"},{"line_number":98,"context_line":"   BIOS settings changes together."},{"line_number":99,"context_line":"5. **Validate** — refresh firmware component cache and BIOS settings"},{"line_number":100,"context_line":"   cache; confirm versions and settings match expected values after"},{"line_number":101,"context_line":"   reboot."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"**Component rules:** validation stays strict (today: ``bmc``, ``bios``,"},{"line_number":104,"context_line":"``nic:.*`` [3]_).  New identifiers are added to the schema and cache only"}],"source_content_type":"text/x-rst","patch_set":12,"id":"442207cc_2800c7a4","line":101,"range":{"start_line":99,"start_character":0,"end_line":101,"end_character":10},"in_reply_to":"6000d52a_9f813a3f","updated":"2026-06-26 11:45:32.000000000","message":"Done","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6262a363e805c824ec2361f886962e82347ab7d1","unresolved":true,"context_lines":[{"line_number":96,"context_line":"   mostly to make changes take effect."},{"line_number":97,"context_line":"4. **One host reboot** — apply all staged non-BMC firmware updates and"},{"line_number":98,"context_line":"   BIOS settings changes together."},{"line_number":99,"context_line":"5. **Validate** — refresh firmware component cache and BIOS settings"},{"line_number":100,"context_line":"   cache; confirm versions and settings match expected values after"},{"line_number":101,"context_line":"   reboot."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"**Component rules:** validation stays strict (today: ``bmc``, ``bios``,"},{"line_number":104,"context_line":"``nic:.*`` [3]_).  New identifiers are added to the schema and cache only"}],"source_content_type":"text/x-rst","patch_set":12,"id":"6000d52a_9f813a3f","line":101,"range":{"start_line":99,"start_character":0,"end_line":101,"end_character":10},"in_reply_to":"a69821fe_e2edede7","updated":"2026-06-24 13:46:50.000000000","message":"totally, same thought\nlet\u0027s make sure to write this down in the spec","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8b64aac5e7fd53ecb261bb0e8dfee437820328f1","unresolved":true,"context_lines":[{"line_number":96,"context_line":"   mostly to make changes take effect."},{"line_number":97,"context_line":"4. **One host reboot** — apply all staged non-BMC firmware updates and"},{"line_number":98,"context_line":"   BIOS settings changes together."},{"line_number":99,"context_line":"5. **Validate** — refresh firmware component cache and BIOS settings"},{"line_number":100,"context_line":"   cache; confirm versions and settings match expected values after"},{"line_number":101,"context_line":"   reboot."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"**Component rules:** validation stays strict (today: ``bmc``, ``bios``,"},{"line_number":104,"context_line":"``nic:.*`` [3]_).  New identifiers are added to the schema and cache only"}],"source_content_type":"text/x-rst","patch_set":12,"id":"a69821fe_e2edede7","line":101,"range":{"start_line":99,"start_character":0,"end_line":101,"end_character":10},"in_reply_to":"fecd5e84_e02c2f45","updated":"2026-06-23 05:12:45.000000000","message":"If any Task/Job (Job\u003dTask in Dell, speak, IIUC) fails I would lean towards making the entire servicing run fail and put the node in \"servicing failed\". If multiple steps are specified, I think it is only fair to claim success if each and every step succeeds and admit failure if any of the steps fails. Does this make sense to you?","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"eb7c891ad7ddc51494fd1de581d987eb0fae5323","unresolved":true,"context_lines":[{"line_number":143,"context_line":"BIOS settings changes, then issues a single consolidated reboot.  If"},{"line_number":144,"context_line":"pending BIOS settings exist at the time the firmware step runs, they"},{"line_number":145,"context_line":"are staged via ``Bios/Settings`` PATCH and applied during the same"},{"line_number":146,"context_line":"reboot — no additional reboot required.  The operator does not need to"},{"line_number":147,"context_line":"separately schedule ``bios.apply_configuration`` when using this flow."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"**Out of scope:** In-band delivery."}],"source_content_type":"text/x-rst","patch_set":12,"id":"d8aa6c1f_4a7c9291","line":147,"range":{"start_line":146,"start_character":40,"end_line":147,"end_character":69},"updated":"2026-06-22 14:25:20.000000000","message":"bios.apply_configuration is a separate step in the service-steps list\nthe CLI example shows both a firmware step and a bios.apply_configuration step\ndoes the conductor auto-detect pending BIOS settings and stage them (even without an explicit bios.apply_configuration step), or sees bios.apply_configuration in the step list and folds it into the firmware reboot\nor both ?\nand if both are specified, does it merge them?","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6262a363e805c824ec2361f886962e82347ab7d1","unresolved":true,"context_lines":[{"line_number":143,"context_line":"BIOS settings changes, then issues a single consolidated reboot.  If"},{"line_number":144,"context_line":"pending BIOS settings exist at the time the firmware step runs, they"},{"line_number":145,"context_line":"are staged via ``Bios/Settings`` PATCH and applied during the same"},{"line_number":146,"context_line":"reboot — no additional reboot required.  The operator does not need to"},{"line_number":147,"context_line":"separately schedule ``bios.apply_configuration`` when using this flow."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"**Out of scope:** In-band delivery."}],"source_content_type":"text/x-rst","patch_set":12,"id":"56950945_8760edb3","line":147,"range":{"start_line":146,"start_character":40,"end_line":147,"end_character":69},"in_reply_to":"10dec18d_2941a250","updated":"2026-06-24 13:46:50.000000000","message":"yes, and I trust your testing process :)\nlet\u0027s maybe document the case even if it\u0027s remote","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"dd1c83be410396bf9f822440286c0500c8a21223","unresolved":false,"context_lines":[{"line_number":143,"context_line":"BIOS settings changes, then issues a single consolidated reboot.  If"},{"line_number":144,"context_line":"pending BIOS settings exist at the time the firmware step runs, they"},{"line_number":145,"context_line":"are staged via ``Bios/Settings`` PATCH and applied during the same"},{"line_number":146,"context_line":"reboot — no additional reboot required.  The operator does not need to"},{"line_number":147,"context_line":"separately schedule ``bios.apply_configuration`` when using this flow."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"**Out of scope:** In-band delivery."}],"source_content_type":"text/x-rst","patch_set":12,"id":"262ca52c_3870f549","line":147,"range":{"start_line":146,"start_character":40,"end_line":147,"end_character":69},"in_reply_to":"56950945_8760edb3","updated":"2026-06-26 11:45:32.000000000","message":"based on discussion with Dmitry and request for combining firmware updates with BIOS settings being de-prioritized, I pulled it from the spec so we can disregard this part for now I think.","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8b64aac5e7fd53ecb261bb0e8dfee437820328f1","unresolved":true,"context_lines":[{"line_number":143,"context_line":"BIOS settings changes, then issues a single consolidated reboot.  If"},{"line_number":144,"context_line":"pending BIOS settings exist at the time the firmware step runs, they"},{"line_number":145,"context_line":"are staged via ``Bios/Settings`` PATCH and applied during the same"},{"line_number":146,"context_line":"reboot — no additional reboot required.  The operator does not need to"},{"line_number":147,"context_line":"separately schedule ``bios.apply_configuration`` when using this flow."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"**Out of scope:** In-band delivery."}],"source_content_type":"text/x-rst","patch_set":12,"id":"10dec18d_2941a250","line":147,"range":{"start_line":146,"start_character":40,"end_line":147,"end_character":69},"in_reply_to":"d8aa6c1f_4a7c9291","updated":"2026-06-23 05:12:45.000000000","message":"Good question. In principle, my idea was that if the single-reboot-flow is requested (reboot\u003donce under current terms, parameter name may change in next revision based on our discussion), conductor will fold the bios.apply_configuration into the one firmware upgrades reboot. This is the scenario I tested on two Dells (R740, XR8620T) and two HPs (DL380, DL110). If we use the \"failsafe mode\", BIOS settings change should be applied after the last firmware update and the resulting reboot.\n\nIf there are pre-existing BIOS setting changes that are requested but not applied, a number of things could happen:\n* if BMC update is requested AND the machine uses Jobs to track changes (e.g. Dell XR8620t) I suspect the BIOS settings change will fail\n* if machine applies them immediately and just uses reboot to reload, I suspect pending settings will get applied (as long as they don\u0027t conflict with the BIOS settings change requested while requesting firmware updates - if these do, e.g. pre-existing pending change has sriov_global_enable\u003dtrue and the one requested with the firmware updates has sriov_global_enable\u003dfalse). \n\nOne major catch is if there is incompatibility between the pending BIOS setting change and a new BIOS version that\u0027s being requested (e.g. BIOS setting disappearing between version 2.1 and 2.2) but this should be rare, I\u0027d consider it a corner case.\n\nDid I fully answer your question?","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"eb7c891ad7ddc51494fd1de581d987eb0fae5323","unresolved":true,"context_lines":[{"line_number":315,"context_line":"Testing"},{"line_number":316,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Unit tests with fake Redfish responses covering BMC/non-BMC phasing,"},{"line_number":319,"context_line":"reboot consolidation, BIOS settings co-batching, and post-update"},{"line_number":320,"context_line":"validation.  Regression tests for single-component updates and for"},{"line_number":321,"context_line":"BIOS-settings-only changes (no firmware update present)."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Upgrades and Backwards Compatibility"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5e6be609_afe85fdd","line":321,"range":{"start_line":318,"start_character":0,"end_line":321,"end_character":56},"updated":"2026-06-22 14:25:20.000000000","message":"would be great to also have integration tests, maybe on 3rd party CI :/","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"dd1c83be410396bf9f822440286c0500c8a21223","unresolved":false,"context_lines":[{"line_number":315,"context_line":"Testing"},{"line_number":316,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Unit tests with fake Redfish responses covering BMC/non-BMC phasing,"},{"line_number":319,"context_line":"reboot consolidation, BIOS settings co-batching, and post-update"},{"line_number":320,"context_line":"validation.  Regression tests for single-component updates and for"},{"line_number":321,"context_line":"BIOS-settings-only changes (no firmware update present)."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Upgrades and Backwards Compatibility"}],"source_content_type":"text/x-rst","patch_set":12,"id":"94d702d7_7784ccdc","line":321,"range":{"start_line":318,"start_character":0,"end_line":321,"end_character":56},"in_reply_to":"5b9eaa55_a4bd719f","updated":"2026-06-26 11:45:32.000000000","message":"Done","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"8b64aac5e7fd53ecb261bb0e8dfee437820328f1","unresolved":true,"context_lines":[{"line_number":315,"context_line":"Testing"},{"line_number":316,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Unit tests with fake Redfish responses covering BMC/non-BMC phasing,"},{"line_number":319,"context_line":"reboot consolidation, BIOS settings co-batching, and post-update"},{"line_number":320,"context_line":"validation.  Regression tests for single-component updates and for"},{"line_number":321,"context_line":"BIOS-settings-only changes (no firmware update present)."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Upgrades and Backwards Compatibility"}],"source_content_type":"text/x-rst","patch_set":12,"id":"cf5ae9c0_4d0d434e","line":321,"range":{"start_line":318,"start_character":0,"end_line":321,"end_character":56},"in_reply_to":"5e6be609_afe85fdd","updated":"2026-06-23 05:12:45.000000000","message":"Agreed, but may be one of the harder aspects of this work. In case on-hardware testing proves non-trivial perhaps unleashing Claude on sushy-tools to improve firmware update emulation coverage (and realism) can be an attainable middle ground.","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6262a363e805c824ec2361f886962e82347ab7d1","unresolved":true,"context_lines":[{"line_number":315,"context_line":"Testing"},{"line_number":316,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Unit tests with fake Redfish responses covering BMC/non-BMC phasing,"},{"line_number":319,"context_line":"reboot consolidation, BIOS settings co-batching, and post-update"},{"line_number":320,"context_line":"validation.  Regression tests for single-component updates and for"},{"line_number":321,"context_line":"BIOS-settings-only changes (no firmware update present)."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Upgrades and Backwards Compatibility"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5b9eaa55_a4bd719f","line":321,"range":{"start_line":318,"start_character":0,"end_line":321,"end_character":56},"in_reply_to":"cf5ae9c0_4d0d434e","updated":"2026-06-24 13:46:50.000000000","message":"yeah, this is just a wish, not a requirement\nI mean, it would be great if we were able to involve hardware vendors and have their support in CI (not only for this of course)","commit_id":"2cc7f2399b4dc9e01e3f6d5e213e09caeb0e1e7a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":60,"context_line":"new ``firmware_reboot_mode`` parameter is proposed at the top level of"},{"line_number":61,"context_line":"the provisioning API service call.  Working proposal::"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  firmware_reboot_mode \u003d combined | each_step"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":66,"context_line":"behaviour consistent with the current implementation.  When"}],"source_content_type":"text/x-rst","patch_set":13,"id":"953884a4_648133d1","line":63,"updated":"2026-06-26 16:06:40.000000000","message":"Do we expect more modes eventually? Otherwise, it\u0027s more of a boolean along the lines of `allow_grouping_reboots`.\n\n(As an aside, Kubernetes APIs prefer enums like this but in Ironic we don\u0027t shy away from simple booleans.)","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":60,"context_line":"new ``firmware_reboot_mode`` parameter is proposed at the top level of"},{"line_number":61,"context_line":"the provisioning API service call.  Working proposal::"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  firmware_reboot_mode \u003d combined | each_step"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":66,"context_line":"behaviour consistent with the current implementation.  When"}],"source_content_type":"text/x-rst","patch_set":13,"id":"d16ec4a6_0263f913","line":63,"in_reply_to":"308037f9_569ac9ed","updated":"2026-07-06 10:19:20.000000000","message":"Good idea. allow_grouping_reboots it is, will update the doc.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"706fa0cb374e30ef67aa1c4e058c77c4942aa1e7","unresolved":true,"context_lines":[{"line_number":60,"context_line":"new ``firmware_reboot_mode`` parameter is proposed at the top level of"},{"line_number":61,"context_line":"the provisioning API service call.  Working proposal::"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  firmware_reboot_mode \u003d combined | each_step"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":66,"context_line":"behaviour consistent with the current implementation.  When"}],"source_content_type":"text/x-rst","patch_set":13,"id":"308037f9_569ac9ed","line":63,"in_reply_to":"953884a4_648133d1","updated":"2026-06-26 18:53:59.000000000","message":"This is simpler, I like the idea of a boolean","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":60,"context_line":"new ``firmware_reboot_mode`` parameter is proposed at the top level of"},{"line_number":61,"context_line":"the provisioning API service call.  Working proposal::"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  firmware_reboot_mode \u003d combined | each_step"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":66,"context_line":"behaviour consistent with the current implementation.  When"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1537263a_aa70cdd7","line":63,"in_reply_to":"d16ec4a6_0263f913","updated":"2026-07-07 01:04:53.000000000","message":"Done","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":66,"context_line":"behaviour consistent with the current implementation.  When"},{"line_number":67,"context_line":"``firmware_reboot_mode\u003dcombined`` is specified, the conductor"},{"line_number":68,"context_line":"consolidates all firmware-related reboots into one at the end of the"},{"line_number":69,"context_line":"service operation.  This parameter applies only to firmware update"},{"line_number":70,"context_line":"steps; other step types are unaffected."}],"source_content_type":"text/x-rst","patch_set":13,"id":"57ae271f_b06e486b","line":67,"updated":"2026-06-26 16:06:40.000000000","message":"nit: \"the conductor\" is technically correct, but it may be less confusing to talk about \"the Redfish firmware interface\"","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":66,"context_line":"behaviour consistent with the current implementation.  When"},{"line_number":67,"context_line":"``firmware_reboot_mode\u003dcombined`` is specified, the conductor"},{"line_number":68,"context_line":"consolidates all firmware-related reboots into one at the end of the"},{"line_number":69,"context_line":"service operation.  This parameter applies only to firmware update"},{"line_number":70,"context_line":"steps; other step types are unaffected."}],"source_content_type":"text/x-rst","patch_set":13,"id":"d50f7aad_dc84669c","line":67,"in_reply_to":"57ae271f_b06e486b","updated":"2026-07-06 10:19:20.000000000","message":"agreed","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"``each_step`` is the default in the first iteration, maintaining"},{"line_number":66,"context_line":"behaviour consistent with the current implementation.  When"},{"line_number":67,"context_line":"``firmware_reboot_mode\u003dcombined`` is specified, the conductor"},{"line_number":68,"context_line":"consolidates all firmware-related reboots into one at the end of the"},{"line_number":69,"context_line":"service operation.  This parameter applies only to firmware update"},{"line_number":70,"context_line":"steps; other step types are unaffected."}],"source_content_type":"text/x-rst","patch_set":13,"id":"7f8e47d2_e5f7838b","line":67,"in_reply_to":"d50f7aad_dc84669c","updated":"2026-07-07 01:04:53.000000000","message":"Done","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":89,"context_line":"reboot is issued in this case.  Note that on some vendors, previously"},{"line_number":90,"context_line":"staged updates may still be applied silently on the next reboot"},{"line_number":91,"context_line":"regardless of the overall operation failure; operators should be aware"},{"line_number":92,"context_line":"of this hardware-level behaviour."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"**Component rules:** validation stays strict (today: ``bmc``, ``bios``,"},{"line_number":95,"context_line":"``nic:.*`` [3]_).  New identifiers are added to the schema and cache only"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9f3df45e_6c0ef3b0","line":92,"updated":"2026-06-26 16:06:40.000000000","message":"What will we recommend as a way out of this situation?","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":89,"context_line":"reboot is issued in this case.  Note that on some vendors, previously"},{"line_number":90,"context_line":"staged updates may still be applied silently on the next reboot"},{"line_number":91,"context_line":"regardless of the overall operation failure; operators should be aware"},{"line_number":92,"context_line":"of this hardware-level behaviour."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"**Component rules:** validation stays strict (today: ``bmc``, ``bios``,"},{"line_number":95,"context_line":"``nic:.*`` [3]_).  New identifiers are added to the schema and cache only"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7c0f88e3_b8b95b97","line":92,"in_reply_to":"99243fe1_27f94416","updated":"2026-07-07 01:04:53.000000000","message":"I added a brief summary of ^ in the spec body.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":89,"context_line":"reboot is issued in this case.  Note that on some vendors, previously"},{"line_number":90,"context_line":"staged updates may still be applied silently on the next reboot"},{"line_number":91,"context_line":"regardless of the overall operation failure; operators should be aware"},{"line_number":92,"context_line":"of this hardware-level behaviour."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"**Component rules:** validation stays strict (today: ``bmc``, ``bios``,"},{"line_number":95,"context_line":"``nic:.*`` [3]_).  New identifiers are added to the schema and cache only"}],"source_content_type":"text/x-rst","patch_set":13,"id":"99243fe1_27f94416","line":92,"in_reply_to":"9f3df45e_6c0ef3b0","updated":"2026-07-06 10:19:20.000000000","message":"Real good question. To start with, I would document this failure mode with recovery instructions:\n\n1) check for messages indicating the cause of the failure (Ironic also needs to capture this and record in node_history/last_error)\n2) check for remaining, pending Tasks/Jobs and delete them if required\n3) abort servicing\n4) address the cause of the failure if needed and re-attempt failed operations if desired\n\nNow this may sound like a lot, but thinking about this more and looking back at lab testing I am not too worried. In cases of partial failures, here is what I observed\nI) More common failure mode: when we attempt to update component A, B, C and D, if A suceeds and B fails, the related Task/Job will fail before we get to C and D, so we err out before we get to C and D - as a result these should never get to the pending state.\nII) Less common failure mode: all Tasks/Jobs get created OK, failures happen after reboot (say A succeeds, B fails, then there is C and D). In this case if memory serves I would see the BMC attempt to run every Task/Job scheduled regardless of partial failures. TL;DR I did not see a scenario where we ended up with Pending tasks after partial failure.\n\nTo me this is sufficient for now, we can reconsider down the track once we\u0027ve seen real world failures.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":95,"context_line":"``nic:.*`` [3]_).  New identifiers are added to the schema and cache only"},{"line_number":96,"context_line":"after hardware validation; new non-BMC types use the batched path."},{"line_number":97,"context_line":"Candidate component types include ``raid``, ``nvme``, ``backplane``, and"},{"line_number":98,"context_line":"``tpm``."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"**Prerequisites:** On certain platforms, NIC updates require"},{"line_number":101,"context_line":"``NetworkAdapters`` visibility, which means an OS must be running (IPA"}],"source_content_type":"text/x-rst","patch_set":13,"id":"d328faa0_36ef6ee1","line":98,"updated":"2026-06-26 16:06:40.000000000","message":"nit: this paragraph seems unrelated to the goal of this spec","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":95,"context_line":"``nic:.*`` [3]_).  New identifiers are added to the schema and cache only"},{"line_number":96,"context_line":"after hardware validation; new non-BMC types use the batched path."},{"line_number":97,"context_line":"Candidate component types include ``raid``, ``nvme``, ``backplane``, and"},{"line_number":98,"context_line":"``tpm``."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"**Prerequisites:** On certain platforms, NIC updates require"},{"line_number":101,"context_line":"``NetworkAdapters`` visibility, which means an OS must be running (IPA"}],"source_content_type":"text/x-rst","patch_set":13,"id":"8348e7b5_825ba2b8","line":98,"in_reply_to":"3d9a7d82_16773578","updated":"2026-07-06 10:19:20.000000000","message":"Agreed.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":95,"context_line":"``nic:.*`` [3]_).  New identifiers are added to the schema and cache only"},{"line_number":96,"context_line":"after hardware validation; new non-BMC types use the batched path."},{"line_number":97,"context_line":"Candidate component types include ``raid``, ``nvme``, ``backplane``, and"},{"line_number":98,"context_line":"``tpm``."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"**Prerequisites:** On certain platforms, NIC updates require"},{"line_number":101,"context_line":"``NetworkAdapters`` visibility, which means an OS must be running (IPA"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7c7ef4a7_59814ded","line":98,"in_reply_to":"8348e7b5_825ba2b8","updated":"2026-07-07 01:04:53.000000000","message":"Done","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"706fa0cb374e30ef67aa1c4e058c77c4942aa1e7","unresolved":true,"context_lines":[{"line_number":95,"context_line":"``nic:.*`` [3]_).  New identifiers are added to the schema and cache only"},{"line_number":96,"context_line":"after hardware validation; new non-BMC types use the batched path."},{"line_number":97,"context_line":"Candidate component types include ``raid``, ``nvme``, ``backplane``, and"},{"line_number":98,"context_line":"``tpm``."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"**Prerequisites:** On certain platforms, NIC updates require"},{"line_number":101,"context_line":"``NetworkAdapters`` visibility, which means an OS must be running (IPA"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3d9a7d82_16773578","line":98,"in_reply_to":"d328faa0_36ef6ee1","updated":"2026-06-26 18:53:59.000000000","message":"nit: True but I like the additional context :)","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":107,"context_line":"Hypothetical CLI example (firmware updates, one non-BMC reboot)::"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"  openstack baremetal node service \\"},{"line_number":110,"context_line":"    --firmware-reboot-mode combined \\"},{"line_number":111,"context_line":"    --service-steps \u0027["},{"line_number":112,"context_line":"      {\"interface\": \"firmware\", \"step\": \"update\", \"args\": {\"settings\": ["},{"line_number":113,"context_line":"        {\"component\": \"bmc\", \"url\": \"https://example.com/bmc.bin\"},"}],"source_content_type":"text/x-rst","patch_set":13,"id":"98dc81d1_0f97a21f","line":110,"updated":"2026-06-26 16:06:40.000000000","message":"This is going to be inside the step, not here. We\u0027re not adding global parameters specific to one implementation of one interface.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":107,"context_line":"Hypothetical CLI example (firmware updates, one non-BMC reboot)::"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"  openstack baremetal node service \\"},{"line_number":110,"context_line":"    --firmware-reboot-mode combined \\"},{"line_number":111,"context_line":"    --service-steps \u0027["},{"line_number":112,"context_line":"      {\"interface\": \"firmware\", \"step\": \"update\", \"args\": {\"settings\": ["},{"line_number":113,"context_line":"        {\"component\": \"bmc\", \"url\": \"https://example.com/bmc.bin\"},"}],"source_content_type":"text/x-rst","patch_set":13,"id":"f87a3438_25324b6b","line":110,"in_reply_to":"98dc81d1_0f97a21f","updated":"2026-07-06 10:19:20.000000000","message":"Agreed, this is a relict of my hope to include BIOS settings changes in this flow. If we limit scope to firmware updates this is unnecessarily increasing problem scope for no benefit.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":107,"context_line":"Hypothetical CLI example (firmware updates, one non-BMC reboot)::"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"  openstack baremetal node service \\"},{"line_number":110,"context_line":"    --firmware-reboot-mode combined \\"},{"line_number":111,"context_line":"    --service-steps \u0027["},{"line_number":112,"context_line":"      {\"interface\": \"firmware\", \"step\": \"update\", \"args\": {\"settings\": ["},{"line_number":113,"context_line":"        {\"component\": \"bmc\", \"url\": \"https://example.com/bmc.bin\"},"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9f6c0802_d9ed2e53","line":110,"in_reply_to":"f87a3438_25324b6b","updated":"2026-07-07 01:04:53.000000000","message":"Done","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"**Out of scope:** BIOS settings co-batching (may be revisited"},{"line_number":127,"context_line":"separately), in-band delivery."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":13,"id":"2303c769_5da4995a","line":127,"updated":"2026-06-26 16:06:40.000000000","message":"This may be confusing for anyone who hasn\u0027t followed our discussions, let\u0027s drop it.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"**Out of scope:** BIOS settings co-batching (may be revisited"},{"line_number":127,"context_line":"separately), in-band delivery."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":13,"id":"e7e78636_99d5ed44","line":127,"in_reply_to":"2303c769_5da4995a","updated":"2026-07-06 10:19:20.000000000","message":"Agreed, same as above.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"**Out of scope:** BIOS settings co-batching (may be revisited"},{"line_number":127,"context_line":"separately), in-band delivery."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":13,"id":"4404f4b2_c606ad36","line":127,"in_reply_to":"e7e78636_99d5ed44","updated":"2026-07-07 01:04:53.000000000","message":"Done","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"706fa0cb374e30ef67aa1c4e058c77c4942aa1e7","unresolved":true,"context_lines":[{"line_number":133,"context_line":"* Per-component reboot logic — rejected (poor performance, growing"},{"line_number":134,"context_line":"  complexity)."},{"line_number":135,"context_line":"* BMC in the same batch as non-BMC — rejected (known failures)."},{"line_number":136,"context_line":"* Automatic reordering of ``settings`` — rejected; operator supplies"},{"line_number":137,"context_line":"  hardware-optimal component order."},{"line_number":138,"context_line":"* Unvalidated open-ended component names — rejected (Ironic validates"},{"line_number":139,"context_line":"  today; caching/post-check required for new types)."}],"source_content_type":"text/x-rst","patch_set":13,"id":"d0ef691d_bf42e034","line":136,"updated":"2026-06-26 18:53:59.000000000","message":"I was wondering why? Is it impossible for ironic to generalize this for hardware, thats why?","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":false,"context_lines":[{"line_number":133,"context_line":"* Per-component reboot logic — rejected (poor performance, growing"},{"line_number":134,"context_line":"  complexity)."},{"line_number":135,"context_line":"* BMC in the same batch as non-BMC — rejected (known failures)."},{"line_number":136,"context_line":"* Automatic reordering of ``settings`` — rejected; operator supplies"},{"line_number":137,"context_line":"  hardware-optimal component order."},{"line_number":138,"context_line":"* Unvalidated open-ended component names — rejected (Ironic validates"},{"line_number":139,"context_line":"  today; caching/post-check required for new types)."}],"source_content_type":"text/x-rst","patch_set":13,"id":"73014611_20571faa","line":136,"in_reply_to":"d0ef691d_bf42e034","updated":"2026-07-06 10:19:20.000000000","message":"My thinking is two-fold: Ironic is aimed at experienced power-users. They don\u0027t need hand-holding and often, when they disagree with what Ironic would do by default, they have a good reason.\n\nPlus we need to give people to accommodate hardware that behaves in unusual ways.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"A new optional ``firmware_reboot_mode`` parameter on the provisioning"},{"line_number":158,"context_line":"API service call (``PUT /v1/nodes/{node}/states/provision`` with"},{"line_number":159,"context_line":"``target\u003dservice``):"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"* **Parameter:** ``firmware_reboot_mode``"},{"line_number":162,"context_line":"* **Values:** ``combined`` | ``each_step``"}],"source_content_type":"text/x-rst","patch_set":13,"id":"4b6678dd_e8cd9702","line":159,"updated":"2026-06-26 16:06:40.000000000","message":"See above, it has to be an argument to the step.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"A new optional ``firmware_reboot_mode`` parameter on the provisioning"},{"line_number":158,"context_line":"API service call (``PUT /v1/nodes/{node}/states/provision`` with"},{"line_number":159,"context_line":"``target\u003dservice``):"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"* **Parameter:** ``firmware_reboot_mode``"},{"line_number":162,"context_line":"* **Values:** ``combined`` | ``each_step``"}],"source_content_type":"text/x-rst","patch_set":13,"id":"bcfb023e_b01d2f91","line":159,"in_reply_to":"1c6c267b_8b506646","updated":"2026-07-07 01:04:53.000000000","message":"Done","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"A new optional ``firmware_reboot_mode`` parameter on the provisioning"},{"line_number":158,"context_line":"API service call (``PUT /v1/nodes/{node}/states/provision`` with"},{"line_number":159,"context_line":"``target\u003dservice``):"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"* **Parameter:** ``firmware_reboot_mode``"},{"line_number":162,"context_line":"* **Values:** ``combined`` | ``each_step``"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1c6c267b_8b506646","line":159,"in_reply_to":"4b6678dd_e8cd9702","updated":"2026-07-06 10:19:20.000000000","message":"Agreed.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":163,"context_line":"* **Default:** ``each_step`` (preserves current behaviour)"},{"line_number":164,"context_line":"* **Microversion:** required (new parameter)"},{"line_number":165,"context_line":"* **Scope:** applies only to ``firmware.update`` steps; other step"},{"line_number":166,"context_line":"  types are unaffected."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"When ``firmware_reboot_mode\u003dcombined``, the conductor suppresses"},{"line_number":169,"context_line":"per-step reboots for firmware steps and issues a single consolidated"}],"source_content_type":"text/x-rst","patch_set":13,"id":"24bee758_0a24f3c8","line":166,"updated":"2026-06-26 16:06:40.000000000","message":"... for this ^^^ reason.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":163,"context_line":"* **Default:** ``each_step`` (preserves current behaviour)"},{"line_number":164,"context_line":"* **Microversion:** required (new parameter)"},{"line_number":165,"context_line":"* **Scope:** applies only to ``firmware.update`` steps; other step"},{"line_number":166,"context_line":"  types are unaffected."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"When ``firmware_reboot_mode\u003dcombined``, the conductor suppresses"},{"line_number":169,"context_line":"per-step reboots for firmware steps and issues a single consolidated"}],"source_content_type":"text/x-rst","patch_set":13,"id":"2c70937c_a4577411","line":166,"in_reply_to":"24bee758_0a24f3c8","updated":"2026-07-06 10:19:20.000000000","message":"Agreed.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":163,"context_line":"* **Default:** ``each_step`` (preserves current behaviour)"},{"line_number":164,"context_line":"* **Microversion:** required (new parameter)"},{"line_number":165,"context_line":"* **Scope:** applies only to ``firmware.update`` steps; other step"},{"line_number":166,"context_line":"  types are unaffected."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"When ``firmware_reboot_mode\u003dcombined``, the conductor suppresses"},{"line_number":169,"context_line":"per-step reboots for firmware steps and issues a single consolidated"}],"source_content_type":"text/x-rst","patch_set":13,"id":"6eba1b82_4bc43334","line":166,"in_reply_to":"2c70937c_a4577411","updated":"2026-07-07 01:04:53.000000000","message":"Done","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":238,"context_line":"------------------"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"Fewer host reboots (primary win).  Step may hold the node lock longer;"},{"line_number":241,"context_line":"bound task polling."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"Other deployer impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3274f9dc_21d43ab5","line":241,"updated":"2026-06-26 16:06:40.000000000","message":"I think the step releases the lock while polling (I really hope it does)","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":238,"context_line":"------------------"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"Fewer host reboots (primary win).  Step may hold the node lock longer;"},{"line_number":241,"context_line":"bound task polling."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"Other deployer impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"45a262e3_8123e8ce","line":241,"in_reply_to":"3274f9dc_21d43ab5","updated":"2026-07-06 10:19:20.000000000","message":"checked, it seems it does release the lock while polling:\n\n\"Each poll iteration acquires a shared lock (default for node_periodic), does its check, and releases it.\" (Claude, code references he quotes cross-check)","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":238,"context_line":"------------------"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"Fewer host reboots (primary win).  Step may hold the node lock longer;"},{"line_number":241,"context_line":"bound task polling."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"Other deployer impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"ded57ff3_3aa6861c","line":241,"in_reply_to":"45a262e3_8123e8ce","updated":"2026-07-07 01:04:53.000000000","message":"Done","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":276,"context_line":"2. BMC / non-BMC phasing in ``RedfishFirmware.update()``."},{"line_number":277,"context_line":"3. Task tracking and platform-specific submission pacing."},{"line_number":278,"context_line":"4. Single non-BMC reboot and post-reboot validation."},{"line_number":279,"context_line":"5. Extend schema + caching for new component types (RAID first on"},{"line_number":280,"context_line":"   available hardware)."},{"line_number":281,"context_line":"6. Tests, docs, third-party CI."},{"line_number":282,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"d74eeaa8_6a5b40f8","line":279,"updated":"2026-06-26 16:06:40.000000000","message":"Let\u0027s not lump new components together with this spec please.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":276,"context_line":"2. BMC / non-BMC phasing in ``RedfishFirmware.update()``."},{"line_number":277,"context_line":"3. Task tracking and platform-specific submission pacing."},{"line_number":278,"context_line":"4. Single non-BMC reboot and post-reboot validation."},{"line_number":279,"context_line":"5. Extend schema + caching for new component types (RAID first on"},{"line_number":280,"context_line":"   available hardware)."},{"line_number":281,"context_line":"6. Tests, docs, third-party CI."},{"line_number":282,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"7a3fe4d5_e4f2ed75","line":279,"in_reply_to":"943cf92b_1ba1bcfc","updated":"2026-07-07 01:04:53.000000000","message":"Done","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":276,"context_line":"2. BMC / non-BMC phasing in ``RedfishFirmware.update()``."},{"line_number":277,"context_line":"3. Task tracking and platform-specific submission pacing."},{"line_number":278,"context_line":"4. Single non-BMC reboot and post-reboot validation."},{"line_number":279,"context_line":"5. Extend schema + caching for new component types (RAID first on"},{"line_number":280,"context_line":"   available hardware)."},{"line_number":281,"context_line":"6. Tests, docs, third-party CI."},{"line_number":282,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"943cf92b_1ba1bcfc","line":279,"in_reply_to":"d74eeaa8_6a5b40f8","updated":"2026-07-06 10:19:20.000000000","message":"Agreed, will drop this for now.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":278,"context_line":"4. Single non-BMC reboot and post-reboot validation."},{"line_number":279,"context_line":"5. Extend schema + caching for new component types (RAID first on"},{"line_number":280,"context_line":"   available hardware)."},{"line_number":281,"context_line":"6. Tests, docs, third-party CI."},{"line_number":282,"context_line":""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1354f245_04ff7834","line":281,"updated":"2026-06-26 16:06:40.000000000","message":"Let\u0027s call out the docs specifically. We\u0027ll need to explain the trade-offs and what \"the correct sequence\" of the updates is.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":278,"context_line":"4. Single non-BMC reboot and post-reboot validation."},{"line_number":279,"context_line":"5. Extend schema + caching for new component types (RAID first on"},{"line_number":280,"context_line":"   available hardware)."},{"line_number":281,"context_line":"6. Tests, docs, third-party CI."},{"line_number":282,"context_line":""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":13,"id":"796640c7_04f8072b","line":281,"in_reply_to":"1354f245_04ff7834","updated":"2026-07-06 10:19:20.000000000","message":"Agreed, will do.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":278,"context_line":"4. Single non-BMC reboot and post-reboot validation."},{"line_number":279,"context_line":"5. Extend schema + caching for new component types (RAID first on"},{"line_number":280,"context_line":"   available hardware)."},{"line_number":281,"context_line":"6. Tests, docs, third-party CI."},{"line_number":282,"context_line":""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":13,"id":"05c03daf_d37b9585","line":281,"in_reply_to":"796640c7_04f8072b","updated":"2026-07-07 01:04:53.000000000","message":"Done","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"149d8bdc37b030cc28b191e7833873e8e6f379e8","unresolved":true,"context_lines":[{"line_number":298,"context_line":"Integration tests on real hardware via third-party CI would be"},{"line_number":299,"context_line":"valuable but are not a hard requirement.  Improving sushy-tools"},{"line_number":300,"context_line":"firmware update emulation (to better simulate staging, task tracking,"},{"line_number":301,"context_line":"and reboot behaviour) is an attainable middle ground."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"Upgrades and Backwards Compatibility"}],"source_content_type":"text/x-rst","patch_set":13,"id":"d1638bcf_3e3e4ce2","line":301,"updated":"2026-06-26 16:06:40.000000000","message":"I would say this is a hard requirement.\n\nIt\u0027s unfortunate that we don\u0027t have any CI jobs covering this feature, except for the in-progress BMO test.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"2d6ad3f000f9fb9acffc08359d89cd586811e3ac","unresolved":false,"context_lines":[{"line_number":298,"context_line":"Integration tests on real hardware via third-party CI would be"},{"line_number":299,"context_line":"valuable but are not a hard requirement.  Improving sushy-tools"},{"line_number":300,"context_line":"firmware update emulation (to better simulate staging, task tracking,"},{"line_number":301,"context_line":"and reboot behaviour) is an attainable middle ground."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"Upgrades and Backwards Compatibility"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9900364d_b0a1493a","line":301,"in_reply_to":"c2178c02_8fda0696","updated":"2026-07-07 01:04:53.000000000","message":"Done","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":true,"context_lines":[{"line_number":298,"context_line":"Integration tests on real hardware via third-party CI would be"},{"line_number":299,"context_line":"valuable but are not a hard requirement.  Improving sushy-tools"},{"line_number":300,"context_line":"firmware update emulation (to better simulate staging, task tracking,"},{"line_number":301,"context_line":"and reboot behaviour) is an attainable middle ground."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"Upgrades and Backwards Compatibility"}],"source_content_type":"text/x-rst","patch_set":13,"id":"c2178c02_8fda0696","line":301,"in_reply_to":"d1638bcf_3e3e4ce2","updated":"2026-07-06 10:19:20.000000000","message":"Noted.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"706fa0cb374e30ef67aa1c4e058c77c4942aa1e7","unresolved":true,"context_lines":[{"line_number":307,"context_line":"Backwards compatible.  Existing ``bmc``/``bios``/``nic:\u003cId\u003e`` steps are"},{"line_number":308,"context_line":"unchanged; new component names are additive.  Operators may perform"},{"line_number":309,"context_line":"multi-component updates in one reboot cycle or continue updating each"},{"line_number":310,"context_line":"component separately."},{"line_number":311,"context_line":""},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"7527165d_cf438678","line":310,"updated":"2026-06-26 18:53:59.000000000","message":"plus the default behaviour will match the old behaviour of rebooting after each step?","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b19b5b3d2329f09487258356b4f535f829e7e1f5","unresolved":false,"context_lines":[{"line_number":307,"context_line":"Backwards compatible.  Existing ``bmc``/``bios``/``nic:\u003cId\u003e`` steps are"},{"line_number":308,"context_line":"unchanged; new component names are additive.  Operators may perform"},{"line_number":309,"context_line":"multi-component updates in one reboot cycle or continue updating each"},{"line_number":310,"context_line":"component separately."},{"line_number":311,"context_line":""},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"95686347_4fe5daba","line":310,"in_reply_to":"7527165d_cf438678","updated":"2026-07-06 10:19:20.000000000","message":"Yes, if allow_grouping_reboots (adopted new name here) isn\u0027t set to True we will reboot after each component.","commit_id":"79c8ffd6c865104e2d6fe13af0b22e9a6728b68f"}]}
