)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7a1ccdf9139747d451e0139476f3f7038d4e5413","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2a7086be_d9f38b4d","line":11,"updated":"2026-01-12 21:48:50.000000000","message":"Assuming this works; add a release note and a Assisted-by","commit_id":"5aa43ef9999b35cd6fbdec14d6f053f2b06a0c7f"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"92c61a2b2381225614d1883cc7b98d8b65af0f12","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3bf03080_b3a58f17","line":11,"in_reply_to":"2a7086be_d9f38b4d","updated":"2026-01-12 23:27:16.000000000","message":"and credit stevebaker","commit_id":"5aa43ef9999b35cd6fbdec14d6f053f2b06a0c7f"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"50d79669c81891fd3c0e5165b05c3aee47c27e7b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f8f699dc_b36567c4","line":11,"in_reply_to":"3bf03080_b3a58f17","updated":"2026-01-20 03:14:18.000000000","message":"Done","commit_id":"5aa43ef9999b35cd6fbdec14d6f053f2b06a0c7f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b049c9662b0c07ac301cb179559d0647de83aea9","unresolved":true,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The autodetect interface is now enabled by default in"},{"line_number":25,"context_line":"``enabled_deploy_interfaces``. A new configuration option"},{"line_number":26,"context_line":"``autodetect_deploy_interfaces`` (default: ``[\u0027bootc\u0027, \u0027direct\u0027]``)"},{"line_number":27,"context_line":"controls which interfaces can be auto-selected and their priority order."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The original deploy interface is preserved in driver_internal_info"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"02034fe1_b4619d66","line":26,"range":{"start_line":26,"start_character":47,"end_line":26,"end_character":52},"updated":"2026-01-29 14:43:32.000000000","message":"I\u0027m just going to highlight the code doesn\u0027t actually enable bootc as a default and I\u0027m confused as to why not.","commit_id":"3da4725cd132ce279d827616fdabcd2558bc93d4"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"d394403bacf9593b0dd2121b2426d867cdb5ba8c","unresolved":true,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The autodetect interface is now enabled by default in"},{"line_number":25,"context_line":"``enabled_deploy_interfaces``. A new configuration option"},{"line_number":26,"context_line":"``autodetect_deploy_interfaces`` (default: ``[\u0027bootc\u0027, \u0027direct\u0027]``)"},{"line_number":27,"context_line":"controls which interfaces can be auto-selected and their priority order."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The original deploy interface is preserved in driver_internal_info"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"4987e75e_7fcd7d25","line":26,"range":{"start_line":26,"start_character":47,"end_line":26,"end_character":52},"in_reply_to":"02034fe1_b4619d66","updated":"2026-01-29 20:50:56.000000000","message":"There was a review discussion with Jay above which made the valid point that bootc needs to be in *both* enabled_deploy_interfaces and autodetect_deploy_interfaces or *neither*. I opted for neither in this change so there can be a follow-up change which enables bootc, to be reviewed on its own merit. I can do that early next week. I\u0027ll update this for now to fix the release note and commit message.","commit_id":"3da4725cd132ce279d827616fdabcd2558bc93d4"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"99ccd677403018b2034f773621e8d69480874179","unresolved":true,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The autodetect interface is now enabled by default in"},{"line_number":25,"context_line":"``enabled_deploy_interfaces``. A new configuration option"},{"line_number":26,"context_line":"``autodetect_deploy_interfaces`` (default: ``[\u0027bootc\u0027, \u0027direct\u0027]``)"},{"line_number":27,"context_line":"controls which interfaces can be auto-selected and their priority order."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The original deploy interface is preserved in driver_internal_info"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"2f39d59f_33e96fcb","line":26,"range":{"start_line":26,"start_character":47,"end_line":26,"end_character":52},"in_reply_to":"4987e75e_7fcd7d25","updated":"2026-02-01 21:37:57.000000000","message":"I\u0027ve updated the release note, docs, and commit message here. There is now a change added to this series to enable bootc by default https://review.opendev.org/c/openstack/ironic/+/975365","commit_id":"3da4725cd132ce279d827616fdabcd2558bc93d4"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"232b36a64bc46ee82b0ed6de70097906dd46e64c","unresolved":true,"context_lines":[{"line_number":12,"context_line":"the need to manually specify different deploy interfaces for different"},{"line_number":13,"context_line":"image types."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The autodetect interface inspects the deployment at the begginning of the"},{"line_number":16,"context_line":"deployment and switches to the most appropriate deploy interface from the"},{"line_number":17,"context_line":"configured list in ``autodetect_deploy_interfaces``. The detection logic"},{"line_number":18,"context_line":"checks interfaces in priority order, so if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"ed271d3c_4c60c777","line":15,"range":{"start_line":15,"start_character":56,"end_line":15,"end_character":66},"updated":"2026-02-06 16:03:47.000000000","message":"nit: beginning","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b4cb13b0f425706316533efb4df03bbf45eb52b3","unresolved":false,"context_lines":[{"line_number":12,"context_line":"the need to manually specify different deploy interfaces for different"},{"line_number":13,"context_line":"image types."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The autodetect interface inspects the deployment at the begginning of the"},{"line_number":16,"context_line":"deployment and switches to the most appropriate deploy interface from the"},{"line_number":17,"context_line":"configured list in ``autodetect_deploy_interfaces``. The detection logic"},{"line_number":18,"context_line":"checks interfaces in priority order, so if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"e738f33f_f7b7e238","line":15,"range":{"start_line":15,"start_character":56,"end_line":15,"end_character":66},"in_reply_to":"ed271d3c_4c60c777","updated":"2026-02-12 10:11:31.000000000","message":"Done","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"5aeae3d8722e021a799e1215b399045e84053f5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8be8f72a_90440c6d","updated":"2026-01-15 02:19:30.000000000","message":"Here is a WIP autodetect deploy interface to get some feedback on the approach and interface while I flesh out the testing. Feedback welcome","commit_id":"98773b958d8d35e25d1e044bb500a75159115f5b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7ed4a255b10194e482bdf802a14bfc5a677a6181","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"257f3228_061b139d","updated":"2026-01-15 16:55:19.000000000","message":"Overall, looks pretty good. I have concern on the ramdisk interface and I think some more data points may be needed. I\u0027ll prod JayF about this as well.","commit_id":"98773b958d8d35e25d1e044bb500a75159115f5b"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ab80be7948ce7a8174f17f9270bd0719dcadc8ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"319fe24a_69f29736","updated":"2026-01-20 22:24:00.000000000","message":"retry py313 RETRY_LIMIT","commit_id":"48aa393f249238d85ae5ef81cc37939a689bb94f"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"e4c4d55d767285ba97155680113ea49aed9daca0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"32e63e81_8d635e35","updated":"2026-01-21 23:02:21.000000000","message":"I have added CI and docs as changes in this series. Let me know if there is preference to squash them into this","commit_id":"b7dbe494306d1fcabb239094ef0a3386c6e6bead"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"30cd0c56d5c0e3ecc063020b86b9a51c61b9a658","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"a91c38be_4c4f4515","updated":"2026-01-21 22:31:31.000000000","message":"Removing WIP from the title, I have successfully deployed a bootc image with autodetect using metal3","commit_id":"b7dbe494306d1fcabb239094ef0a3386c6e6bead"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"00cfa74f0076a03ab51476ecd1fd8025879d3d40","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"e9d00ea2_bead5d24","updated":"2026-01-23 23:04:28.000000000","message":"I think this has changed enough that maybe my +2 can count? Happy to +1 a swap of the default for bootc in a separate change if that\u0027s decided (or add it here and I can restore my +2, I\u0027m flexible :D)","commit_id":"9685bab3575cc3766b560d74e93c643ea3b33c6a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"48c0d9ddb349dd0b4a137a4693ec05cfebd843ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"9a06db7a_8aed2720","updated":"2026-01-29 18:57:45.000000000","message":"Raising -1 just for visibility, for now.","commit_id":"3da4725cd132ce279d827616fdabcd2558bc93d4"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"6941fc5b7decbfb8ce637701c009098b60cd5acc","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"5049222b_3722bb55","updated":"2026-02-10 18:40:51.000000000","message":"-1 is to ensure we update the release note and commit message based on how these have been refactored","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"232b36a64bc46ee82b0ed6de70097906dd46e64c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"1a144604_9b3a96fd","updated":"2026-02-06 16:03:47.000000000","message":"Thank you for the patch, Steve. A couple suggestions in-line. Also, given potential issues with error handling, perhaps it\u0027s worth extending test coverage for BootcAgentDeploy.supports_deploy()","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b4cb13b0f425706316533efb4df03bbf45eb52b3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"4998947a_e518429e","in_reply_to":"5049222b_3722bb55","updated":"2026-02-12 10:11:31.000000000","message":"The commit message and release note were already updated to reflect what is being committed, specifically the following has an *if*:\n\n    so if ``autodetect_deploy_interfaces`` is set to ``[\u0027bootc\u0027, \u0027direct\u0027]``\n\nand further down:\n\n    ``autodetect_deploy_interfaces`` (default: ``[\u0027direct\u0027]``)","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f527848c54413150e2e11f6d9a5da0935a27fc61","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"75de8c04_5e0dae69","updated":"2026-02-16 21:40:23.000000000","message":"recheck metal3-integration is broken outside of Ironic","commit_id":"6c599876f336ec5f64c90ce93389d29c2caf1c5d"}],"ironic/conductor/cleaning.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"41f0c2d284c9dd75f44f84e334381638f634b8a2","unresolved":true,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    try:"},{"line_number":79,"context_line":"        # Give the deploy interface the opportunity to switch interfaces"},{"line_number":80,"context_line":"        task.driver.deploy.switch_interface(task)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # NOTE(ghe): Valid power and network values are needed to perform"},{"line_number":83,"context_line":"        # a cleaning."}],"source_content_type":"text/x-python","patch_set":10,"id":"cdb1cfbb_76d183ae","line":80,"updated":"2026-01-23 02:34:30.000000000","message":"This seems to be causing cleaning to stall with no logging indicating why. I\u0027ll try to get something logged","commit_id":"15d20e210a2976cd59ddfed853a7f39d5c4e8a80"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"3053bb0250e774ada68cfb6c4c8fc1522fff0db9","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    try:"},{"line_number":79,"context_line":"        # Give the deploy interface the opportunity to switch interfaces"},{"line_number":80,"context_line":"        task.driver.deploy.switch_interface(task)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # NOTE(ghe): Valid power and network values are needed to perform"},{"line_number":83,"context_line":"        # a cleaning."}],"source_content_type":"text/x-python","patch_set":10,"id":"40f60a2c_17605cdc","line":80,"in_reply_to":"cdb1cfbb_76d183ae","updated":"2026-01-25 23:27:46.000000000","message":"I don\u0027t think this change is related to https://review.opendev.org/c/openstack/ironic/+/974260 job failing. The deploy interface switches to direct and back for cleaning and deploy","commit_id":"15d20e210a2976cd59ddfed853a7f39d5c4e8a80"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"6941fc5b7decbfb8ce637701c009098b60cd5acc","unresolved":true,"context_lines":[{"line_number":79,"context_line":"                                            tear_down_cleaning\u003dFalse)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    try:"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # NOTE(ghe): Valid power and network values are needed to perform"},{"line_number":84,"context_line":"        # a cleaning."},{"line_number":85,"context_line":"        task.driver.power.validate(task)"}],"source_content_type":"text/x-python","patch_set":16,"id":"dd1c1a42_350f4b0e","line":82,"updated":"2026-02-10 18:40:51.000000000","message":"intentional whitespace change?","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b4cb13b0f425706316533efb4df03bbf45eb52b3","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                                            tear_down_cleaning\u003dFalse)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    try:"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # NOTE(ghe): Valid power and network values are needed to perform"},{"line_number":84,"context_line":"        # a cleaning."},{"line_number":85,"context_line":"        task.driver.power.validate(task)"}],"source_content_type":"text/x-python","patch_set":16,"id":"007d29fb_0b6b2b4d","line":82,"in_reply_to":"dd1c1a42_350f4b0e","updated":"2026-02-12 10:11:31.000000000","message":"Done","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"}],"ironic/conf/default.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"3431f44949464521534d6fd16fa469e4ef0cc13d","unresolved":true,"context_lines":[{"line_number":140,"context_line":"    cfg.StrOpt(\u0027default_deploy_interface\u0027,"},{"line_number":141,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027deploy\u0027)),"},{"line_number":142,"context_line":"    cfg.ListOpt(\u0027autodetect_deploy_interfaces\u0027,"},{"line_number":143,"context_line":"                default\u003d[\u0027bootc\u0027, \u0027direct\u0027],"},{"line_number":144,"context_line":"                help\u003d_(\u0027List of deploy interfaces that the \u0027"},{"line_number":145,"context_line":"                       \u0027autodetect deploy interface is allowed to \u0027"},{"line_number":146,"context_line":"                       \u0027switch to. The order of interfaces in the list \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"62c1fc35_9391619b","line":143,"updated":"2026-01-22 16:13:58.000000000","message":"(moving this comment to the correct patch)\n\nThis, as default-configured, will enable use of a not-enabled deploy interface (bootc).\n\nWe should either:\n1) enable bootc by default\nor\n2) configure this to only use default-enabled interfaces by default\n\nAND\n\n1) ensure that if a conductor tries to start up, with $notEnabledInterface in autodetect_deploy_interface, that we error\n\n\nas this is written, I\u0027m fairly sure we\u0027re backdoor-enabling bootc interface even if operators haven\u0027t enabled it","commit_id":"3efe0183d14a060f2ebf4de400ab2e679b32a579"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7ebecbd4e16b9df98f209e973d5875b5d6a1d3bd","unresolved":true,"context_lines":[{"line_number":140,"context_line":"    cfg.StrOpt(\u0027default_deploy_interface\u0027,"},{"line_number":141,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027deploy\u0027)),"},{"line_number":142,"context_line":"    cfg.ListOpt(\u0027autodetect_deploy_interfaces\u0027,"},{"line_number":143,"context_line":"                default\u003d[\u0027bootc\u0027, \u0027direct\u0027],"},{"line_number":144,"context_line":"                help\u003d_(\u0027List of deploy interfaces that the \u0027"},{"line_number":145,"context_line":"                       \u0027autodetect deploy interface is allowed to \u0027"},{"line_number":146,"context_line":"                       \u0027switch to. The order of interfaces in the list \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"d9f3be21_62799b7c","line":143,"in_reply_to":"0776642a_9807e4c9","updated":"2026-01-22 23:17:19.000000000","message":"This isn\u0027t done yet. `bootc` deploy interface is not enabled by default; but it\u0027s enabled in the autodetect deploy interface which is enabled by default. This means we\u0027re still stealth-enabling bootc.","commit_id":"3efe0183d14a060f2ebf4de400ab2e679b32a579"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"d3f4e036ce256da2e4e289caba0419c52ef1b914","unresolved":true,"context_lines":[{"line_number":140,"context_line":"    cfg.StrOpt(\u0027default_deploy_interface\u0027,"},{"line_number":141,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027deploy\u0027)),"},{"line_number":142,"context_line":"    cfg.ListOpt(\u0027autodetect_deploy_interfaces\u0027,"},{"line_number":143,"context_line":"                default\u003d[\u0027bootc\u0027, \u0027direct\u0027],"},{"line_number":144,"context_line":"                help\u003d_(\u0027List of deploy interfaces that the \u0027"},{"line_number":145,"context_line":"                       \u0027autodetect deploy interface is allowed to \u0027"},{"line_number":146,"context_line":"                       \u0027switch to. The order of interfaces in the list \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"15d3a039_a4c92750","line":143,"in_reply_to":"28fb21b9_384eb86d","updated":"2026-01-23 19:05:39.000000000","message":"I\u0027m fine with defaulting it to enabled; I actually think it\u0027s a smart pattern: if something gets added to autodetect, make it enabled by default (I\u0027m sure we\u0027ll end up with an exception)","commit_id":"3efe0183d14a060f2ebf4de400ab2e679b32a579"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"19e097abdc8472b543c052dc59fb2c6668fa00e7","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    cfg.StrOpt(\u0027default_deploy_interface\u0027,"},{"line_number":141,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027deploy\u0027)),"},{"line_number":142,"context_line":"    cfg.ListOpt(\u0027autodetect_deploy_interfaces\u0027,"},{"line_number":143,"context_line":"                default\u003d[\u0027bootc\u0027, \u0027direct\u0027],"},{"line_number":144,"context_line":"                help\u003d_(\u0027List of deploy interfaces that the \u0027"},{"line_number":145,"context_line":"                       \u0027autodetect deploy interface is allowed to \u0027"},{"line_number":146,"context_line":"                       \u0027switch to. The order of interfaces in the list \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"0776642a_9807e4c9","line":143,"in_reply_to":"62c1fc35_9391619b","updated":"2026-01-22 21:34:56.000000000","message":"Done","commit_id":"3efe0183d14a060f2ebf4de400ab2e679b32a579"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"41f0c2d284c9dd75f44f84e334381638f634b8a2","unresolved":true,"context_lines":[{"line_number":140,"context_line":"    cfg.StrOpt(\u0027default_deploy_interface\u0027,"},{"line_number":141,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027deploy\u0027)),"},{"line_number":142,"context_line":"    cfg.ListOpt(\u0027autodetect_deploy_interfaces\u0027,"},{"line_number":143,"context_line":"                default\u003d[\u0027bootc\u0027, \u0027direct\u0027],"},{"line_number":144,"context_line":"                help\u003d_(\u0027List of deploy interfaces that the \u0027"},{"line_number":145,"context_line":"                       \u0027autodetect deploy interface is allowed to \u0027"},{"line_number":146,"context_line":"                       \u0027switch to. The order of interfaces in the list \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"28fb21b9_384eb86d","line":143,"in_reply_to":"6e6293cf_afa18a2e","updated":"2026-01-23 02:34:30.000000000","message":"For now I\u0027ll remove bootc from autodetect_deploy_interfaces. It is documented that they can add it if bootc is required.","commit_id":"3efe0183d14a060f2ebf4de400ab2e679b32a579"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b2245e128c42a96186f64cf52a04f9c8f8e98a44","unresolved":true,"context_lines":[{"line_number":140,"context_line":"    cfg.StrOpt(\u0027default_deploy_interface\u0027,"},{"line_number":141,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027deploy\u0027)),"},{"line_number":142,"context_line":"    cfg.ListOpt(\u0027autodetect_deploy_interfaces\u0027,"},{"line_number":143,"context_line":"                default\u003d[\u0027bootc\u0027, \u0027direct\u0027],"},{"line_number":144,"context_line":"                help\u003d_(\u0027List of deploy interfaces that the \u0027"},{"line_number":145,"context_line":"                       \u0027autodetect deploy interface is allowed to \u0027"},{"line_number":146,"context_line":"                       \u0027switch to. The order of interfaces in the list \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"6e6293cf_afa18a2e","line":143,"in_reply_to":"d9f3be21_62799b7c","updated":"2026-01-23 00:59:52.000000000","message":"Ah bootc was in enabled_deploy_interfaces only in my imagination.\n\nI don\u0027t see any downside to adding it to enabled_deploy_interfaces now except it is relatively niche. The direct interface already interacts with container image registries for artefact support.\n\nI\u0027d be fine with adding it to enabled_deploy_interfaces as part of this change unless somebody objects","commit_id":"3efe0183d14a060f2ebf4de400ab2e679b32a579"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b049c9662b0c07ac301cb179559d0647de83aea9","unresolved":true,"context_lines":[{"line_number":140,"context_line":"    cfg.StrOpt(\u0027default_deploy_interface\u0027,"},{"line_number":141,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027deploy\u0027)),"},{"line_number":142,"context_line":"    cfg.ListOpt(\u0027autodetect_deploy_interfaces\u0027,"},{"line_number":143,"context_line":"                default\u003d[\u0027direct\u0027],"},{"line_number":144,"context_line":"                help\u003d_(\u0027List of deploy interfaces that the \u0027"},{"line_number":145,"context_line":"                       \u0027autodetect deploy interface is allowed to \u0027"},{"line_number":146,"context_line":"                       \u0027switch to. The order of interfaces in the list \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"652558a2_de2acecf","line":143,"updated":"2026-01-29 14:43:32.000000000","message":"I\u0027m just going to highlight this value doesn\u0027t match the commit message.","commit_id":"3da4725cd132ce279d827616fdabcd2558bc93d4"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"6941fc5b7decbfb8ce637701c009098b60cd5acc","unresolved":true,"context_lines":[{"line_number":140,"context_line":"    cfg.StrOpt(\u0027default_deploy_interface\u0027,"},{"line_number":141,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027deploy\u0027)),"},{"line_number":142,"context_line":"    cfg.ListOpt(\u0027autodetect_deploy_interfaces\u0027,"},{"line_number":143,"context_line":"                default\u003d[\u0027direct\u0027],"},{"line_number":144,"context_line":"                help\u003d_(\u0027List of deploy interfaces that the \u0027"},{"line_number":145,"context_line":"                       \u0027autodetect deploy interface is allowed to \u0027"},{"line_number":146,"context_line":"                       \u0027switch to. The order of interfaces in the list \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"77ded6ab_ff13f6be","line":143,"in_reply_to":"652558a2_de2acecf","updated":"2026-02-10 18:40:51.000000000","message":"Please update the commit message to reflect what\u0027s actually being committed.","commit_id":"3da4725cd132ce279d827616fdabcd2558bc93d4"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b4cb13b0f425706316533efb4df03bbf45eb52b3","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    cfg.StrOpt(\u0027default_deploy_interface\u0027,"},{"line_number":141,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027deploy\u0027)),"},{"line_number":142,"context_line":"    cfg.ListOpt(\u0027autodetect_deploy_interfaces\u0027,"},{"line_number":143,"context_line":"                default\u003d[\u0027direct\u0027],"},{"line_number":144,"context_line":"                help\u003d_(\u0027List of deploy interfaces that the \u0027"},{"line_number":145,"context_line":"                       \u0027autodetect deploy interface is allowed to \u0027"},{"line_number":146,"context_line":"                       \u0027switch to. The order of interfaces in the list \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"86612e45_2a9c22ff","line":143,"in_reply_to":"77ded6ab_ff13f6be","updated":"2026-02-12 10:11:31.000000000","message":"I should have marked this as resolved when I pushed the next change","commit_id":"3da4725cd132ce279d827616fdabcd2558bc93d4"}],"ironic/conf/deploy.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"9d60d54c20a5602ce29d81a5775cd15d3e6ef77b","unresolved":true,"context_lines":[{"line_number":250,"context_line":"               help\u003d_(\u0027Default deploy interface to use when the autodetect \u0027"},{"line_number":251,"context_line":"                      \u0027deploy interface cannot determine a specific interface \u0027"},{"line_number":252,"context_line":"                      \u0027from image metadata. This is used as the fallback when \u0027"},{"line_number":253,"context_line":"                      \u0027no specific image characteristics are detected.\u0027)),"},{"line_number":254,"context_line":"]"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f4b813b_02309b5b","line":253,"updated":"2026-01-13 08:01:20.000000000","message":"How about a list autodetect_deploy_interfaces where each interface in the list is called in order to determine what to switch to, and the last interface in the list is used if none of the previous interfaces take it?\n\nThis gives precedence attempts and a default fallback in one config option, the behaviour of which will be documented.","commit_id":"e0f4060c79a7504effd97a3bed4c389ea79e40f2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4da8d60ba5fbdc6dec8058acbccb55d81ede521","unresolved":true,"context_lines":[{"line_number":250,"context_line":"               help\u003d_(\u0027Default deploy interface to use when the autodetect \u0027"},{"line_number":251,"context_line":"                      \u0027deploy interface cannot determine a specific interface \u0027"},{"line_number":252,"context_line":"                      \u0027from image metadata. This is used as the fallback when \u0027"},{"line_number":253,"context_line":"                      \u0027no specific image characteristics are detected.\u0027)),"},{"line_number":254,"context_line":"]"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"8b82679b_f482a2a7","line":253,"in_reply_to":"5f4b813b_02309b5b","updated":"2026-01-13 11:16:51.000000000","message":"Yeah, I was thinking about a list as well, where priority matters.","commit_id":"e0f4060c79a7504effd97a3bed4c389ea79e40f2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7ad1fb7d8db64add4af1f7188b76c59eca93bda6","unresolved":true,"context_lines":[{"line_number":250,"context_line":"               help\u003d_(\u0027Default deploy interface to use when the autodetect \u0027"},{"line_number":251,"context_line":"                      \u0027deploy interface cannot determine a specific interface \u0027"},{"line_number":252,"context_line":"                      \u0027from image metadata. This is used as the fallback when \u0027"},{"line_number":253,"context_line":"                      \u0027no specific image characteristics are detected.\u0027)),"},{"line_number":254,"context_line":"]"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"f0ea0e69_1ff5b571","line":253,"in_reply_to":"8b82679b_f482a2a7","updated":"2026-01-13 16:28:29.000000000","message":"I really, really like this idea. Then the interfaces just need to implement a detect() or similar. We\u0027d have to add a method to the deploy interface but it\u0027d be worth it.","commit_id":"e0f4060c79a7504effd97a3bed4c389ea79e40f2"}],"ironic/drivers/generic.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4da8d60ba5fbdc6dec8058acbccb55d81ede521","unresolved":true,"context_lines":[{"line_number":51,"context_line":"    def supported_deploy_interfaces(self):"},{"line_number":52,"context_line":"        \"\"\"List of supported deploy interfaces.\"\"\""},{"line_number":53,"context_line":"        return [agent.AgentDeploy, ansible_deploy.AnsibleDeploy,"},{"line_number":54,"context_line":"                autodetect.AutodetectDeploy, ramdisk.RamdiskDeploy,"},{"line_number":55,"context_line":"                pxe.PXEAnacondaDeploy, agent.BootcAgentDeploy,"},{"line_number":56,"context_line":"                agent.CustomAgentDeploy]"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"d17beaaf_0b17597e","line":54,"updated":"2026-01-13 11:16:51.000000000","message":"There may be a good argument for putting the new interface as the first.","commit_id":"e0f4060c79a7504effd97a3bed4c389ea79e40f2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"50d79669c81891fd3c0e5165b05c3aee47c27e7b","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def supported_deploy_interfaces(self):"},{"line_number":52,"context_line":"        \"\"\"List of supported deploy interfaces.\"\"\""},{"line_number":53,"context_line":"        return [agent.AgentDeploy, ansible_deploy.AnsibleDeploy,"},{"line_number":54,"context_line":"                autodetect.AutodetectDeploy, ramdisk.RamdiskDeploy,"},{"line_number":55,"context_line":"                pxe.PXEAnacondaDeploy, agent.BootcAgentDeploy,"},{"line_number":56,"context_line":"                agent.CustomAgentDeploy]"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"8a5337ed_ff541e2f","line":54,"in_reply_to":"d17beaaf_0b17597e","updated":"2026-01-20 03:14:18.000000000","message":"Done","commit_id":"e0f4060c79a7504effd97a3bed4c389ea79e40f2"}],"ironic/drivers/modules/agent.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"92c61a2b2381225614d1883cc7b98d8b65af0f12","unresolved":true,"context_lines":[{"line_number":572,"context_line":"        build_instance_info_for_deploy when autodetect deploy interface"},{"line_number":573,"context_line":"        is active, switching to the detected interface and retrying."},{"line_number":574,"context_line":"        \"\"\""},{"line_number":575,"context_line":"        try:"},{"line_number":576,"context_line":"            task.node.instance_info \u003d ("},{"line_number":577,"context_line":"                deploy_utils.build_instance_info_for_deploy(task))"},{"line_number":578,"context_line":"            task.node.save()"}],"source_content_type":"text/x-python","patch_set":2,"id":"d1e5c116_6c956c6c","line":575,"updated":"2026-01-12 23:27:16.000000000","message":"This probably should go in a less common place.","commit_id":"e0f4060c79a7504effd97a3bed4c389ea79e40f2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"50d79669c81891fd3c0e5165b05c3aee47c27e7b","unresolved":false,"context_lines":[{"line_number":572,"context_line":"        build_instance_info_for_deploy when autodetect deploy interface"},{"line_number":573,"context_line":"        is active, switching to the detected interface and retrying."},{"line_number":574,"context_line":"        \"\"\""},{"line_number":575,"context_line":"        try:"},{"line_number":576,"context_line":"            task.node.instance_info \u003d ("},{"line_number":577,"context_line":"                deploy_utils.build_instance_info_for_deploy(task))"},{"line_number":578,"context_line":"            task.node.save()"}],"source_content_type":"text/x-python","patch_set":2,"id":"b19a953e_97c93482","line":575,"in_reply_to":"bbce58e4_eadf1fa1","updated":"2026-01-20 03:14:18.000000000","message":"Done","commit_id":"e0f4060c79a7504effd97a3bed4c389ea79e40f2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"9d60d54c20a5602ce29d81a5775cd15d3e6ef77b","unresolved":true,"context_lines":[{"line_number":572,"context_line":"        build_instance_info_for_deploy when autodetect deploy interface"},{"line_number":573,"context_line":"        is active, switching to the detected interface and retrying."},{"line_number":574,"context_line":"        \"\"\""},{"line_number":575,"context_line":"        try:"},{"line_number":576,"context_line":"            task.node.instance_info \u003d ("},{"line_number":577,"context_line":"                deploy_utils.build_instance_info_for_deploy(task))"},{"line_number":578,"context_line":"            task.node.save()"}],"source_content_type":"text/x-python","patch_set":2,"id":"bbce58e4_eadf1fa1","line":575,"in_reply_to":"d1e5c116_6c956c6c","updated":"2026-01-13 08:01:20.000000000","message":"I did try doing the switch during prepare, as this does. It was too late in the process but I can\u0027t now recall why. I think it will need to be done during validate, or during an explicit new method call added to the deploy interface class which is called just before validate. A new method would be best since switching the interface in validate really has nothing to do with validation.","commit_id":"e0f4060c79a7504effd97a3bed4c389ea79e40f2"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"232b36a64bc46ee82b0ed6de70097906dd46e64c","unresolved":true,"context_lines":[{"line_number":1018,"context_line":"        \"\"\""},{"line_number":1019,"context_line":"        node \u003d task.node"},{"line_number":1020,"context_line":"        image_source \u003d node.instance_info.get(\u0027image_source\u0027)"},{"line_number":1021,"context_line":"        if not image_source.startswith(\u0027oci://\u0027):"},{"line_number":1022,"context_line":"            return False"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        # Detect if the container image is actually a bootc image, which"}],"source_content_type":"text/x-python","patch_set":16,"id":"7e6168fd_4fb83863","line":1021,"range":{"start_line":1021,"start_character":8,"end_line":1021,"end_character":49},"updated":"2026-02-06 16:03:47.000000000","message":"suggestion: add handling scenario where image_source is None","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b4cb13b0f425706316533efb4df03bbf45eb52b3","unresolved":false,"context_lines":[{"line_number":1018,"context_line":"        \"\"\""},{"line_number":1019,"context_line":"        node \u003d task.node"},{"line_number":1020,"context_line":"        image_source \u003d node.instance_info.get(\u0027image_source\u0027)"},{"line_number":1021,"context_line":"        if not image_source.startswith(\u0027oci://\u0027):"},{"line_number":1022,"context_line":"            return False"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        # Detect if the container image is actually a bootc image, which"}],"source_content_type":"text/x-python","patch_set":16,"id":"ca867278_639ea275","line":1021,"range":{"start_line":1021,"start_character":8,"end_line":1021,"end_character":49},"in_reply_to":"7e6168fd_4fb83863","updated":"2026-02-12 10:11:31.000000000","message":"Done","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"232b36a64bc46ee82b0ed6de70097906dd46e64c","unresolved":true,"context_lines":[{"line_number":1021,"context_line":"        if not image_source.startswith(\u0027oci://\u0027):"},{"line_number":1022,"context_line":"            return False"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        # Detect if the container image is actually a bootc image, which"},{"line_number":1025,"context_line":"        # requires changing the deploy interface"},{"line_number":1026,"context_line":"        oci \u003d image_service.OciImageService()"},{"line_number":1027,"context_line":"        image_auth \u003d image_service.get_image_service_auth_override("},{"line_number":1028,"context_line":"            node)"},{"line_number":1029,"context_line":"        oci.set_image_auth(image_source, image_auth)"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"        image_download_source \u003d deploy_utils.get_image_download_source("},{"line_number":1032,"context_line":"            node)"},{"line_number":1033,"context_line":"        image_info \u003d oci.identify_specific_image("},{"line_number":1034,"context_line":"            image_source, image_download_source,"},{"line_number":1035,"context_line":"            node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":1036,"context_line":"        )"},{"line_number":1037,"context_line":"        return image_info.get(\u0027image_disk_format\u0027) \u003d\u003d \u0027bootc\u0027"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":""},{"line_number":1040,"context_line":"class AgentRAID(base.RAIDInterface):"}],"source_content_type":"text/x-python","patch_set":16,"id":"2afe444b_61d6a4b0","line":1037,"range":{"start_line":1024,"start_character":8,"end_line":1037,"end_character":61},"updated":"2026-02-06 16:03:47.000000000","message":"suggestion: consider adding try-except to handle issues","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b4cb13b0f425706316533efb4df03bbf45eb52b3","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"        if not image_source.startswith(\u0027oci://\u0027):"},{"line_number":1022,"context_line":"            return False"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        # Detect if the container image is actually a bootc image, which"},{"line_number":1025,"context_line":"        # requires changing the deploy interface"},{"line_number":1026,"context_line":"        oci \u003d image_service.OciImageService()"},{"line_number":1027,"context_line":"        image_auth \u003d image_service.get_image_service_auth_override("},{"line_number":1028,"context_line":"            node)"},{"line_number":1029,"context_line":"        oci.set_image_auth(image_source, image_auth)"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"        image_download_source \u003d deploy_utils.get_image_download_source("},{"line_number":1032,"context_line":"            node)"},{"line_number":1033,"context_line":"        image_info \u003d oci.identify_specific_image("},{"line_number":1034,"context_line":"            image_source, image_download_source,"},{"line_number":1035,"context_line":"            node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":1036,"context_line":"        )"},{"line_number":1037,"context_line":"        return image_info.get(\u0027image_disk_format\u0027) \u003d\u003d \u0027bootc\u0027"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":""},{"line_number":1040,"context_line":"class AgentRAID(base.RAIDInterface):"}],"source_content_type":"text/x-python","patch_set":16,"id":"e7511f76_c7a2709e","line":1037,"range":{"start_line":1024,"start_character":8,"end_line":1037,"end_character":61},"in_reply_to":"2afe444b_61d6a4b0","updated":"2026-02-12 10:11:31.000000000","message":"Done","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"}],"ironic/drivers/modules/agent_base.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"29e36b590fe08a73da1e1840e1a90739b2c1d11a","unresolved":true,"context_lines":[{"line_number":784,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":785,"context_line":"        \"\"\""},{"line_number":786,"context_line":"        original_deploy_interface \u003d task.node.driver_internal_info.get("},{"line_number":787,"context_line":"            \u0027original_deploy_interface\u0027)"},{"line_number":788,"context_line":"        if original_deploy_interface:"},{"line_number":789,"context_line":"            LOG.info(\u0027Restoring deploy interface from \"%s\" to \"%s\" \u0027"},{"line_number":790,"context_line":"                     \u0027for node %s\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"6cc645fb_c86db396","line":787,"updated":"2026-02-06 17:11:18.000000000","message":"nit: ideally it should be a separate database field","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b4cb13b0f425706316533efb4df03bbf45eb52b3","unresolved":true,"context_lines":[{"line_number":784,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":785,"context_line":"        \"\"\""},{"line_number":786,"context_line":"        original_deploy_interface \u003d task.node.driver_internal_info.get("},{"line_number":787,"context_line":"            \u0027original_deploy_interface\u0027)"},{"line_number":788,"context_line":"        if original_deploy_interface:"},{"line_number":789,"context_line":"            LOG.info(\u0027Restoring deploy interface from \"%s\" to \"%s\" \u0027"},{"line_number":790,"context_line":"                     \u0027for node %s\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"a0c27563_9b4fbe0b","line":787,"in_reply_to":"4d07ac68_03b55532","updated":"2026-02-12 10:11:31.000000000","message":"My mindset is that driver_internal_info is where state for interfaces is stored, and this is state for the autodetect interface","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"6941fc5b7decbfb8ce637701c009098b60cd5acc","unresolved":true,"context_lines":[{"line_number":784,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":785,"context_line":"        \"\"\""},{"line_number":786,"context_line":"        original_deploy_interface \u003d task.node.driver_internal_info.get("},{"line_number":787,"context_line":"            \u0027original_deploy_interface\u0027)"},{"line_number":788,"context_line":"        if original_deploy_interface:"},{"line_number":789,"context_line":"            LOG.info(\u0027Restoring deploy interface from \"%s\" to \"%s\" \u0027"},{"line_number":790,"context_line":"                     \u0027for node %s\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"4d07ac68_03b55532","line":787,"in_reply_to":"6cc645fb_c86db396","updated":"2026-02-10 18:40:51.000000000","message":"current_deploy_interface would be a good name if we went this route. It\u0027d be a nice enahncement","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"}],"ironic/drivers/modules/autodetect.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5972ac124953e722a05fc5c145187ed263780407","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        # Autodetect deploy interface does not perform any actual deployment."},{"line_number":120,"context_line":"        # This is handled by AgentBaseMixin.prepare() for actual deployments"},{"line_number":121,"context_line":"        pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @METRICS.timer(\u0027AutodetectDeploy.clean_up\u0027)"},{"line_number":124,"context_line":"    def clean_up(self, task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5478e7cd_a9c50c68","line":121,"updated":"2026-01-15 16:59:21.000000000","message":"Should these raise like deploy() does? Just as a safeguard.","commit_id":"98773b958d8d35e25d1e044bb500a75159115f5b"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"dec0140a583730daaec25601ffb651267f53ab97","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        # Autodetect deploy interface does not perform any actual deployment."},{"line_number":120,"context_line":"        # This is handled by AgentBaseMixin.prepare() for actual deployments"},{"line_number":121,"context_line":"        pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @METRICS.timer(\u0027AutodetectDeploy.clean_up\u0027)"},{"line_number":124,"context_line":"    def clean_up(self, task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"f64f9b89_0111c0b7","line":121,"in_reply_to":"5478e7cd_a9c50c68","updated":"2026-01-16 04:24:07.000000000","message":"yeah may as well","commit_id":"98773b958d8d35e25d1e044bb500a75159115f5b"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"41f0c2d284c9dd75f44f84e334381638f634b8a2","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        # Autodetect deploy interface does not perform any actual deployment."},{"line_number":120,"context_line":"        # This is handled by AgentBaseMixin.prepare() for actual deployments"},{"line_number":121,"context_line":"        pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @METRICS.timer(\u0027AutodetectDeploy.clean_up\u0027)"},{"line_number":124,"context_line":"    def clean_up(self, task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ef8a0dd9_04e5f853","line":121,"in_reply_to":"73b19a4c_6119c2c8","updated":"2026-01-23 02:34:30.000000000","message":"Done","commit_id":"98773b958d8d35e25d1e044bb500a75159115f5b"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"50d79669c81891fd3c0e5165b05c3aee47c27e7b","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        # Autodetect deploy interface does not perform any actual deployment."},{"line_number":120,"context_line":"        # This is handled by AgentBaseMixin.prepare() for actual deployments"},{"line_number":121,"context_line":"        pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @METRICS.timer(\u0027AutodetectDeploy.clean_up\u0027)"},{"line_number":124,"context_line":"    def clean_up(self, task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"73b19a4c_6119c2c8","line":121,"in_reply_to":"f64f9b89_0111c0b7","updated":"2026-01-20 03:14:18.000000000","message":"I think just prepare though. Lets not complicate clean_up, tear_down, take_over","commit_id":"98773b958d8d35e25d1e044bb500a75159115f5b"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"6941fc5b7decbfb8ce637701c009098b60cd5acc","unresolved":true,"context_lines":[{"line_number":52,"context_line":"                    \"enabled_deploy_interfaces. Please add \u0027%(interface)s\u0027 \""},{"line_number":53,"context_line":"                    \"to enabled_deploy_interfaces or remove it from \""},{"line_number":54,"context_line":"                    \"autodetect_deploy_interfaces.\")"},{"line_number":55,"context_line":"                % {\u0027interface\u0027: interface_name})"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_properties(self):"},{"line_number":58,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":16,"id":"9c20947c_a06468ba","line":55,"updated":"2026-02-10 18:40:51.000000000","message":"Ideally we\u0027d have a way to know if an interface makes sense at all as an autodetect -- but supports_deploy is a boolean, default true. So for instance, if I had autodetect_deploy_interfaces \u003d [ramdisk, deploy], I believe ramdisk would be used 100% of the time because it statically returns true.","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b4cb13b0f425706316533efb4df03bbf45eb52b3","unresolved":true,"context_lines":[{"line_number":52,"context_line":"                    \"enabled_deploy_interfaces. Please add \u0027%(interface)s\u0027 \""},{"line_number":53,"context_line":"                    \"to enabled_deploy_interfaces or remove it from \""},{"line_number":54,"context_line":"                    \"autodetect_deploy_interfaces.\")"},{"line_number":55,"context_line":"                % {\u0027interface\u0027: interface_name})"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_properties(self):"},{"line_number":58,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":16,"id":"71a7b356_f432dedc","line":55,"in_reply_to":"9c20947c_a06468ba","updated":"2026-02-12 10:11:31.000000000","message":"Yes this is correct. The way to know currently is to read the documentation, which will have notes on deploy interfaces which support autodetect. It is definitely an option to change supports_deploy default to false, which means the warning on line 185 will always be logged when the direct (last) interface is chosen","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"29e36b590fe08a73da1e1840e1a90739b2c1d11a","unresolved":true,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        node \u003d task.node"},{"line_number":193,"context_line":"        # Save the original deploy interface to restore later"},{"line_number":194,"context_line":"        node.set_driver_internal_info("},{"line_number":195,"context_line":"            \u0027original_deploy_interface\u0027,"},{"line_number":196,"context_line":"            task.node.deploy_interface)"},{"line_number":197,"context_line":"        # Update the node\u0027s deploy interface name"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f027120_4ff7a594","line":194,"updated":"2026-02-06 17:11:18.000000000","message":"I didn\u0027t give it a lot of thought but I wonder if setting `instance_info[deploy_interface]` is easier. Although.. maybe it will be removed *before* cleaning.\n\nOr you could just proxy all calls to the real interface. Then you don\u0027t even need to change anything, nor do you really need new driver interface calls.","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b4cb13b0f425706316533efb4df03bbf45eb52b3","unresolved":true,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        node \u003d task.node"},{"line_number":193,"context_line":"        # Save the original deploy interface to restore later"},{"line_number":194,"context_line":"        node.set_driver_internal_info("},{"line_number":195,"context_line":"            \u0027original_deploy_interface\u0027,"},{"line_number":196,"context_line":"            task.node.deploy_interface)"},{"line_number":197,"context_line":"        # Update the node\u0027s deploy interface name"}],"source_content_type":"text/x-python","patch_set":16,"id":"514460aa_d866ff87","line":194,"in_reply_to":"9f027120_4ff7a594","updated":"2026-02-12 10:11:31.000000000","message":"I\u0027ll look into the idea of proxying calls to the real interface, as I have a slight concern about accounting for all the exit paths required to switch back to autodetect.\n\nDetection is expensive though (hitting image registries etc) so it really needs to be cached somehow right after deploy starts.","commit_id":"296093cf12f6b7132796b1eeafc1f2f5f20d2937"}],"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"92c61a2b2381225614d1883cc7b98d8b65af0f12","unresolved":true,"context_lines":[{"line_number":1673,"context_line":""},{"line_number":1674,"context_line":"    # If autodetect deploy interface is active, raise exception to signal"},{"line_number":1675,"context_line":"    # that the conductor should switch to the detected interface."},{"line_number":1676,"context_line":"    if is_autodetect:"},{"line_number":1677,"context_line":"        if not detected_interface:"},{"line_number":1678,"context_line":"            detected_interface \u003d ("},{"line_number":1679,"context_line":"                CONF.deploy.default_autodetect_deploy_interface)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b1e18816_4822104d","line":1676,"updated":"2026-01-12 23:27:16.000000000","message":"Wondering if this is OK. Feels like a layering violation, but hard to have a meta-deploy_interface without crossing some boundaries.","commit_id":"5aa43ef9999b35cd6fbdec14d6f053f2b06a0c7f"}],"ironic/drivers/modules/ramdisk.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7ed4a255b10194e482bdf802a14bfc5a677a6181","unresolved":true,"context_lines":[{"line_number":114,"context_line":"        instance_info \u003d task.node.instance_info"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # instance info must not have image_source set"},{"line_number":117,"context_line":"        if instance_info.get(\u0027image_source\u0027):"},{"line_number":118,"context_line":"            return False"},{"line_number":119,"context_line":"        # instance info needs to specify either kernel/ramdisk or boot_iso"},{"line_number":120,"context_line":"        if instance_info.get(\u0027kernel\u0027) and instance_info.get(\u0027ramdisk\u0027):"},{"line_number":121,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"4aa18ca2_d3192cc5","line":118,"range":{"start_line":117,"start_character":0,"end_line":118,"end_character":24},"updated":"2026-01-15 16:55:19.000000000","message":"So, we may *always* have this for something triggered by nova, since you ask for the parent glance image and it gets populated across.\n\nThe issue is that you can end up with a parent record of sorts with glance and have other linked records. We almost need to see if there is a backing file, I guess. Not entirely sure, perhaps an operator can chime in with example records of what they would like to see/use.","commit_id":"98773b958d8d35e25d1e044bb500a75159115f5b"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5972ac124953e722a05fc5c145187ed263780407","unresolved":true,"context_lines":[{"line_number":114,"context_line":"        instance_info \u003d task.node.instance_info"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # instance info must not have image_source set"},{"line_number":117,"context_line":"        if instance_info.get(\u0027image_source\u0027):"},{"line_number":118,"context_line":"            return False"},{"line_number":119,"context_line":"        # instance info needs to specify either kernel/ramdisk or boot_iso"},{"line_number":120,"context_line":"        if instance_info.get(\u0027kernel\u0027) and instance_info.get(\u0027ramdisk\u0027):"},{"line_number":121,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"d717ba8b_722f3be3","line":118,"range":{"start_line":117,"start_character":0,"end_line":118,"end_character":24},"in_reply_to":"4aa18ca2_d3192cc5","updated":"2026-01-15 16:59:21.000000000","message":"I would suggest splitting the ramdisk implementation out of this, landing a version that\u0027s bootc only, then letting me follow that pattern for ramdisk. I don\u0027t think I have all the answers (or the time to fetch them in short order) to fix this, and I don\u0027t wanna hold up the part you all need.","commit_id":"98773b958d8d35e25d1e044bb500a75159115f5b"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"dec0140a583730daaec25601ffb651267f53ab97","unresolved":true,"context_lines":[{"line_number":114,"context_line":"        instance_info \u003d task.node.instance_info"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # instance info must not have image_source set"},{"line_number":117,"context_line":"        if instance_info.get(\u0027image_source\u0027):"},{"line_number":118,"context_line":"            return False"},{"line_number":119,"context_line":"        # instance info needs to specify either kernel/ramdisk or boot_iso"},{"line_number":120,"context_line":"        if instance_info.get(\u0027kernel\u0027) and instance_info.get(\u0027ramdisk\u0027):"},{"line_number":121,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"2b43d205_581a5020","line":118,"range":{"start_line":117,"start_character":0,"end_line":118,"end_character":24},"in_reply_to":"d717ba8b_722f3be3","updated":"2026-01-16 04:24:07.000000000","message":"yeah I was going to leave out anaconda for someone else to implement too. I\u0027ll remove ramdisk.","commit_id":"98773b958d8d35e25d1e044bb500a75159115f5b"}]}
