)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"7e5cb12f011562ec0ecbdccbcf46eeb3c01b596b","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Redfish VirtualMedia NFS and SMB/CIFS Support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for NFS and SMB/CIFS transport protocols for"},{"line_number":10,"context_line":"Redfish VirtualMedia boot."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #2119212"},{"line_number":13,"context_line":"Assisted-By: Claude 4 Sonnet"},{"line_number":14,"context_line":"Change-Id: I5d4bce67dc7633afa23619f27f9b24df4f348edf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"6a3fb854_d8fa55d9","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":1},"updated":"2026-01-28 19:28:55.000000000","message":"Thank you for the change. I\u0027m not happy we have to do this, but we gotta work with what we\u0027ve got.\n\nFrom the change I understand we\u0027re not running NFS/CIFS (thanks heavens, it would have been a security nightmare). But it\u0027s worth stating this clearly in the commit message and release note.\n\nAlso, do we use external NFS/CIFS BUT put our own image on it?","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Redfish VirtualMedia NFS and SMB/CIFS Support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for NFS and SMB/CIFS transport protocols for"},{"line_number":10,"context_line":"Redfish VirtualMedia boot."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #2119212"},{"line_number":13,"context_line":"Assisted-By: Claude 4 Sonnet"},{"line_number":14,"context_line":"Change-Id: I5d4bce67dc7633afa23619f27f9b24df4f348edf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7fa1c4d5_0e4bab1e","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":1},"in_reply_to":"2f9c9165_89e1824d","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"326c144c68e5f48240229b5a98f3cc7888aca568","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Redfish VirtualMedia NFS and SMB/CIFS Support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for NFS and SMB/CIFS transport protocols for"},{"line_number":10,"context_line":"Redfish VirtualMedia boot."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #2119212"},{"line_number":13,"context_line":"Assisted-By: Claude 4 Sonnet"},{"line_number":14,"context_line":"Change-Id: I5d4bce67dc7633afa23619f27f9b24df4f348edf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"2f9c9165_89e1824d","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":1},"in_reply_to":"6a3fb854_d8fa55d9","updated":"2026-01-29 03:53:32.000000000","message":"Acknowledged! (Ironic copies its generated boot images to the operator-managed share, then hands the URL to the BMC.)","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7886f3707ebb2e4811fa944679430e685d202c14","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"359b253c_f2abda6b","updated":"2025-12-09 19:31:26.000000000","message":"-1 for something in the release note about Ironic not managing shares","commit_id":"487f44f26c351e177154ad11ac4e8ce3006d7bbb"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"78a9b9dc_4ebdb1ed","in_reply_to":"359b253c_f2abda6b","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"487f44f26c351e177154ad11ac4e8ce3006d7bbb"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"bc5a0f8b0cfa5f54560ee3e5321967a12a5e96e0","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"14d76203_52d98cf9","updated":"2026-01-26 15:35:39.000000000","message":"My only comment is so many free form strings as parameters. Sometimes lower case and sometimes upper case.","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"7e5cb12f011562ec0ecbdccbcf46eeb3c01b596b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6df89161_cec0a06d","updated":"2026-01-28 19:28:55.000000000","message":"Thanks for the patch, higher-level design question in-line.","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c2d8b54f_50d053fd","in_reply_to":"14d76203_52d98cf9","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"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":"60c01810dbc1203f0348484d6b24472b20330cff","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9442c6c3_0b65ccc3","updated":"2026-02-08 21:26:02.000000000","message":"Please either update this patch or follow up with the update to the help strings, otherwise LGTM thank you!","commit_id":"1450d1e50f7c174f2e82e4b621ebb90d33db33f5"}],"doc/source/admin/drivers/redfish.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"93036059df19d794dbe529ec1311ab3fe6bc4e24","unresolved":true,"context_lines":[{"line_number":299,"context_line":"Configuration"},{"line_number":300,"context_line":"~~~~~~~~~~~~~"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"The following configuration options are available for the Redfish driver:"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":":oslo.config:option:`redfish.nfs_base_url`"},{"line_number":305,"context_line":"    Base URL for NFS shares (e.g., ``nfs://server/share``). If set, enables"}],"source_content_type":"text/x-rst","patch_set":4,"id":"f6a43a4d_f9dab90d","line":302,"updated":"2026-01-27 16:47:32.000000000","message":"I feel like this section largely duplicates what is already in the configuration reference, as well as in the note above. And since it\u0027s a relatively exotic feature, I\u0027d prefer to drop it.","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"326c144c68e5f48240229b5a98f3cc7888aca568","unresolved":false,"context_lines":[{"line_number":299,"context_line":"Configuration"},{"line_number":300,"context_line":"~~~~~~~~~~~~~"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"The following configuration options are available for the Redfish driver:"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":":oslo.config:option:`redfish.nfs_base_url`"},{"line_number":305,"context_line":"    Base URL for NFS shares (e.g., ``nfs://server/share``). If set, enables"}],"source_content_type":"text/x-rst","patch_set":4,"id":"4522c22e_ba4c83ef","line":302,"in_reply_to":"f6a43a4d_f9dab90d","updated":"2026-01-29 03:53:32.000000000","message":"Acknowledged","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1c2b5c094ef37f339003791d32d9ea0748b947d5","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"``vmedia_transport_protocol``"},{"line_number":127,"context_line":"    Override transport protocol selection for virtual media. Valid values are"},{"line_number":128,"context_line":"    ``HTTP``, ``NFS``, or ``CIFS``. If not set, the protocol is automatically"},{"line_number":129,"context_line":"    detected from BMC capabilities and available configuration. This override"},{"line_number":130,"context_line":"    takes precedence over automatic detection but must be supported by the BMC."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5fbbf82a_979fd8bb","line":128,"range":{"start_line":128,"start_character":16,"end_line":128,"end_character":19},"updated":"2026-01-29 15:00:06.000000000","message":"I\u0027m guessing we\u0027re only meaning NFSv3 based upon the code/config. That is fine, but we likely want to expressly state that because we don\u0027t send credentials across to the BMC in that case as far as I\u0027ve seen.","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"``vmedia_transport_protocol``"},{"line_number":127,"context_line":"    Override transport protocol selection for virtual media. Valid values are"},{"line_number":128,"context_line":"    ``HTTP``, ``NFS``, or ``CIFS``. If not set, the protocol is automatically"},{"line_number":129,"context_line":"    detected from BMC capabilities and available configuration. This override"},{"line_number":130,"context_line":"    takes precedence over automatic detection but must be supported by the BMC."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"85bf48ed_8b7b633d","line":128,"range":{"start_line":128,"start_character":16,"end_line":128,"end_character":19},"in_reply_to":"5fbbf82a_979fd8bb","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6f822ec23f52a08dfd25576fee831ee13c56eff0","unresolved":true,"context_lines":[{"line_number":283,"context_line":"   accepted."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":".. note::"},{"line_number":286,"context_line":"   Starting with the 2026.1 release, NFS and CIFS/SMB transport protocols are"},{"line_number":287,"context_line":"   supported for virtual media attachment in addition to HTTP(S). The driver"},{"line_number":288,"context_line":"   automatically detects supported transport protocols from the BMC\u0027s Redfish"},{"line_number":289,"context_line":"   VirtualMedia capabilities and selects the best option. Configure NFS or CIFS"}],"source_content_type":"text/x-rst","patch_set":6,"id":"057e18d4_7f2858ef","line":286,"range":{"start_line":286,"start_character":0,"end_line":286,"end_character":36},"updated":"2026-01-29 14:47:31.000000000","message":"One nit, this pattern, \"starting at x release\" has actually been a source of feedback where folks have observed notes for older releases and remarked that it makes the documentation feel out of date or \"dated\", even if it is not. I\u0027d suggest trying to avoid the pattern because documentation is versioned by release, and the release note is the time based anchor for context.","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2c4e5451640f7b6eb80529e21fc4964cc12a0f83","unresolved":true,"context_lines":[{"line_number":283,"context_line":"   accepted."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":".. note::"},{"line_number":286,"context_line":"   Starting with the 2026.1 release, NFS and CIFS/SMB transport protocols are"},{"line_number":287,"context_line":"   supported for virtual media attachment in addition to HTTP(S). The driver"},{"line_number":288,"context_line":"   automatically detects supported transport protocols from the BMC\u0027s Redfish"},{"line_number":289,"context_line":"   VirtualMedia capabilities and selects the best option. Configure NFS or CIFS"}],"source_content_type":"text/x-rst","patch_set":6,"id":"d0747ab5_fd790ea3","line":286,"range":{"start_line":286,"start_character":0,"end_line":286,"end_character":36},"in_reply_to":"057e18d4_7f2858ef","updated":"2026-02-02 14:03:47.000000000","message":"Then people will try the main branch documentation for 2025.2 and complain again :)","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":283,"context_line":"   accepted."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":".. note::"},{"line_number":286,"context_line":"   Starting with the 2026.1 release, NFS and CIFS/SMB transport protocols are"},{"line_number":287,"context_line":"   supported for virtual media attachment in addition to HTTP(S). The driver"},{"line_number":288,"context_line":"   automatically detects supported transport protocols from the BMC\u0027s Redfish"},{"line_number":289,"context_line":"   VirtualMedia capabilities and selects the best option. Configure NFS or CIFS"}],"source_content_type":"text/x-rst","patch_set":6,"id":"2fcd374b_720552bd","line":286,"range":{"start_line":286,"start_character":0,"end_line":286,"end_character":36},"in_reply_to":"d0747ab5_fd790ea3","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"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":"4ed8e604c88d5415cc8f4f5ce249279798510bd4","unresolved":true,"context_lines":[{"line_number":283,"context_line":"   accepted."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":".. note::"},{"line_number":286,"context_line":"   Starting with the 2026.1 release, NFS and CIFS/SMB transport protocols are"},{"line_number":287,"context_line":"   supported for virtual media attachment in addition to HTTP(S). The driver"},{"line_number":288,"context_line":"   automatically detects supported transport protocols from the BMC\u0027s Redfish"},{"line_number":289,"context_line":"   VirtualMedia capabilities and selects the best option. Configure NFS or CIFS"}],"source_content_type":"text/x-rst","patch_set":6,"id":"57829bf7_2fdaee8f","line":286,"range":{"start_line":286,"start_character":0,"end_line":286,"end_character":36},"in_reply_to":"d0747ab5_fd790ea3","updated":"2026-02-04 19:04:52.000000000","message":"I could go either way. We should probably search+wipe release stamps when things go EOL or EOM.","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"93036059df19d794dbe529ec1311ab3fe6bc4e24","unresolved":true,"context_lines":[{"line_number":2290,"context_line":"        parsed_url \u003d urllib.parse.urlparse(vmedia[\u0027image_url\u0027])"},{"line_number":2291,"context_line":"        # NOTE(dtantsur): we may eventually support glance images, but for now"},{"line_number":2292,"context_line":"        # let us reject everything that is not http/https/nfs/cifs."},{"line_number":2293,"context_line":"        if parsed_url.scheme not in (\u0027http\u0027, \u0027https\u0027, \u0027nfs\u0027, \u0027cifs\u0027, \u0027smb\u0027):"},{"line_number":2294,"context_line":"            raise exception.Invalid(_(\"Unsupported or missing URL scheme: %s\")"},{"line_number":2295,"context_line":"                                    % parsed_url.scheme)"},{"line_number":2296,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"69b0eb66_e6807bf4","line":2293,"updated":"2026-01-27 16:47:32.000000000","message":"What\u0027s the point of supporting both cifs and smb? I think having only one way would be less confusing.","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"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":"673edda3828790337d03363510e08c9324fbcb71","unresolved":true,"context_lines":[{"line_number":2290,"context_line":"        parsed_url \u003d urllib.parse.urlparse(vmedia[\u0027image_url\u0027])"},{"line_number":2291,"context_line":"        # NOTE(dtantsur): we may eventually support glance images, but for now"},{"line_number":2292,"context_line":"        # let us reject everything that is not http/https/nfs/cifs."},{"line_number":2293,"context_line":"        if parsed_url.scheme not in (\u0027http\u0027, \u0027https\u0027, \u0027nfs\u0027, \u0027cifs\u0027, \u0027smb\u0027):"},{"line_number":2294,"context_line":"            raise exception.Invalid(_(\"Unsupported or missing URL scheme: %s\")"},{"line_number":2295,"context_line":"                                    % parsed_url.scheme)"},{"line_number":2296,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"d587c603_e9c98739","line":2293,"in_reply_to":"69b0eb66_e6807bf4","updated":"2026-01-27 20:22:58.000000000","message":"I have seen both cifs:// and smb:// URLs show up from hardware vendor test scripts. I think it\u0027s ideal to cover both cases personally.","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":2290,"context_line":"        parsed_url \u003d urllib.parse.urlparse(vmedia[\u0027image_url\u0027])"},{"line_number":2291,"context_line":"        # NOTE(dtantsur): we may eventually support glance images, but for now"},{"line_number":2292,"context_line":"        # let us reject everything that is not http/https/nfs/cifs."},{"line_number":2293,"context_line":"        if parsed_url.scheme not in (\u0027http\u0027, \u0027https\u0027, \u0027nfs\u0027, \u0027cifs\u0027, \u0027smb\u0027):"},{"line_number":2294,"context_line":"            raise exception.Invalid(_(\"Unsupported or missing URL scheme: %s\")"},{"line_number":2295,"context_line":"                                    % parsed_url.scheme)"},{"line_number":2296,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"6c451af4_93afb300","line":2293,"in_reply_to":"d587c603_e9c98739","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"93036059df19d794dbe529ec1311ab3fe6bc4e24","unresolved":true,"context_lines":[{"line_number":2292,"context_line":"        # let us reject everything that is not http/https/nfs/cifs."},{"line_number":2293,"context_line":"        if parsed_url.scheme not in (\u0027http\u0027, \u0027https\u0027, \u0027nfs\u0027, \u0027cifs\u0027, \u0027smb\u0027):"},{"line_number":2294,"context_line":"            raise exception.Invalid(_(\"Unsupported or missing URL scheme: %s\")"},{"line_number":2295,"context_line":"                                    % parsed_url.scheme)"},{"line_number":2296,"context_line":""},{"line_number":2297,"context_line":"        rpc_node, topic \u003d self._get_node_and_topic("},{"line_number":2298,"context_line":"            \u0027baremetal:node:vmedia:attach\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"542d6a21_40ea94d9","line":2295,"updated":"2026-01-27 16:47:32.000000000","message":"This is the point where we should start including a list of supported schemes","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"326c144c68e5f48240229b5a98f3cc7888aca568","unresolved":false,"context_lines":[{"line_number":2292,"context_line":"        # let us reject everything that is not http/https/nfs/cifs."},{"line_number":2293,"context_line":"        if parsed_url.scheme not in (\u0027http\u0027, \u0027https\u0027, \u0027nfs\u0027, \u0027cifs\u0027, \u0027smb\u0027):"},{"line_number":2294,"context_line":"            raise exception.Invalid(_(\"Unsupported or missing URL scheme: %s\")"},{"line_number":2295,"context_line":"                                    % parsed_url.scheme)"},{"line_number":2296,"context_line":""},{"line_number":2297,"context_line":"        rpc_node, topic \u003d self._get_node_and_topic("},{"line_number":2298,"context_line":"            \u0027baremetal:node:vmedia:attach\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"a6659a60_3a02b582","line":2295,"in_reply_to":"542d6a21_40ea94d9","updated":"2026-01-29 03:53:32.000000000","message":"Acknowledged","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"}],"ironic/common/image_service.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":"590e72eb17dbe8f1e7eb6c6bab257e41a9c9fdc8","unresolved":true,"context_lines":[{"line_number":915,"context_line":"        }"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"class NfsImageService(BaseImageService):"},{"line_number":919,"context_line":"    \"\"\"Provides retrieval of disk images using NFS.\"\"\""},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"    def validate_href(self, image_href, secret\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dd740813_f6f1eabb","line":918,"updated":"2025-09-16 19:59:16.000000000","message":"So, is the purpose here for the conductor to download the files as well? That would be the purpose of an image service. I\u0027m not opposed to it though.","commit_id":"bf2b96f0d674623cc8fb45bdb9114146282e9f09"},{"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":"7886f3707ebb2e4811fa944679430e685d202c14","unresolved":true,"context_lines":[{"line_number":915,"context_line":"        }"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"class NfsImageService(BaseImageService):"},{"line_number":919,"context_line":"    \"\"\"Provides retrieval of disk images using NFS.\"\"\""},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"    def validate_href(self, image_href, secret\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"832a3c05_b333da40","line":918,"in_reply_to":"24cf647f_408ed4df","updated":"2025-12-09 19:31:26.000000000","message":"Asking the explicit question: is it OK to have an BaseImageService implementation that fakes out download()?","commit_id":"bf2b96f0d674623cc8fb45bdb9114146282e9f09"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"93036059df19d794dbe529ec1311ab3fe6bc4e24","unresolved":true,"context_lines":[{"line_number":915,"context_line":"        }"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"class NfsImageService(BaseImageService):"},{"line_number":919,"context_line":"    \"\"\"Provides retrieval of disk images using NFS.\"\"\""},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"    def validate_href(self, image_href, secret\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"cd9d77d2_6e316227","line":918,"in_reply_to":"832a3c05_b333da40","updated":"2026-01-27 16:47:32.000000000","message":"I\u0027d really rather not... But I understand the logic behind doing it.\n\nSince download is not possible, you need to update `do_attach_virtual_media` to enforce non-local `image_download_source` (and maybe fail validation if it\u0027s explicitly set to `local`). Otherwise, you\u0027ll reach the download path.","commit_id":"bf2b96f0d674623cc8fb45bdb9114146282e9f09"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"8e345335e08c8b61315ffa1bef17246042ce699c","unresolved":true,"context_lines":[{"line_number":915,"context_line":"        }"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"class NfsImageService(BaseImageService):"},{"line_number":919,"context_line":"    \"\"\"Provides retrieval of disk images using NFS.\"\"\""},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"    def validate_href(self, image_href, secret\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"24cf647f_408ed4df","line":918,"in_reply_to":"dd740813_f6f1eabb","updated":"2025-12-02 15:31:48.000000000","message":"I\u0027m going with just URL validation and protocol mapping. The actual file access happens on the BMC side.","commit_id":"bf2b96f0d674623cc8fb45bdb9114146282e9f09"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"baea2d00228c3668f6f6cb38a5e67770c6de3b2e","unresolved":true,"context_lines":[{"line_number":980,"context_line":"        # For NFS URLs, we return basic metadata since we can\u0027t access"},{"line_number":981,"context_line":"        # the file directly from the conductor"},{"line_number":982,"context_line":"        return {"},{"line_number":983,"context_line":"            \u0027size\u0027: 0,  # Unknown size for NFS URLs"},{"line_number":984,"context_line":"            \u0027disk_format\u0027: \u0027raw\u0027,  # Assume raw format"},{"line_number":985,"context_line":"            \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":986,"context_line":"            \u0027checksum\u0027: None,  # No checksum available"}],"source_content_type":"text/x-python","patch_set":1,"id":"eeb5bfe9_42c6dedc","line":983,"updated":"2025-10-28 12:14:51.000000000","message":"Do we really need to show fields we dont know about, like size, disk_format, container_format, and status? We could simply remove them from what we output..","commit_id":"bf2b96f0d674623cc8fb45bdb9114146282e9f09"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        # For NFS URLs, we return basic metadata since we can\u0027t access"},{"line_number":981,"context_line":"        # the file directly from the conductor"},{"line_number":982,"context_line":"        return {"},{"line_number":983,"context_line":"            \u0027size\u0027: 0,  # Unknown size for NFS URLs"},{"line_number":984,"context_line":"            \u0027disk_format\u0027: \u0027raw\u0027,  # Assume raw format"},{"line_number":985,"context_line":"            \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":986,"context_line":"            \u0027checksum\u0027: None,  # No checksum available"}],"source_content_type":"text/x-python","patch_set":1,"id":"827c8b6d_97586616","line":983,"in_reply_to":"ddfb7997_2c01da97","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"bf2b96f0d674623cc8fb45bdb9114146282e9f09"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"8e345335e08c8b61315ffa1bef17246042ce699c","unresolved":true,"context_lines":[{"line_number":980,"context_line":"        # For NFS URLs, we return basic metadata since we can\u0027t access"},{"line_number":981,"context_line":"        # the file directly from the conductor"},{"line_number":982,"context_line":"        return {"},{"line_number":983,"context_line":"            \u0027size\u0027: 0,  # Unknown size for NFS URLs"},{"line_number":984,"context_line":"            \u0027disk_format\u0027: \u0027raw\u0027,  # Assume raw format"},{"line_number":985,"context_line":"            \u0027container_format\u0027: \u0027bare\u0027,"},{"line_number":986,"context_line":"            \u0027checksum\u0027: None,  # No checksum available"}],"source_content_type":"text/x-python","patch_set":1,"id":"ddfb7997_2c01da97","line":983,"in_reply_to":"eeb5bfe9_42c6dedc","updated":"2025-12-02 15:31:48.000000000","message":"Good point. Acknowledged.","commit_id":"bf2b96f0d674623cc8fb45bdb9114146282e9f09"}],"ironic/conf/cifs.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":"4ed8e604c88d5415cc8f4f5ce249279798510bd4","unresolved":true,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def register_opts(conf):"},{"line_number":34,"context_line":"    conf.register_opts(opts, group\u003d\u0027cifs\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"a7a64b24_974b4136","line":34,"updated":"2026-02-04 19:04:52.000000000","message":"use cfg.OptGroup to create a group here, then add a help\u003d section. This section should detail that operators are responsible for providing a CIFS/SMB server that publishes share_path to base_url. Same for NFS.","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def register_opts(conf):"},{"line_number":34,"context_line":"    conf.register_opts(opts, group\u003d\u0027cifs\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"c10a3551_5ea64b61","line":34,"in_reply_to":"a7a64b24_974b4136","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"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":"60c01810dbc1203f0348484d6b24472b20330cff","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    help\u003d_(\u0027Configuration for CIFS/SMB-based virtual media transport. \u0027"},{"line_number":21,"context_line":"           \u0027Operators are responsible for providing a CIFS/SMB server \u0027"},{"line_number":22,"context_line":"           \u0027and ensuring the share specified in base_url is mounted at \u0027"},{"line_number":23,"context_line":"           \u0027share_path on all conductor hosts. The conductor copies \u0027"},{"line_number":24,"context_line":"           \u0027images to share_path, and the BMC accesses them directly \u0027"},{"line_number":25,"context_line":"           \u0027via CIFS/SMB using the base_url. Optional credentials can \u0027"},{"line_number":26,"context_line":"           \u0027be configured and will be passed to the BMC.\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"6f54a2c7_58caa6b5","line":23,"updated":"2026-02-08 21:26:02.000000000","message":"\"on all conductor hosts in the conductor group\"","commit_id":"1450d1e50f7c174f2e82e4b621ebb90d33db33f5"}],"ironic/conf/nfs.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":"60c01810dbc1203f0348484d6b24472b20330cff","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    help\u003d_(\u0027Configuration for NFS-based virtual media transport. \u0027"},{"line_number":21,"context_line":"           \u0027Operators are responsible for providing an NFSv3 server \u0027"},{"line_number":22,"context_line":"           \u0027and ensuring the NFS export specified in base_url is \u0027"},{"line_number":23,"context_line":"           \u0027mounted at share_path on all conductor hosts. The conductor \u0027"},{"line_number":24,"context_line":"           \u0027copies images to share_path, and the BMC accesses them \u0027"},{"line_number":25,"context_line":"           \u0027directly via NFSv3 using the base_url. No credentials are \u0027"},{"line_number":26,"context_line":"           \u0027sent to the BMC for NFS.\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"6038edb6_749bda17","line":23,"updated":"2026-02-08 21:26:02.000000000","message":"same, all conductor hosts in the conductor group","commit_id":"1450d1e50f7c174f2e82e4b621ebb90d33db33f5"}],"ironic/conf/redfish.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"93036059df19d794dbe529ec1311ab3fe6bc4e24","unresolved":true,"context_lines":[{"line_number":52,"context_line":"                       \u0027node. If set to false, images are placed on the \u0027"},{"line_number":53,"context_line":"                       \u0027ironic-conductor node and served over its \u0027"},{"line_number":54,"context_line":"                       \u0027local HTTP server.\u0027)),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027nfs_base_url\u0027,"},{"line_number":56,"context_line":"               help\u003d_(\u0027Base URL for NFS shares (e.g., nfs://server/share). \u0027"},{"line_number":57,"context_line":"                      \u0027If set, enables NFS virtual media support.\u0027)),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027nfs_share_path\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"54f9df1b_29769bda","line":55,"updated":"2026-01-27 16:47:32.000000000","message":"Since these options are going to be used in the generic code, you need to move them out of the `redfish` section. Maybe even create new sections `[nfs_server]` and `[cifs_server]` to avoid growing `[conductor]` further?","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                       \u0027node. If set to false, images are placed on the \u0027"},{"line_number":53,"context_line":"                       \u0027ironic-conductor node and served over its \u0027"},{"line_number":54,"context_line":"                       \u0027local HTTP server.\u0027)),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027nfs_base_url\u0027,"},{"line_number":56,"context_line":"               help\u003d_(\u0027Base URL for NFS shares (e.g., nfs://server/share). \u0027"},{"line_number":57,"context_line":"                      \u0027If set, enables NFS virtual media support.\u0027)),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027nfs_share_path\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"c3d6927a_8cd1d0b5","line":55,"in_reply_to":"54f9df1b_29769bda","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"}],"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"93036059df19d794dbe529ec1311ab3fe6bc4e24","unresolved":true,"context_lines":[{"line_number":1211,"context_line":"            oci.set_image_auth(url, image_auth)"},{"line_number":1212,"context_line":"            oci.validate_href(url, secret)"},{"line_number":1213,"context_line":"        else:"},{"line_number":1214,"context_line":"            resp \u003d image_service.HttpImageService().validate_href(url, secret)"},{"line_number":1215,"context_line":"            if resp and resp.url !\u003d url:"},{"line_number":1216,"context_line":"                LOG.debug(\u0027URL %s redirected to %s\u0027, url, resp.url)"},{"line_number":1217,"context_line":"                image_info[\u0027image_source\u0027] \u003d resp.url"}],"source_content_type":"text/x-python","patch_set":4,"id":"05bd4ffd_a4ed7504","line":1214,"updated":"2026-01-27 16:47:32.000000000","message":"Shouldn\u0027t you check the schema before calling this?","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2c4e5451640f7b6eb80529e21fc4964cc12a0f83","unresolved":true,"context_lines":[{"line_number":1211,"context_line":"            oci.set_image_auth(url, image_auth)"},{"line_number":1212,"context_line":"            oci.validate_href(url, secret)"},{"line_number":1213,"context_line":"        else:"},{"line_number":1214,"context_line":"            resp \u003d image_service.HttpImageService().validate_href(url, secret)"},{"line_number":1215,"context_line":"            if resp and resp.url !\u003d url:"},{"line_number":1216,"context_line":"                LOG.debug(\u0027URL %s redirected to %s\u0027, url, resp.url)"},{"line_number":1217,"context_line":"                image_info[\u0027image_source\u0027] \u003d resp.url"}],"source_content_type":"text/x-python","patch_set":4,"id":"8dee9587_2aae60cd","line":1214,"in_reply_to":"05bd4ffd_a4ed7504","updated":"2026-02-02 14:03:47.000000000","message":"I\u0027d like an answer here.","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"            oci.set_image_auth(url, image_auth)"},{"line_number":1212,"context_line":"            oci.validate_href(url, secret)"},{"line_number":1213,"context_line":"        else:"},{"line_number":1214,"context_line":"            resp \u003d image_service.HttpImageService().validate_href(url, secret)"},{"line_number":1215,"context_line":"            if resp and resp.url !\u003d url:"},{"line_number":1216,"context_line":"                LOG.debug(\u0027URL %s redirected to %s\u0027, url, resp.url)"},{"line_number":1217,"context_line":"                image_info[\u0027image_source\u0027] \u003d resp.url"}],"source_content_type":"text/x-python","patch_set":4,"id":"0f02fcc6_da895bdc","line":1214,"in_reply_to":"8dee9587_2aae60cd","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"}],"ironic/drivers/modules/image_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"93036059df19d794dbe529ec1311ab3fe6bc4e24","unresolved":true,"context_lines":[{"line_number":568,"context_line":"        protocol \u003d task.node.driver_internal_info.get("},{"line_number":569,"context_line":"            \u0027redfish_vmedia_protocol\u0027)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        if protocol and protocol.upper() in (\u0027NFS\u0027, \u0027CIFS\u0027):"},{"line_number":572,"context_line":"            _copy_to_share(task, boot_iso_tmp_file, iso_object_name, protocol)"},{"line_number":573,"context_line":"            image_url \u003d redfish_boot._build_vmedia_url("},{"line_number":574,"context_line":"                task, iso_object_name, protocol)"}],"source_content_type":"text/x-python","patch_set":4,"id":"e390571a_67514a03","line":571,"updated":"2026-01-27 16:47:32.000000000","message":"Here you forgot \"SMB\" (which is one of the reasons I suggested dropping SMB entirely)","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        protocol \u003d task.node.driver_internal_info.get("},{"line_number":569,"context_line":"            \u0027redfish_vmedia_protocol\u0027)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        if protocol and protocol.upper() in (\u0027NFS\u0027, \u0027CIFS\u0027):"},{"line_number":572,"context_line":"            _copy_to_share(task, boot_iso_tmp_file, iso_object_name, protocol)"},{"line_number":573,"context_line":"            image_url \u003d redfish_boot._build_vmedia_url("},{"line_number":574,"context_line":"                task, iso_object_name, protocol)"}],"source_content_type":"text/x-python","patch_set":4,"id":"36df5092_edbe0f36","line":571,"in_reply_to":"e390571a_67514a03","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"93036059df19d794dbe529ec1311ab3fe6bc4e24","unresolved":true,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        if protocol and protocol.upper() in (\u0027NFS\u0027, \u0027CIFS\u0027):"},{"line_number":572,"context_line":"            _copy_to_share(task, boot_iso_tmp_file, iso_object_name, protocol)"},{"line_number":573,"context_line":"            image_url \u003d redfish_boot._build_vmedia_url("},{"line_number":574,"context_line":"                task, iso_object_name, protocol)"},{"line_number":575,"context_line":"        else:"},{"line_number":576,"context_line":"            node_http_url \u003d task.node.driver_info.get(\"external_http_url\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"9035d4f9_c4371c34","line":573,"updated":"2026-01-27 16:47:32.000000000","message":"This is a layering violation: the generic code should not be aware of redfish boot, even less use its private methods. If you cannot adapt the image publisher machinery to do what you need, I suggest moving the `_build_vmedia_url` logic to a common place (making it common enough).\n\nMaybe you need a new variation of ImageHandler that works with these protocols?","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        if protocol and protocol.upper() in (\u0027NFS\u0027, \u0027CIFS\u0027):"},{"line_number":572,"context_line":"            _copy_to_share(task, boot_iso_tmp_file, iso_object_name, protocol)"},{"line_number":573,"context_line":"            image_url \u003d redfish_boot._build_vmedia_url("},{"line_number":574,"context_line":"                task, iso_object_name, protocol)"},{"line_number":575,"context_line":"        else:"},{"line_number":576,"context_line":"            node_http_url \u003d task.node.driver_info.get(\"external_http_url\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"97fc6019_89df3544","line":573,"in_reply_to":"9035d4f9_c4371c34","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"}],"ironic/drivers/modules/redfish/boot.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":"590e72eb17dbe8f1e7eb6c6bab257e41a9c9fdc8","unresolved":true,"context_lines":[{"line_number":627,"context_line":"        :param image_url: URL to validate for NFS scheme."},{"line_number":628,"context_line":"        :raises: InvalidParameterValue if NFS URL is used but NFS support is disabled."},{"line_number":629,"context_line":"        \"\"\""},{"line_number":630,"context_line":"        if image_url and urlparse.urlparse(image_url).scheme.lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":631,"context_line":"            if not CONF.redfish.enable_nfs_virtual_media:"},{"line_number":632,"context_line":"                raise exception.InvalidParameterValue("},{"line_number":633,"context_line":"                    _(\"NFS URLs are not supported for virtual media attachment \""}],"source_content_type":"text/x-python","patch_set":1,"id":"31eff57a_2ee7e288","line":630,"updated":"2025-09-16 19:59:16.000000000","message":"Is there any way to detect it from the BMC?","commit_id":"bf2b96f0d674623cc8fb45bdb9114146282e9f09"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"8e345335e08c8b61315ffa1bef17246042ce699c","unresolved":true,"context_lines":[{"line_number":627,"context_line":"        :param image_url: URL to validate for NFS scheme."},{"line_number":628,"context_line":"        :raises: InvalidParameterValue if NFS URL is used but NFS support is disabled."},{"line_number":629,"context_line":"        \"\"\""},{"line_number":630,"context_line":"        if image_url and urlparse.urlparse(image_url).scheme.lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":631,"context_line":"            if not CONF.redfish.enable_nfs_virtual_media:"},{"line_number":632,"context_line":"                raise exception.InvalidParameterValue("},{"line_number":633,"context_line":"                    _(\"NFS URLs are not supported for virtual media attachment \""}],"source_content_type":"text/x-python","patch_set":1,"id":"51f307b9_7849f962","line":630,"in_reply_to":"31eff57a_2ee7e288","updated":"2025-12-02 15:31:48.000000000","message":"We should have automatic BMC capability detection now.","commit_id":"bf2b96f0d674623cc8fb45bdb9114146282e9f09"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":627,"context_line":"        :param image_url: URL to validate for NFS scheme."},{"line_number":628,"context_line":"        :raises: InvalidParameterValue if NFS URL is used but NFS support is disabled."},{"line_number":629,"context_line":"        \"\"\""},{"line_number":630,"context_line":"        if image_url and urlparse.urlparse(image_url).scheme.lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":631,"context_line":"            if not CONF.redfish.enable_nfs_virtual_media:"},{"line_number":632,"context_line":"                raise exception.InvalidParameterValue("},{"line_number":633,"context_line":"                    _(\"NFS URLs are not supported for virtual media attachment \""}],"source_content_type":"text/x-python","patch_set":1,"id":"fe19280c_2e7f19b0","line":630,"in_reply_to":"51f307b9_7849f962","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"bf2b96f0d674623cc8fb45bdb9114146282e9f09"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"93036059df19d794dbe529ec1311ab3fe6bc4e24","unresolved":true,"context_lines":[{"line_number":591,"context_line":"    return deploy_info"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"def _detect_supported_transport_protocols(task, managers, boot_device):"},{"line_number":595,"context_line":"    \"\"\"Detect supported transport protocols from VirtualMedia resources."},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    Queries Redfish VirtualMedia resources to determine what transport"}],"source_content_type":"text/x-python","patch_set":4,"id":"d3f64ad3_99e2d349","line":594,"updated":"2026-01-27 16:47:32.000000000","message":"The logic here assumes you can predict which device is going to be chosen by `_insert_vmedia`, which itself has some complex logic, including retries. There is risk of a mismatch. I\u0027m not sure what to do about it though.","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":591,"context_line":"    return deploy_info"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"def _detect_supported_transport_protocols(task, managers, boot_device):"},{"line_number":595,"context_line":"    \"\"\"Detect supported transport protocols from VirtualMedia resources."},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    Queries Redfish VirtualMedia resources to determine what transport"}],"source_content_type":"text/x-python","patch_set":4,"id":"fd6982c3_6a9fe31a","line":594,"in_reply_to":"d3f64ad3_99e2d349","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged(?)","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"93036059df19d794dbe529ec1311ab3fe6bc4e24","unresolved":true,"context_lines":[{"line_number":768,"context_line":"        if \u0027@\u0027 in parsed.netloc:"},{"line_number":769,"context_line":"            # Already has credentials in URL"},{"line_number":770,"context_line":"            url \u003d f\"{base_url}/{share_path}/{node.uuid}/{file_name}\""},{"line_number":771,"context_line":"        elif username:"},{"line_number":772,"context_line":"            server_part \u003d parsed.netloc or parsed.path.lstrip(\u0027/\u0027)"},{"line_number":773,"context_line":"            if password:"},{"line_number":774,"context_line":"                url \u003d (f\"cifs://{username}:{password}@{server_part}/\""}],"source_content_type":"text/x-python","patch_set":4,"id":"2c0f47fc_b9f1bde5","line":771,"updated":"2026-01-27 16:47:32.000000000","message":"Hmm, are you sure that BMCs take credentials in the URL and not in the separate UserName/Password fields?","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":768,"context_line":"        if \u0027@\u0027 in parsed.netloc:"},{"line_number":769,"context_line":"            # Already has credentials in URL"},{"line_number":770,"context_line":"            url \u003d f\"{base_url}/{share_path}/{node.uuid}/{file_name}\""},{"line_number":771,"context_line":"        elif username:"},{"line_number":772,"context_line":"            server_part \u003d parsed.netloc or parsed.path.lstrip(\u0027/\u0027)"},{"line_number":773,"context_line":"            if password:"},{"line_number":774,"context_line":"                url \u003d (f\"cifs://{username}:{password}@{server_part}/\""}],"source_content_type":"text/x-python","patch_set":4,"id":"aa50b796_a42217d7","line":771,"in_reply_to":"2c0f47fc_b9f1bde5","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"93036059df19d794dbe529ec1311ab3fe6bc4e24","unresolved":true,"context_lines":[{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"        common_utils.set_node_nested_field("},{"line_number":1037,"context_line":"            task.node, \u0027driver_internal_info\u0027,"},{"line_number":1038,"context_line":"            \u0027redfish_vmedia_protocol\u0027, selected_protocol)"},{"line_number":1039,"context_line":"        task.node.save()"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":"        iso_ref \u003d image_utils.prepare_deploy_iso(task, ramdisk_params,"}],"source_content_type":"text/x-python","patch_set":4,"id":"047da0e4_50d7ad2c","line":1038,"updated":"2026-01-27 16:47:32.000000000","message":"You call it vmedia_transport_protocol elsewhere (admittedly, I like `redfish_vmedia_protocol` more)","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"        common_utils.set_node_nested_field("},{"line_number":1037,"context_line":"            task.node, \u0027driver_internal_info\u0027,"},{"line_number":1038,"context_line":"            \u0027redfish_vmedia_protocol\u0027, selected_protocol)"},{"line_number":1039,"context_line":"        task.node.save()"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":"        iso_ref \u003d image_utils.prepare_deploy_iso(task, ramdisk_params,"}],"source_content_type":"text/x-python","patch_set":4,"id":"a6d0b5ef_fb1f0acb","line":1038,"in_reply_to":"047da0e4_50d7ad2c","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"338b4b461176994046c95fc7ead8f1349a61b4e8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2c4e5451640f7b6eb80529e21fc4964cc12a0f83","unresolved":true,"context_lines":[{"line_number":668,"context_line":"                        supported_protocols.add(protocols)"},{"line_number":669,"context_line":"    except (sushy.exceptions.MissingAttributeError,"},{"line_number":670,"context_line":"            AttributeError, sushy.exceptions.InvalidAttributeError,"},{"line_number":671,"context_line":"            KeyError, TypeError) as e:"},{"line_number":672,"context_line":"        LOG.debug(\"Could not detect transport protocols from VirtualMedia \""},{"line_number":673,"context_line":"                  \"for node %(node)s: %(error)s. Defaulting to HTTP.\","},{"line_number":674,"context_line":"                  {\u0027node\u0027: task.node.uuid, \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":6,"id":"1b2e0ddc_d411fc6c","line":671,"updated":"2026-02-02 14:03:47.000000000","message":"I don\u0027t quite like handling TypeError/KeyError/AttributeError the same way as expected exceptions. At the very least, I\u0027d prefer a traceback logged for them since otherwise they\u0027re impossible to debug.","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":668,"context_line":"                        supported_protocols.add(protocols)"},{"line_number":669,"context_line":"    except (sushy.exceptions.MissingAttributeError,"},{"line_number":670,"context_line":"            AttributeError, sushy.exceptions.InvalidAttributeError,"},{"line_number":671,"context_line":"            KeyError, TypeError) as e:"},{"line_number":672,"context_line":"        LOG.debug(\"Could not detect transport protocols from VirtualMedia \""},{"line_number":673,"context_line":"                  \"for node %(node)s: %(error)s. Defaulting to HTTP.\","},{"line_number":674,"context_line":"                  {\u0027node\u0027: task.node.uuid, \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":6,"id":"316f7532_04b0bf93","line":671,"in_reply_to":"1b2e0ddc_d411fc6c","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2c4e5451640f7b6eb80529e21fc4964cc12a0f83","unresolved":true,"context_lines":[{"line_number":679,"context_line":"    if not normalized:"},{"line_number":680,"context_line":"        normalized.add(\u0027HTTP\u0027)"},{"line_number":681,"context_line":"    else:"},{"line_number":682,"context_line":"        normalized.add(\u0027HTTP\u0027)"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    return sorted(list(normalized))"},{"line_number":685,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"c7dda54d_18a9bfb7","line":682,"updated":"2026-02-02 14:03:47.000000000","message":"The two branches are the same","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":679,"context_line":"    if not normalized:"},{"line_number":680,"context_line":"        normalized.add(\u0027HTTP\u0027)"},{"line_number":681,"context_line":"    else:"},{"line_number":682,"context_line":"        normalized.add(\u0027HTTP\u0027)"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    return sorted(list(normalized))"},{"line_number":685,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"0d1461b4_76cb3948","line":682,"in_reply_to":"c7dda54d_18a9bfb7","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d57740c624e55cb537a7bec1f5516ec1e4f75b2d","unresolved":true,"context_lines":[{"line_number":679,"context_line":"    if not normalized:"},{"line_number":680,"context_line":"        normalized.add(\u0027HTTP\u0027)"},{"line_number":681,"context_line":"    else:"},{"line_number":682,"context_line":"        normalized.add(\u0027HTTP\u0027)"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    return sorted(list(normalized))"},{"line_number":685,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"c0877c67_51589369","line":682,"in_reply_to":"c7dda54d_18a9bfb7","updated":"2026-02-04 20:04:34.000000000","message":"Indeed! That\u0027s such a weird branching added by autocomplete. Will fix.","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2c4e5451640f7b6eb80529e21fc4964cc12a0f83","unresolved":true,"context_lines":[{"line_number":708,"context_line":"                        \"Using auto-detection instead.\","},{"line_number":709,"context_line":"                        {\u0027node\u0027: node.uuid, \u0027proto\u0027: override_upper,"},{"line_number":710,"context_line":"                         \u0027supported\u0027: supported_upper})"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"    if \u0027CIFS\u0027 in supported_upper and CONF.cifs.base_url:"},{"line_number":713,"context_line":"        if CONF.cifs.share_path:"},{"line_number":714,"context_line":"            LOG.debug(\"Auto-selected CIFS transport protocol for node %s\","}],"source_content_type":"text/x-python","patch_set":6,"id":"5085427e_fa69f086","line":711,"updated":"2026-02-02 14:03:47.000000000","message":"This logic seems to give priority to CIFS and NFS. I\u0027d rather default to HTTP if it\u0027s available. HTTP is by far better tested in Ironic.","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"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":"e17bf7e39a4ddffbcdbf9f2ba9b900512728eac4","unresolved":true,"context_lines":[{"line_number":708,"context_line":"                        \"Using auto-detection instead.\","},{"line_number":709,"context_line":"                        {\u0027node\u0027: node.uuid, \u0027proto\u0027: override_upper,"},{"line_number":710,"context_line":"                         \u0027supported\u0027: supported_upper})"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"    if \u0027CIFS\u0027 in supported_upper and CONF.cifs.base_url:"},{"line_number":713,"context_line":"        if CONF.cifs.share_path:"},{"line_number":714,"context_line":"            LOG.debug(\"Auto-selected CIFS transport protocol for node %s\","}],"source_content_type":"text/x-python","patch_set":6,"id":"f7b79664_4e53cfb7","line":711,"in_reply_to":"5085427e_fa69f086","updated":"2026-02-04 19:10:24.000000000","message":"++","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"d33bbe9c3971a73b1b4028ee432635a0033114c6","unresolved":false,"context_lines":[{"line_number":708,"context_line":"                        \"Using auto-detection instead.\","},{"line_number":709,"context_line":"                        {\u0027node\u0027: node.uuid, \u0027proto\u0027: override_upper,"},{"line_number":710,"context_line":"                         \u0027supported\u0027: supported_upper})"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"    if \u0027CIFS\u0027 in supported_upper and CONF.cifs.base_url:"},{"line_number":713,"context_line":"        if CONF.cifs.share_path:"},{"line_number":714,"context_line":"            LOG.debug(\"Auto-selected CIFS transport protocol for node %s\","}],"source_content_type":"text/x-python","patch_set":6,"id":"c22105ff_ec024bd6","line":711,"in_reply_to":"5085427e_fa69f086","updated":"2026-02-05 21:37:50.000000000","message":"Acknowledged","commit_id":"93c1c1a19aca5148665bd46f1b37a2abf6ec64c9"}],"releasenotes/notes/add-nfs-smb-cifs-support-for-virtual-media-776f356e40f956d2.yaml":[{"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":"7886f3707ebb2e4811fa944679430e685d202c14","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    and configuration. Configure NFS or CIFS shares using"},{"line_number":9,"context_line":"    ``[redfish]nfs_base_url``/``nfs_share_path`` or ``[redfish]cifs_base_url``/"},{"line_number":10,"context_line":"    ``cifs_share_path``. Protocol selection can be overridden per-node using"},{"line_number":11,"context_line":"    ``driver_info[vmedia_transport_protocol]``."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7d5cd05e_1b9f51c3","line":11,"updated":"2025-12-09 19:31:26.000000000","message":"We should explicitly indicate that operators are required to configure the share and ensure it\u0027s reachable from the BMC. Ironic is passing along the URL but doing no management.","commit_id":"487f44f26c351e177154ad11ac4e8ce3006d7bbb"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"326c144c68e5f48240229b5a98f3cc7888aca568","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    and configuration. Configure NFS or CIFS shares using"},{"line_number":9,"context_line":"    ``[redfish]nfs_base_url``/``nfs_share_path`` or ``[redfish]cifs_base_url``/"},{"line_number":10,"context_line":"    ``cifs_share_path``. Protocol selection can be overridden per-node using"},{"line_number":11,"context_line":"    ``driver_info[vmedia_transport_protocol]``."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7c7a0438_3cf63952","line":11,"in_reply_to":"7d5cd05e_1b9f51c3","updated":"2026-01-29 03:53:32.000000000","message":"Acknowledged","commit_id":"487f44f26c351e177154ad11ac4e8ce3006d7bbb"}]}
