)]}'
{"/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":"575bb2dd31c4ac6c15a05a8f4efaefd8111e5a4b","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ie0bea85f2e435eea667e94b86d6e7bef7b0cf262"},{"line_number":18,"context_line":"Assisted-by: Claude Code 2.0"},{"line_number":19,"context_line":"Resolves-Bug: #2130646"},{"line_number":20,"context_line":"Signed-off-by: Steve Baker \u003csbaker@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"af0482f5_0763a938","line":19,"updated":"2025-12-05 20:20:17.000000000","message":"Closes-bug or Related-bug","commit_id":"0b4ea8dab7bb8b7c3552e2621dc87c6a2bc3e748"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"cf300d74fb832674af69b79defeb11cb20613bfb","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ie0bea85f2e435eea667e94b86d6e7bef7b0cf262"},{"line_number":18,"context_line":"Assisted-by: Claude Code 2.0"},{"line_number":19,"context_line":"Resolves-Bug: #2130646"},{"line_number":20,"context_line":"Signed-off-by: Steve Baker \u003csbaker@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"732484da_696ea985","line":19,"in_reply_to":"af0482f5_0763a938","updated":"2025-12-15 02:14:40.000000000","message":"Done","commit_id":"0b4ea8dab7bb8b7c3552e2621dc87c6a2bc3e748"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"dc06f4723256557e0074eb2cf24fc1892fbbc054","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"22862dd9_6e4b9e32","updated":"2025-11-11 21:28:53.000000000","message":"Some discussion required, but a good start to enable it.","commit_id":"e33c3b05f01d28637aad031e86d16d93cfe6d98e"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f2e002089d174c3801994016c0c6d69df5fdcccd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1088cf4a_260be249","updated":"2025-12-08 20:50:33.000000000","message":"Setting this to WIP while I exercise it with real deploys","commit_id":"9ab5c0f7fadee02ae26ce778082793b948952e0b"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"053820b68fdbdc98c4da7f49806b295831613215","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"1b05847d_c45090cd","updated":"2026-01-08 23:12:06.000000000","message":"I have validated this change on an upstream metal3 setup, successfully provisioning a bootc image","commit_id":"e93a12ffa79136afcb585187677b4ff5f54de41f"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a2febc399e89f352b23ed0577369b0ed31849a5c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"0498ec5a_08929bf6","updated":"2026-01-15 02:15:23.000000000","message":"I\u0027m going to switch to change https://review.opendev.org/c/openstack/ironic/+/973187 to try the autodetect deploy interface instead","commit_id":"e93a12ffa79136afcb585187677b4ff5f54de41f"}],"ironic/conductor/deployments.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ec0fb4858ca4f57861ee730445c07f8da9bb4e38","unresolved":true,"context_lines":[{"line_number":177,"context_line":"    try:"},{"line_number":178,"context_line":"        task.driver.power.validate(task)"},{"line_number":179,"context_line":"        try:"},{"line_number":180,"context_line":"            task.driver.deploy.validate(task)"},{"line_number":181,"context_line":"        except exception.ChangeInterfaceException as e:"},{"line_number":182,"context_line":"            # A different deploy interface is required for this deployment."},{"line_number":183,"context_line":"            # Switch to the preferred interface temporarily."}],"source_content_type":"text/x-python","patch_set":7,"id":"1cbc9c11_d65ed2bf","line":180,"updated":"2026-01-12 15:33:00.000000000","message":"I know we\u0027re running a certain risk of over-abstractions, but there are already two requests to change the deploy interface, and anaconda may join. I don\u0027t feel well about using validation of one interface to point at other interfaces.\n\nIt looks like we need two concepts. First, some sort of \"dynamic interfaces\" (I hate the word \"dynamic\" here, feel free to use a better one). It may make sense to give the admin a knob to control it, e.g.\n\n```ini\ndynamic_deploy_interfaces \u003d agent,bootc\n```\n\nNow we know which interfaces can be chosen at will, and we can iterate with something. The next bit we need IMO is a new `dynamic` deploy interface that does this: on `validate` it picks the suitable actual interface from the enabled list (by iterating over them in the listed order) and caches it somewhere (DII again?). The remaining calls simply proxy to the right implementations.\n\nThoughts?","commit_id":"e93a12ffa79136afcb585187677b4ff5f54de41f"},{"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":"6cdf5d27c2fe79512a933fe4cd867bde486f204e","unresolved":true,"context_lines":[{"line_number":177,"context_line":"    try:"},{"line_number":178,"context_line":"        task.driver.power.validate(task)"},{"line_number":179,"context_line":"        try:"},{"line_number":180,"context_line":"            task.driver.deploy.validate(task)"},{"line_number":181,"context_line":"        except exception.ChangeInterfaceException as e:"},{"line_number":182,"context_line":"            # A different deploy interface is required for this deployment."},{"line_number":183,"context_line":"            # Switch to the preferred interface temporarily."}],"source_content_type":"text/x-python","patch_set":7,"id":"54cd78d0_635de70e","line":180,"in_reply_to":"1cbc9c11_d65ed2bf","updated":"2026-01-12 17:24:56.000000000","message":"Just tossing this in here: deploy_interface: autodetect","commit_id":"e93a12ffa79136afcb585187677b4ff5f54de41f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"37101d3f807805d9a7a2ad1e7251e28a1009589c","unresolved":true,"context_lines":[{"line_number":178,"context_line":"        task.driver.power.validate(task)"},{"line_number":179,"context_line":"        try:"},{"line_number":180,"context_line":"            task.driver.deploy.validate(task)"},{"line_number":181,"context_line":"        except exception.ChangeInterfaceException as e:"},{"line_number":182,"context_line":"            # A different deploy interface is required for this deployment."},{"line_number":183,"context_line":"            # Switch to the preferred interface temporarily."},{"line_number":184,"context_line":"            if node.deploy_interface !\u003d e.preferred_interface:"}],"source_content_type":"text/x-python","patch_set":7,"id":"cde0132f_9fdf78b0","line":181,"range":{"start_line":181,"start_character":25,"end_line":181,"end_character":49},"updated":"2025-12-19 15:01:33.000000000","message":"nit: likely needs to be \"ChangeDeployInterfaceException\" since this is all framed around the deploy interface.","commit_id":"e93a12ffa79136afcb585187677b4ff5f54de41f"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"591151c27432e32bab1399ead27cefc15f80efd4","unresolved":true,"context_lines":[{"line_number":178,"context_line":"        task.driver.power.validate(task)"},{"line_number":179,"context_line":"        try:"},{"line_number":180,"context_line":"            task.driver.deploy.validate(task)"},{"line_number":181,"context_line":"        except exception.ChangeInterfaceException as e:"},{"line_number":182,"context_line":"            # A different deploy interface is required for this deployment."},{"line_number":183,"context_line":"            # Switch to the preferred interface temporarily."},{"line_number":184,"context_line":"            if node.deploy_interface !\u003d e.preferred_interface:"}],"source_content_type":"text/x-python","patch_set":7,"id":"890261a1_65e1bcba","line":181,"range":{"start_line":181,"start_character":25,"end_line":181,"end_character":49},"in_reply_to":"cde0132f_9fdf78b0","updated":"2026-01-04 20:53:56.000000000","message":"I am speculating that other interfaces might one day get swap functionality, and this general exception can be used as long as the try block is appropriately specific. But I don\u0027t mind changing as suggested if the next comment prefers changing.","commit_id":"e93a12ffa79136afcb585187677b4ff5f54de41f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c5a10509667f8c5d86da420067c8af3be1c08a77","unresolved":true,"context_lines":[{"line_number":203,"context_line":"                node.save()"},{"line_number":204,"context_line":"                # Refresh the deploy steps now that the deploy interface"},{"line_number":205,"context_line":"                # has been changed"},{"line_number":206,"context_line":"                task.driver.deploy.refresh_steps(task, \u0027deploy\u0027)"},{"line_number":207,"context_line":"                # Validate with the new interface"},{"line_number":208,"context_line":"                task.driver.deploy.validate(task)"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"859aeee0_7be79529","line":206,"updated":"2026-01-12 15:36:51.000000000","message":"I don\u0027t think you need to do this: no steps are cached at this point yet. The first validation is done by validate_user_deploy_steps_and_templates below.","commit_id":"e93a12ffa79136afcb585187677b4ff5f54de41f"}],"ironic/conductor/manager.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":"f35a88c43b4077bccf4f446ffeedf590fb4e6c5e","unresolved":true,"context_lines":[{"line_number":2156,"context_line":"                try:"},{"line_number":2157,"context_line":"                    try:"},{"line_number":2158,"context_line":"                        iface.validate(task)"},{"line_number":2159,"context_line":"                    except exception.ChangeInterfaceException as e:"},{"line_number":2160,"context_line":"                        # This exception is raised when an interface\u0027s"},{"line_number":2161,"context_line":"                        # implementation needs to be changed."},{"line_number":2162,"context_line":"                        # Doing the change is specific to the interface and"}],"source_content_type":"text/x-python","patch_set":7,"id":"62ecf93e_f3f450d0","line":2159,"range":{"start_line":2159,"start_character":61,"end_line":2159,"end_character":67},"updated":"2025-12-19 14:56:37.000000000","message":"\"as e:\" is not needed here.","commit_id":"e93a12ffa79136afcb585187677b4ff5f54de41f"}],"ironic/drivers/modules/agent.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":"dc06f4723256557e0074eb2cf24fc1892fbbc054","unresolved":true,"context_lines":[{"line_number":569,"context_line":"                # and again, we should have nothing to do here."},{"line_number":570,"context_line":"                return"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"            if node.instance_info.get(\u0027image_disk_format\u0027) \u003d\u003d \u0027bootc\u0027:"},{"line_number":573,"context_line":"                # Specific image detection has resulted in bootc being"},{"line_number":574,"context_line":"                # set as the disk format. Check if the deploy interface"},{"line_number":575,"context_line":"                # will be temporarily switched to bootc"}],"source_content_type":"text/x-python","patch_set":1,"id":"7cd6fb15_a3ed685d","line":572,"updated":"2025-11-11 21:28:53.000000000","message":"so, I guess I was thinking we could begin invoking this far in advance of the agent driver, specifically in deploy_utils when the conductor is still doing some setup.\n\nThat would be a more applicable pattern for usage like anaconda. I wonder if folks have thoughts?","commit_id":"e33c3b05f01d28637aad031e86d16d93cfe6d98e"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0ee3fd5cf14094349993444ef51938b3234b0733","unresolved":false,"context_lines":[{"line_number":569,"context_line":"                # and again, we should have nothing to do here."},{"line_number":570,"context_line":"                return"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"            if node.instance_info.get(\u0027image_disk_format\u0027) \u003d\u003d \u0027bootc\u0027:"},{"line_number":573,"context_line":"                # Specific image detection has resulted in bootc being"},{"line_number":574,"context_line":"                # set as the disk format. Check if the deploy interface"},{"line_number":575,"context_line":"                # will be temporarily switched to bootc"}],"source_content_type":"text/x-python","patch_set":1,"id":"855b769b_cd9110cc","line":572,"in_reply_to":"7cd6fb15_a3ed685d","updated":"2025-11-25 01:53:15.000000000","message":"Done","commit_id":"e33c3b05f01d28637aad031e86d16d93cfe6d98e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"dc06f4723256557e0074eb2cf24fc1892fbbc054","unresolved":true,"context_lines":[{"line_number":581,"context_line":"                    node.save()"},{"line_number":582,"context_line":"                    # Refresh the deploy steps now that the deploy interface"},{"line_number":583,"context_line":"                    # has been changed to bootc"},{"line_number":584,"context_line":"                    self.refresh_steps(task, \u0027deploy\u0027)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        if node.provision_state in (states.ACTIVE, states.UNRESCUING,"},{"line_number":587,"context_line":"                                    states.ADOPTING):"}],"source_content_type":"text/x-python","patch_set":1,"id":"85e4bbd9_37afe64d","line":584,"updated":"2025-11-11 21:28:53.000000000","message":"I guess there is an underlying issue here. Your in the driver itself here, asking for steps to be refreshed inside the code, but not a different class, so its sort of too late to be refreshing in my mind.","commit_id":"e33c3b05f01d28637aad031e86d16d93cfe6d98e"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0ee3fd5cf14094349993444ef51938b3234b0733","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                    node.save()"},{"line_number":582,"context_line":"                    # Refresh the deploy steps now that the deploy interface"},{"line_number":583,"context_line":"                    # has been changed to bootc"},{"line_number":584,"context_line":"                    self.refresh_steps(task, \u0027deploy\u0027)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        if node.provision_state in (states.ACTIVE, states.UNRESCUING,"},{"line_number":587,"context_line":"                                    states.ADOPTING):"}],"source_content_type":"text/x-python","patch_set":1,"id":"f4f9b0d5_4e2d0920","line":584,"in_reply_to":"85e4bbd9_37afe64d","updated":"2025-11-25 01:53:15.000000000","message":"Done","commit_id":"e33c3b05f01d28637aad031e86d16d93cfe6d98e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"dc06f4723256557e0074eb2cf24fc1892fbbc054","unresolved":true,"context_lines":[{"line_number":1069,"context_line":"            \u0027post_copy_deploy_interface\u0027)"},{"line_number":1070,"context_line":"        if post_copy_deploy_interface:"},{"line_number":1071,"context_line":"            # The bootc deploy interface was only temporary because a bootc"},{"line_number":1072,"context_line":"            # image was detected. Switch back to the original deploy"},{"line_number":1073,"context_line":"            # interface."},{"line_number":1074,"context_line":"            node.deploy_interface \u003d post_copy_deploy_interface"},{"line_number":1075,"context_line":"            node.del_driver_internal_info(\u0027post_copy_deploy_interface\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"614545cb_267a9ad8","line":1072,"updated":"2025-11-11 21:28:53.000000000","message":"I\u0027d keep the deploy interface until teardown, fwiw.","commit_id":"e33c3b05f01d28637aad031e86d16d93cfe6d98e"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0ee3fd5cf14094349993444ef51938b3234b0733","unresolved":false,"context_lines":[{"line_number":1069,"context_line":"            \u0027post_copy_deploy_interface\u0027)"},{"line_number":1070,"context_line":"        if post_copy_deploy_interface:"},{"line_number":1071,"context_line":"            # The bootc deploy interface was only temporary because a bootc"},{"line_number":1072,"context_line":"            # image was detected. Switch back to the original deploy"},{"line_number":1073,"context_line":"            # interface."},{"line_number":1074,"context_line":"            node.deploy_interface \u003d post_copy_deploy_interface"},{"line_number":1075,"context_line":"            node.del_driver_internal_info(\u0027post_copy_deploy_interface\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"31075219_5a62cf1f","line":1072,"in_reply_to":"614545cb_267a9ad8","updated":"2025-11-25 01:53:15.000000000","message":"Done","commit_id":"e33c3b05f01d28637aad031e86d16d93cfe6d98e"}]}
