)]}'
{"/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":"bab1a41d9e177aa5a80888aed94b21d9b1e6b9c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b0c20f0b_842c6a3e","updated":"2023-08-03 15:58:06.000000000","message":"This is weirdly oriented; this is written with a baked in assumption that all backend image links are on the same host and use the same auth... Is that OK? I guess this is incrementally better anyway...\n\nPlease don\u0027t consider this a nak; just a thought that we need to be clear about documenting the use case here since it\u0027s limited in scope.","commit_id":"e4eb40e4684b2a7096458f8bfebd97d113021c1e"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"b71674f32c6c585c09b824492284586be98b347f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b9022988_0f73edd4","in_reply_to":"b0c20f0b_842c6a3e","updated":"2023-08-04 07:20:11.000000000","message":"Ohh, you are very much right about this, I have not considered supporting multiple image sources for BAuth in Ironic (because of my specific use-case). \n\nI will clarify it in the docs.\n\nIn a follow up change I believe I could extend this logic in a way that it supports instance specific BAuth creds.","commit_id":"e4eb40e4684b2a7096458f8bfebd97d113021c1e"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"825a699e198637e4d22bf9fe7e9eb2901eac56f6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"83a0391f_77b70686","in_reply_to":"b9022988_0f73edd4","updated":"2023-08-04 16:21:11.000000000","message":"Done","commit_id":"e4eb40e4684b2a7096458f8bfebd97d113021c1e"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"0c77d8818c9088b3296f1d8b67647becbf7af996","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"baaf6a88_8a8c1d32","updated":"2023-08-04 18:25:01.000000000","message":"recheck","commit_id":"103520435e457e8c9e38dba59e2c1ebd6ad2e3fd"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c35f5c05a38dbade47934b5e9d4e8ee20d3a7a21","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a14513b6_0bfed3c8","updated":"2023-08-07 10:16:27.000000000","message":"I have added the feature description to the Admin guide.","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2de9659c1afce98143e9214190f7b749fd205986","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"fa8683b4_75ec0028","updated":"2023-08-17 15:12:51.000000000","message":"I\u0027d prefer this updated to pass the configuration to IPA via image information - see my comments on the IPA patch.","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"115d41a6bcb4b7318484e8d6b30c67e36c181e07","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2c20f43b_95bae957","updated":"2023-09-04 08:40:15.000000000","message":"Thanks for all the reviews! I will change the code according to them.","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"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":"a1e7b7b6fe9386848131ac178f50b952b42b9d44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"cbe57009_b09e309b","updated":"2023-09-11 16:14:59.000000000","message":"removing ironic-week-prio hashtag as this is in merge conflict; please re-add it when this is ready for additional review","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"15c3a2631f63668b5b29b1ebc081c26e78d54fff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"31859d06_fce8b1a1","in_reply_to":"2c20f43b_95bae957","updated":"2023-09-22 07:40:49.000000000","message":"Done","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"8c3a16fb95feb9e7ae2709d77b4ff690ab8ddc71","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"087277db_dff6bf29","updated":"2023-10-02 04:36:48.000000000","message":"I\u0027d like to put a hold on this approach so we can have a discussion. Couldn\u0027t we just implement rfc1738 section 3.1 so the basic auth credentials can be extracted from the supplied url of the form:\n\n  //\u003cuser\u003e:\u003cpassword\u003e@\u003chost\u003e:\u003cport\u003e/\u003curl-path\u003e\n\nThen we wouldn\u0027t be adding new ironic configuration options which apply to only one host. We\u0027d need to acknowledge the implications of \u003cpassword\u003e being passed over APIs and being stored, but can we have that discussion before going with this approach?","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"857061273e35e52f48cabafef92d2accca96cb35","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ccbdee13_9d2ad01d","in_reply_to":"087277db_dff6bf29","updated":"2023-10-02 08:21:09.000000000","message":"Thanks for the review.\n\nMy opinion related to rfc 1738 3.1 support and it\u0027s relation to \u0027Basic Auth\u0027 support is the following:\n\n- rfc 1738 is \"supported\" by Ironic, user can just add the username and password to the url Ironic/IPA won\u0027t remove it\n- That said rfc 1738 is an obsolete standard and it was updated by [1] and in section 3.2.1 of [1] it is clearly stated that passing username and  \n  password in the url as clear text is a security issue in almost all context\n- In my current work I am implementing support for [2] known as \u0027Basic Auth\u0027 which is also supported by default in [3] that is used by Ironic and IPA to handle HTTP requests,\n  and the authentication credentials are sent in the request header encrypted which is more secure compared to passing them in the URL.\n- My \u0027Basic Auth\u0027 work is not mutually exclusive with the rfc 1738 section 3.1 support so I don\u0027t see any reason why my changes should be put on hold.\n\n\n[1] : https://datatracker.ietf.org/doc/html/rfc3986\n[2] : https://datatracker.ietf.org/doc/html/rfc7617\n[3] : https://requests.readthedocs.io/en/latest/user/authentication/#basic-authentication","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ca944eb4af7c5d68237c41eaacf3ea383b8ab3cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"af2b65aa_d31059ac","in_reply_to":"294e90ad_d2c6f6b4","updated":"2023-10-02 22:52:40.000000000","message":"Thanks for the clear counterpoints, removing my -2.","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"5673b3f8d1d7c9007b8f83685d32c40ab4206365","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"294e90ad_d2c6f6b4","in_reply_to":"ccbdee13_9d2ad01d","updated":"2023-10-02 08:52:59.000000000","message":"If I take a different interpretation of your comment and you have actually meant to use Basic Auth rfc 7617 but pass the creds to Ironic the same way as rfc 1738 used to. Then my objection would be that in this case we would need to have the credentials stored in all the places where the urls are used which could also increase the attack surface for users of Ironic. \n\nWith the current approach the user needs to specify the credentials once in 1 place. Ofc there is a limitation currently, because the credentials are added to global ironic config, they apply to all image downloads. In the future we could implement node specific Bauth support but even in that case I would rather expand e.g. the Ironic Node\u0027s instance_info API field with bauth username and password or something along these lines, instead of adding the credentials to the url.","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a7593724_c3082477","updated":"2023-10-16 13:20:47.000000000","message":"Thanks for the review Dmitry!","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2441d04e17c271650a06a85ec79923ba696f6ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"d57eb393_95068f7f","updated":"2023-11-28 14:23:14.000000000","message":"I\u0027ve left some comments inline, could you fix them in a follow-up change?","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"8a488f6976f0baa315e887d61f57a729ff68464b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"19161109_5c640358","updated":"2023-12-01 09:20:56.000000000","message":"Nits are fixed in https://review.opendev.org/c/openstack/ironic/+/902363.\nThanks for all the suggestions !","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"}],"doc/source/admin/index.rst":[{"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":"7fff8d815812b4d2afcd1f3aa8aa3f9ab6467535","unresolved":true,"context_lines":[{"line_number":32,"context_line":"   Booting a Ramdisk or an ISO \u003cramdisk-boot\u003e"},{"line_number":33,"context_line":"   Hardware Burn-in \u003chardware-burn-in\u003e"},{"line_number":34,"context_line":"   Vendor Passthru \u003cvendor-passthru\u003e"},{"line_number":35,"context_line":"   Basica Auth support for user-image servers \u003cuser-image-basic-auth\u003e"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Drivers, Hardware Types and Hardware Interfaces"},{"line_number":38,"context_line":"-----------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"e792575d_e978b64f","line":35,"updated":"2023-08-17 15:39:23.000000000","message":"sp: Basic","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"15c3a2631f63668b5b29b1ebc081c26e78d54fff","unresolved":false,"context_lines":[{"line_number":32,"context_line":"   Booting a Ramdisk or an ISO \u003cramdisk-boot\u003e"},{"line_number":33,"context_line":"   Hardware Burn-in \u003chardware-burn-in\u003e"},{"line_number":34,"context_line":"   Vendor Passthru \u003cvendor-passthru\u003e"},{"line_number":35,"context_line":"   Basica Auth support for user-image servers \u003cuser-image-basic-auth\u003e"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Drivers, Hardware Types and Hardware Interfaces"},{"line_number":38,"context_line":"-----------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"efc3583e_9008bfc6","line":35,"in_reply_to":"881ee80a_680b42fd","updated":"2023-09-22 07:40:49.000000000","message":"Done","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"115d41a6bcb4b7318484e8d6b30c67e36c181e07","unresolved":true,"context_lines":[{"line_number":32,"context_line":"   Booting a Ramdisk or an ISO \u003cramdisk-boot\u003e"},{"line_number":33,"context_line":"   Hardware Burn-in \u003chardware-burn-in\u003e"},{"line_number":34,"context_line":"   Vendor Passthru \u003cvendor-passthru\u003e"},{"line_number":35,"context_line":"   Basica Auth support for user-image servers \u003cuser-image-basic-auth\u003e"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Drivers, Hardware Types and Hardware Interfaces"},{"line_number":38,"context_line":"-----------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"881ee80a_680b42fd","line":35,"in_reply_to":"e792575d_e978b64f","updated":"2023-09-04 08:40:15.000000000","message":"Ack","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":33,"context_line":"   Hardware Burn-in \u003chardware-burn-in\u003e"},{"line_number":34,"context_line":"   Vendor Passthru \u003cvendor-passthru\u003e"},{"line_number":35,"context_line":"   Servicing \u003cservicing\u003e"},{"line_number":36,"context_line":"   Basic Auth support for user-image servers \u003cuser-image-basic-auth\u003e"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Drivers, Hardware Types and Hardware Interfaces"},{"line_number":39,"context_line":"-----------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dd710a25_6d03c63c","line":36,"updated":"2023-10-16 09:28:21.000000000","message":"This should go to the user guide, and ideally linked from the standalone deploy document.","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"   Hardware Burn-in \u003chardware-burn-in\u003e"},{"line_number":34,"context_line":"   Vendor Passthru \u003cvendor-passthru\u003e"},{"line_number":35,"context_line":"   Servicing \u003cservicing\u003e"},{"line_number":36,"context_line":"   Basic Auth support for user-image servers \u003cuser-image-basic-auth\u003e"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Drivers, Hardware Types and Hardware Interfaces"},{"line_number":39,"context_line":"-----------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"e2f39d36_1da1db75","line":36,"in_reply_to":"87dc50c8_c46b6566","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4251554d9afb6be93a3ced9f1b57164577e43e02","unresolved":true,"context_lines":[{"line_number":33,"context_line":"   Hardware Burn-in \u003chardware-burn-in\u003e"},{"line_number":34,"context_line":"   Vendor Passthru \u003cvendor-passthru\u003e"},{"line_number":35,"context_line":"   Servicing \u003cservicing\u003e"},{"line_number":36,"context_line":"   Basic Auth support for user-image servers \u003cuser-image-basic-auth\u003e"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Drivers, Hardware Types and Hardware Interfaces"},{"line_number":39,"context_line":"-----------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"87dc50c8_c46b6566","line":36,"in_reply_to":"acd3b340_9cf34235","updated":"2023-10-16 13:23:45.000000000","message":"Okay, actually.. Since we only provide config options, it can stay here. But a cross link would be nice.\n\nOh, and maybe capitalize the title to make it consistent with the others.","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":33,"context_line":"   Hardware Burn-in \u003chardware-burn-in\u003e"},{"line_number":34,"context_line":"   Vendor Passthru \u003cvendor-passthru\u003e"},{"line_number":35,"context_line":"   Servicing \u003cservicing\u003e"},{"line_number":36,"context_line":"   Basic Auth support for user-image servers \u003cuser-image-basic-auth\u003e"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Drivers, Hardware Types and Hardware Interfaces"},{"line_number":39,"context_line":"-----------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"acd3b340_9cf34235","line":36,"in_reply_to":"dd710a25_6d03c63c","updated":"2023-10-16 13:20:47.000000000","message":"Ack\nJust a Note JayF asked me to put it into the admin guide so from my perspective there are two conflicting reviews related to the location of the doc.\n\nCould you @JayF please give your opinion about this?","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2441d04e17c271650a06a85ec79923ba696f6ad","unresolved":true,"context_lines":[{"line_number":33,"context_line":"   Hardware Burn-in \u003chardware-burn-in\u003e"},{"line_number":34,"context_line":"   Vendor Passthru \u003cvendor-passthru\u003e"},{"line_number":35,"context_line":"   Servicing \u003cservicing\u003e"},{"line_number":36,"context_line":"   Basic Auth Support For User-image Servers \u003cuser-image-basic-auth\u003e"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Drivers, Hardware Types and Hardware Interfaces"},{"line_number":39,"context_line":"-----------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5369a7d5_07f6cd1f","line":36,"updated":"2023-11-28 14:23:14.000000000","message":"nit: \"Authentication Support for Instance Images\"","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"8a488f6976f0baa315e887d61f57a729ff68464b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"   Hardware Burn-in \u003chardware-burn-in\u003e"},{"line_number":34,"context_line":"   Vendor Passthru \u003cvendor-passthru\u003e"},{"line_number":35,"context_line":"   Servicing \u003cservicing\u003e"},{"line_number":36,"context_line":"   Basic Auth Support For User-image Servers \u003cuser-image-basic-auth\u003e"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Drivers, Hardware Types and Hardware Interfaces"},{"line_number":39,"context_line":"-----------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"bedf5921_6271f1e6","line":36,"in_reply_to":"5369a7d5_07f6cd1f","updated":"2023-12-01 09:20:56.000000000","message":"Done","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"}],"doc/source/admin/user-image-basic-auth.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"HTTP(s) Authentication strategy support for user image servers"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"How to enable the feature via global configuration options"}],"source_content_type":"text/x-rst","patch_set":7,"id":"f2c17f1f_7597aedc","line":2,"updated":"2023-10-16 09:28:21.000000000","message":"nit: s/strategy support// (just to make it less verbose)","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"HTTP(s) Authentication strategy support for user image servers"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"How to enable the feature via global configuration options"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3b5043b9_56fc1c03","line":2,"in_reply_to":"10a0de27_d10cafae","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"HTTP(s) Authentication strategy support for user image servers"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"How to enable the feature via global configuration options"}],"source_content_type":"text/x-rst","patch_set":7,"id":"10a0de27_d10cafae","line":2,"in_reply_to":"f2c17f1f_7597aedc","updated":"2023-10-16 13:20:47.000000000","message":"Ack","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"There are 3 new variables that could be used to manage image server"},{"line_number":9,"context_line":"authentication strategy. The 3 variables are structured such a way that 1 of"},{"line_number":10,"context_line":"them `image_server_auth_strategy` (string) provides the option to specify"},{"line_number":11,"context_line":"the desired authentication strategy. Currently the only supported"},{"line_number":12,"context_line":"authentication strategy is `http_basic` that represents the HTTP(S) Basic"},{"line_number":13,"context_line":"Authentication also known as the `RFC 7616` internet standard."}],"source_content_type":"text/x-rst","patch_set":7,"id":"5cb53292_c6c99be7","line":10,"updated":"2023-10-16 09:28:21.000000000","message":"nit: RST uses double ticks where markdown uses one, so this and other literal values should be ``surrounded like this``","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"There are 3 new variables that could be used to manage image server"},{"line_number":9,"context_line":"authentication strategy. The 3 variables are structured such a way that 1 of"},{"line_number":10,"context_line":"them `image_server_auth_strategy` (string) provides the option to specify"},{"line_number":11,"context_line":"the desired authentication strategy. Currently the only supported"},{"line_number":12,"context_line":"authentication strategy is `http_basic` that represents the HTTP(S) Basic"},{"line_number":13,"context_line":"Authentication also known as the `RFC 7616` internet standard."}],"source_content_type":"text/x-rst","patch_set":7,"id":"b34c2370_35bad65e","line":10,"in_reply_to":"5cb53292_c6c99be7","updated":"2023-10-16 13:20:47.000000000","message":"Ack","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"There are 3 new variables that could be used to manage image server"},{"line_number":9,"context_line":"authentication strategy. The 3 variables are structured such a way that 1 of"},{"line_number":10,"context_line":"them `image_server_auth_strategy` (string) provides the option to specify"},{"line_number":11,"context_line":"the desired authentication strategy. Currently the only supported"},{"line_number":12,"context_line":"authentication strategy is `http_basic` that represents the HTTP(S) Basic"},{"line_number":13,"context_line":"Authentication also known as the `RFC 7616` internet standard."}],"source_content_type":"text/x-rst","patch_set":7,"id":"69073ea0_87ef09f2","line":10,"in_reply_to":"b34c2370_35bad65e","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":23,"context_line":"When a authentication strategy is selected against the user image server an"},{"line_number":24,"context_line":"exception will be raised in case any of the credentials are None or an empty"},{"line_number":25,"context_line":"string. The variables belong to the `deploy` configuration group and could be"},{"line_number":26,"context_line":"configured via the global Ironic configuration file."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Known limitations"},{"line_number":29,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"4f1c2785_f182e07a","line":26,"updated":"2023-10-16 09:28:21.000000000","message":"nit: an example could be handy (see other places how to provide an ini example0","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":23,"context_line":"When a authentication strategy is selected against the user image server an"},{"line_number":24,"context_line":"exception will be raised in case any of the credentials are None or an empty"},{"line_number":25,"context_line":"string. The variables belong to the `deploy` configuration group and could be"},{"line_number":26,"context_line":"configured via the global Ironic configuration file."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Known limitations"},{"line_number":29,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"8e938247_6262d608","line":26,"in_reply_to":"4f1c2785_f182e07a","updated":"2023-10-16 13:20:47.000000000","message":"Ack","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"When a authentication strategy is selected against the user image server an"},{"line_number":24,"context_line":"exception will be raised in case any of the credentials are None or an empty"},{"line_number":25,"context_line":"string. The variables belong to the `deploy` configuration group and could be"},{"line_number":26,"context_line":"configured via the global Ironic configuration file."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Known limitations"},{"line_number":29,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"209c97a5_3a3e90b0","line":26,"in_reply_to":"8e938247_6262d608","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":29,"context_line":"-----------------"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This implementation of the authentication strategy for user image handling is"},{"line_number":32,"context_line":"implemented via the global Ironic configuration process (`oslo.config`)"},{"line_number":33,"context_line":"thus it doesn\u0027t provide node specific customization options."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"When `image_server_auth_strategy` is set to any valid value all image"}],"source_content_type":"text/x-rst","patch_set":7,"id":"aabaf51e_0b7934aa","line":32,"updated":"2023-10-16 09:28:21.000000000","message":"nit: no need to reference to oslo.config, it\u0027s an implementation detail","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"-----------------"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This implementation of the authentication strategy for user image handling is"},{"line_number":32,"context_line":"implemented via the global Ironic configuration process (`oslo.config`)"},{"line_number":33,"context_line":"thus it doesn\u0027t provide node specific customization options."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"When `image_server_auth_strategy` is set to any valid value all image"}],"source_content_type":"text/x-rst","patch_set":7,"id":"2b5b0054_c5b03918","line":32,"in_reply_to":"2dfbad71_c44b4ed6","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":29,"context_line":"-----------------"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This implementation of the authentication strategy for user image handling is"},{"line_number":32,"context_line":"implemented via the global Ironic configuration process (`oslo.config`)"},{"line_number":33,"context_line":"thus it doesn\u0027t provide node specific customization options."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"When `image_server_auth_strategy` is set to any valid value all image"}],"source_content_type":"text/x-rst","patch_set":7,"id":"2dfbad71_c44b4ed6","line":32,"in_reply_to":"aabaf51e_0b7934aa","updated":"2023-10-16 13:20:47.000000000","message":"Ack","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2441d04e17c271650a06a85ec79923ba696f6ad","unresolved":true,"context_lines":[{"line_number":26,"context_line":"configured via the global Ironic configuration file."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"The authentication strategy configuration affects the download process"},{"line_number":29,"context_line":"for ``disk`` images, ``live ISO`` images and the ``deploy`` images."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Example"},{"line_number":32,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"cee28b0f_7cdc34f9","line":29,"updated":"2023-11-28 14:23:14.000000000","message":"nit: \"live ISO\" images is the Metal3 team, here we talk about \"ramdisk deploy. Also, not just \"deploy images\", but better \"IPA ramdisk images\" (they\u0027re used for many purposes).","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"8a488f6976f0baa315e887d61f57a729ff68464b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"configured via the global Ironic configuration file."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"The authentication strategy configuration affects the download process"},{"line_number":29,"context_line":"for ``disk`` images, ``live ISO`` images and the ``deploy`` images."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Example"},{"line_number":32,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"d05748e4_3e7be2fe","line":29,"in_reply_to":"cee28b0f_7cdc34f9","updated":"2023-12-01 09:20:56.000000000","message":"Done","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2441d04e17c271650a06a85ec79923ba696f6ad","unresolved":true,"context_lines":[{"line_number":32,"context_line":"-------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Example of activating the ``http-basic`` strategy via"},{"line_number":35,"context_line":"``/etc/ironic/ironic.conf``::"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"  [deploy]"},{"line_number":38,"context_line":"  ..."}],"source_content_type":"text/x-rst","patch_set":8,"id":"e099e4c5_4a9f1a76","line":35,"updated":"2023-11-28 14:23:14.000000000","message":"A better syntax would add highlighting:\n\n via ``ironic.conf``:\n \n .. code-block:: ini\n \n    [deploy]\n    ...\n    \n(gerrit UI will butcher the syntax - grep for code-block)","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"8a488f6976f0baa315e887d61f57a729ff68464b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"-------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Example of activating the ``http-basic`` strategy via"},{"line_number":35,"context_line":"``/etc/ironic/ironic.conf``::"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"  [deploy]"},{"line_number":38,"context_line":"  ..."}],"source_content_type":"text/x-rst","patch_set":8,"id":"6fcafe1f_5a5f9419","line":35,"in_reply_to":"e099e4c5_4a9f1a76","updated":"2023-12-01 09:20:56.000000000","message":"Done","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2441d04e17c271650a06a85ec79923ba696f6ad","unresolved":true,"context_lines":[{"line_number":45,"context_line":"-----------------"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"This implementation of the authentication strategy for user image handling is"},{"line_number":48,"context_line":"implemented via the global Ironic configuration process thus it doesn\u0027t"},{"line_number":49,"context_line":"provide node specific customization options."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"When ``image_server_auth_strategy`` is set to any valid value all image"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7242d67b_b15daf81","line":48,"updated":"2023-11-28 14:23:14.000000000","message":"nit: s/Ironic configuration process/configuration/","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"8a488f6976f0baa315e887d61f57a729ff68464b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"-----------------"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"This implementation of the authentication strategy for user image handling is"},{"line_number":48,"context_line":"implemented via the global Ironic configuration process thus it doesn\u0027t"},{"line_number":49,"context_line":"provide node specific customization options."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"When ``image_server_auth_strategy`` is set to any valid value all image"}],"source_content_type":"text/x-rst","patch_set":8,"id":"c3ef069a_5b389654","line":48,"in_reply_to":"7242d67b_b15daf81","updated":"2023-12-01 09:20:56.000000000","message":"Done","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"}],"ironic/common/image_service.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":"7fff8d815812b4d2afcd1f3aa8aa3f9ab6467535","unresolved":true,"context_lines":[{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if user is None or user \u003d\u003d \"\":"},{"line_number":88,"context_line":"            raise exception.ImageRefValidationFailed("},{"line_number":89,"context_line":"                image_href\u003dimage_href,"},{"line_number":90,"context_line":"                reason\u003d\"Disk image host\u0027s HTTP(S) basic auth username is\""},{"line_number":91,"context_line":"                       \"missing!\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"db5911ec_4267b433","line":88,"updated":"2023-08-17 15:39:23.000000000","message":"nit: you could return a better error with something like this:\n```\nfields \u003d [\u0027username\u0027, \u0027password\u0027]\nmissing_fields \u003d []\nfor field in fields:\n    if not field:\n        missing_fields.append(field)\nif missing_fields:\n    raise exception.ImageRefValidationFailed(\n        reason\u003d\"Missing {} fields from HTTP(S) basic auth config\"\n    )\n```","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"15c3a2631f63668b5b29b1ebc081c26e78d54fff","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if user is None or user \u003d\u003d \"\":"},{"line_number":88,"context_line":"            raise exception.ImageRefValidationFailed("},{"line_number":89,"context_line":"                image_href\u003dimage_href,"},{"line_number":90,"context_line":"                reason\u003d\"Disk image host\u0027s HTTP(S) basic auth username is\""},{"line_number":91,"context_line":"                       \"missing!\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"23075435_c4e0a60e","line":88,"in_reply_to":"cbef0fc2_0fba3909","updated":"2023-09-22 07:40:49.000000000","message":"Done","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"115d41a6bcb4b7318484e8d6b30c67e36c181e07","unresolved":true,"context_lines":[{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if user is None or user \u003d\u003d \"\":"},{"line_number":88,"context_line":"            raise exception.ImageRefValidationFailed("},{"line_number":89,"context_line":"                image_href\u003dimage_href,"},{"line_number":90,"context_line":"                reason\u003d\"Disk image host\u0027s HTTP(S) basic auth username is\""},{"line_number":91,"context_line":"                       \"missing!\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"cbef0fc2_0fba3909","line":88,"in_reply_to":"db5911ec_4267b433","updated":"2023-09-04 08:40:15.000000000","message":"Thanks I will incorporate this!","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class HttpImageService(BaseImageService):"},{"line_number":75,"context_line":"    \"\"\"Provides retrieval of disk images using HTTP.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"14b30e12_0761b7c1","line":74,"updated":"2023-10-16 09:28:21.000000000","message":"Note: this class is used in a lot of places, so you\u0027re not just affecting disk images, but also deploy images, live ISO, etc. This should be reflected in the documentation.","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class HttpImageService(BaseImageService):"},{"line_number":75,"context_line":"    \"\"\"Provides retrieval of disk images using HTTP.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"330684ea_4205199a","line":74,"in_reply_to":"14b30e12_0761b7c1","updated":"2023-10-16 13:20:47.000000000","message":"Ack","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class HttpImageService(BaseImageService):"},{"line_number":75,"context_line":"    \"\"\"Provides retrieval of disk images using HTTP.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"e57f3c48_a27a4e65","line":74,"in_reply_to":"330684ea_4205199a","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":74,"context_line":"class HttpImageService(BaseImageService):"},{"line_number":75,"context_line":"    \"\"\"Provides retrieval of disk images using HTTP.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @classmethod"},{"line_number":78,"context_line":"    def gen_auth_from_conf_user_pass(cls, image_href):"},{"line_number":79,"context_line":"        \"\"\"This function is used to pass the credentials to the chosen"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1dcd212f_e65e3ea3","line":77,"updated":"2023-10-16 09:28:21.000000000","message":"nit: there is rarely point in classmethods in Python, this could be just a function","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":74,"context_line":"class HttpImageService(BaseImageService):"},{"line_number":75,"context_line":"    \"\"\"Provides retrieval of disk images using HTTP.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @classmethod"},{"line_number":78,"context_line":"    def gen_auth_from_conf_user_pass(cls, image_href):"},{"line_number":79,"context_line":"        \"\"\"This function is used to pass the credentials to the chosen"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"b6458ea8_8f56b9c4","line":77,"in_reply_to":"1dcd212f_e65e3ea3","updated":"2023-10-16 13:20:47.000000000","message":"Okay I will remove the class method then","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"class HttpImageService(BaseImageService):"},{"line_number":75,"context_line":"    \"\"\"Provides retrieval of disk images using HTTP.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @classmethod"},{"line_number":78,"context_line":"    def gen_auth_from_conf_user_pass(cls, image_href):"},{"line_number":79,"context_line":"        \"\"\"This function is used to pass the credentials to the chosen"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"b83dc1ff_b2c7faa2","line":77,"in_reply_to":"b6458ea8_8f56b9c4","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":106,"context_line":"        return requests.auth.HTTPBasicAuth(image_server_user,"},{"line_number":107,"context_line":"                                           image_server_password)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @classmethod"},{"line_number":110,"context_line":"    def verify_basic_auth_cred_format(cls, image_href,"},{"line_number":111,"context_line":"                                      user\u003dNone, password\u003dNone):"},{"line_number":112,"context_line":"        \"\"\"Verify basic auth credentials used for image head request."}],"source_content_type":"text/x-python","patch_set":7,"id":"8bde8208_60f4f2a8","line":109,"updated":"2023-10-16 09:28:21.000000000","message":"same","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        return requests.auth.HTTPBasicAuth(image_server_user,"},{"line_number":107,"context_line":"                                           image_server_password)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @classmethod"},{"line_number":110,"context_line":"    def verify_basic_auth_cred_format(cls, image_href,"},{"line_number":111,"context_line":"                                      user\u003dNone, password\u003dNone):"},{"line_number":112,"context_line":"        \"\"\"Verify basic auth credentials used for image head request."}],"source_content_type":"text/x-python","patch_set":7,"id":"75ce0b5d_8d3c69f4","line":109,"in_reply_to":"37037231_3b2d11fc","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":106,"context_line":"        return requests.auth.HTTPBasicAuth(image_server_user,"},{"line_number":107,"context_line":"                                           image_server_password)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @classmethod"},{"line_number":110,"context_line":"    def verify_basic_auth_cred_format(cls, image_href,"},{"line_number":111,"context_line":"                                      user\u003dNone, password\u003dNone):"},{"line_number":112,"context_line":"        \"\"\"Verify basic auth credentials used for image head request."}],"source_content_type":"text/x-python","patch_set":7,"id":"37037231_3b2d11fc","line":109,"in_reply_to":"8bde8208_60f4f2a8","updated":"2023-10-16 13:20:47.000000000","message":"Ack","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        :raises: exception.ImageRefValidationFailed if the credentials are not"},{"line_number":117,"context_line":"            present"},{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        expected_creds \u003d {\u0027user\u0027: user, \u0027password\u0027: password}"},{"line_number":120,"context_line":"        missing_creds \u003d []"},{"line_number":121,"context_line":"        for key, value in expected_creds.items():"},{"line_number":122,"context_line":"            if not value:"}],"source_content_type":"text/x-python","patch_set":7,"id":"b0616c27_d4b44857","line":119,"updated":"2023-10-16 09:28:21.000000000","message":"You\u0027re going to use \"user\" and \"password\" in the error message. This is not how they are actually called, I suggest using the configuration option names.","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        :raises: exception.ImageRefValidationFailed if the credentials are not"},{"line_number":117,"context_line":"            present"},{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        expected_creds \u003d {\u0027user\u0027: user, \u0027password\u0027: password}"},{"line_number":120,"context_line":"        missing_creds \u003d []"},{"line_number":121,"context_line":"        for key, value in expected_creds.items():"},{"line_number":122,"context_line":"            if not value:"}],"source_content_type":"text/x-python","patch_set":7,"id":"e0eda381_4711861d","line":119,"in_reply_to":"b0616c27_d4b44857","updated":"2023-10-16 13:20:47.000000000","message":"Ack","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        :raises: exception.ImageRefValidationFailed if the credentials are not"},{"line_number":117,"context_line":"            present"},{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        expected_creds \u003d {\u0027user\u0027: user, \u0027password\u0027: password}"},{"line_number":120,"context_line":"        missing_creds \u003d []"},{"line_number":121,"context_line":"        for key, value in expected_creds.items():"},{"line_number":122,"context_line":"            if not value:"}],"source_content_type":"text/x-python","patch_set":7,"id":"37ff9dc4_47c243e3","line":119,"in_reply_to":"e0eda381_4711861d","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":124,"context_line":"        if missing_creds:"},{"line_number":125,"context_line":"            raise exception.ImageRefValidationFailed("},{"line_number":126,"context_line":"                image_href\u003dimage_href,"},{"line_number":127,"context_line":"                reason\u003d\"Missing {} fields from HTTP(S) \""},{"line_number":128,"context_line":"                       \"basic auth config\".format(missing_creds)"},{"line_number":129,"context_line":"            )"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"86202fc6_4fff2246","line":127,"updated":"2023-10-16 09:28:21.000000000","message":"User-visible strings should be surrounded by _() for translation and use the old-school %s formatting","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        if missing_creds:"},{"line_number":125,"context_line":"            raise exception.ImageRefValidationFailed("},{"line_number":126,"context_line":"                image_href\u003dimage_href,"},{"line_number":127,"context_line":"                reason\u003d\"Missing {} fields from HTTP(S) \""},{"line_number":128,"context_line":"                       \"basic auth config\".format(missing_creds)"},{"line_number":129,"context_line":"            )"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"b05e9654_10c48f26","line":127,"in_reply_to":"86202fc6_4fff2246","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":148,"context_line":"                                               strict\u003dTrue)"},{"line_number":149,"context_line":"        except ValueError:"},{"line_number":150,"context_line":"            verify \u003d CONF.webserver_verify_ca"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        head_request_attributes \u003d {"},{"line_number":153,"context_line":"            \"verify\": verify,"},{"line_number":154,"context_line":"            \"timeout\": CONF.webserver_connection_timeout"},{"line_number":155,"context_line":"        }"},{"line_number":156,"context_line":"        try:"},{"line_number":157,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":158,"context_line":"            if auth is not None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1198e9b6_8488981d","line":155,"range":{"start_line":151,"start_character":0,"end_line":155,"end_character":9},"updated":"2023-10-16 09:28:21.000000000","message":"These are passed always, why move them to a dict?","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":148,"context_line":"                                               strict\u003dTrue)"},{"line_number":149,"context_line":"        except ValueError:"},{"line_number":150,"context_line":"            verify \u003d CONF.webserver_verify_ca"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        head_request_attributes \u003d {"},{"line_number":153,"context_line":"            \"verify\": verify,"},{"line_number":154,"context_line":"            \"timeout\": CONF.webserver_connection_timeout"},{"line_number":155,"context_line":"        }"},{"line_number":156,"context_line":"        try:"},{"line_number":157,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":158,"context_line":"            if auth is not None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"862d8ac9_ae37de01","line":155,"range":{"start_line":151,"start_character":0,"end_line":155,"end_character":9},"in_reply_to":"1198e9b6_8488981d","updated":"2023-10-16 13:20:47.000000000","message":"This was coming from the previous implementation, I wanted to pass only \"not None\" arguments originally because otherwise I have found that I would have needed some additional if-else controls structures . Thus extending this dict seemed reasonable because then I was able to just not add any argument that is a None.\n\nNow with this current implementation it is true hat the code has become more cleaner. I will have to check whether the request handles gracefully if the \"auth\" argument gets the \"None\" value explicitly.","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                                               strict\u003dTrue)"},{"line_number":149,"context_line":"        except ValueError:"},{"line_number":150,"context_line":"            verify \u003d CONF.webserver_verify_ca"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        head_request_attributes \u003d {"},{"line_number":153,"context_line":"            \"verify\": verify,"},{"line_number":154,"context_line":"            \"timeout\": CONF.webserver_connection_timeout"},{"line_number":155,"context_line":"        }"},{"line_number":156,"context_line":"        try:"},{"line_number":157,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":158,"context_line":"            if auth is not None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"6b2accbd_7d0fad61","line":155,"range":{"start_line":151,"start_character":0,"end_line":155,"end_character":9},"in_reply_to":"4d07f165_328157d1","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4251554d9afb6be93a3ced9f1b57164577e43e02","unresolved":true,"context_lines":[{"line_number":148,"context_line":"                                               strict\u003dTrue)"},{"line_number":149,"context_line":"        except ValueError:"},{"line_number":150,"context_line":"            verify \u003d CONF.webserver_verify_ca"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        head_request_attributes \u003d {"},{"line_number":153,"context_line":"            \"verify\": verify,"},{"line_number":154,"context_line":"            \"timeout\": CONF.webserver_connection_timeout"},{"line_number":155,"context_line":"        }"},{"line_number":156,"context_line":"        try:"},{"line_number":157,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":158,"context_line":"            if auth is not None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"4d07f165_328157d1","line":155,"range":{"start_line":151,"start_character":0,"end_line":155,"end_character":9},"in_reply_to":"862d8ac9_ae37de01","updated":"2023-10-16 13:23:45.000000000","message":"1) I suspect None is the default\n\n2) Or you start with an empty dict, add \"auth\" conditionally, keeping everything else as it was.","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":156,"context_line":"        try:"},{"line_number":157,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":158,"context_line":"            if auth is not None:"},{"line_number":159,"context_line":"                head_request_attributes[\u0027auth\u0027] \u003d requests.auth.HTTPBasicAuth("},{"line_number":160,"context_line":"                    CONF.deploy.image_server_user,"},{"line_number":161,"context_line":"                    CONF.deploy.image_server_password)"},{"line_number":162,"context_line":"            # NOTE(TheJulia): Head requests do not work on things that are not"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae80ab7_636c3161","line":159,"updated":"2023-10-16 09:28:21.000000000","message":"\"auth\" is already a HTTPBasicAuth object, you can just use it","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":156,"context_line":"        try:"},{"line_number":157,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":158,"context_line":"            if auth is not None:"},{"line_number":159,"context_line":"                head_request_attributes[\u0027auth\u0027] \u003d requests.auth.HTTPBasicAuth("},{"line_number":160,"context_line":"                    CONF.deploy.image_server_user,"},{"line_number":161,"context_line":"                    CONF.deploy.image_server_password)"},{"line_number":162,"context_line":"            # NOTE(TheJulia): Head requests do not work on things that are not"}],"source_content_type":"text/x-python","patch_set":7,"id":"44fcaea7_3c8e4597","line":159,"in_reply_to":"1ae80ab7_636c3161","updated":"2023-10-16 13:20:47.000000000","message":"Ack","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        try:"},{"line_number":157,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":158,"context_line":"            if auth is not None:"},{"line_number":159,"context_line":"                head_request_attributes[\u0027auth\u0027] \u003d requests.auth.HTTPBasicAuth("},{"line_number":160,"context_line":"                    CONF.deploy.image_server_user,"},{"line_number":161,"context_line":"                    CONF.deploy.image_server_password)"},{"line_number":162,"context_line":"            # NOTE(TheJulia): Head requests do not work on things that are not"}],"source_content_type":"text/x-python","patch_set":7,"id":"ed13431c_0716ac6f","line":159,"in_reply_to":"44fcaea7_3c8e4597","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":228,"context_line":"        except ValueError:"},{"line_number":229,"context_line":"            verify \u003d CONF.webserver_verify_ca"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        head_request_attributes \u003d {"},{"line_number":232,"context_line":"            \"stream\": True,"},{"line_number":233,"context_line":"            \"verify\": verify,"},{"line_number":234,"context_line":"            \"timeout\": CONF.webserver_connection_timeout,"},{"line_number":235,"context_line":"        }"},{"line_number":236,"context_line":"        try:"},{"line_number":237,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":238,"context_line":"            if auth is not None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"4b293bfd_5c76e0cf","line":235,"range":{"start_line":231,"start_character":0,"end_line":235,"end_character":9},"updated":"2023-10-16 09:28:21.000000000","message":"Same","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":228,"context_line":"        except ValueError:"},{"line_number":229,"context_line":"            verify \u003d CONF.webserver_verify_ca"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        head_request_attributes \u003d {"},{"line_number":232,"context_line":"            \"stream\": True,"},{"line_number":233,"context_line":"            \"verify\": verify,"},{"line_number":234,"context_line":"            \"timeout\": CONF.webserver_connection_timeout,"},{"line_number":235,"context_line":"        }"},{"line_number":236,"context_line":"        try:"},{"line_number":237,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":238,"context_line":"            if auth is not None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"cd1f92ef_8326ce24","line":235,"range":{"start_line":231,"start_character":0,"end_line":235,"end_character":9},"in_reply_to":"4b293bfd_5c76e0cf","updated":"2023-10-16 13:20:47.000000000","message":"Ack","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        except ValueError:"},{"line_number":229,"context_line":"            verify \u003d CONF.webserver_verify_ca"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        head_request_attributes \u003d {"},{"line_number":232,"context_line":"            \"stream\": True,"},{"line_number":233,"context_line":"            \"verify\": verify,"},{"line_number":234,"context_line":"            \"timeout\": CONF.webserver_connection_timeout,"},{"line_number":235,"context_line":"        }"},{"line_number":236,"context_line":"        try:"},{"line_number":237,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":238,"context_line":"            if auth is not None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"e2412b14_62cbdeff","line":235,"range":{"start_line":231,"start_character":0,"end_line":235,"end_character":9},"in_reply_to":"cd1f92ef_8326ce24","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":236,"context_line":"        try:"},{"line_number":237,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":238,"context_line":"            if auth is not None:"},{"line_number":239,"context_line":"                head_request_attributes[\u0027auth\u0027] \u003d requests.auth.HTTPBasicAuth("},{"line_number":240,"context_line":"                    CONF.deploy.image_server_user,"},{"line_number":241,"context_line":"                    CONF.deploy.image_server_password)"},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"52516be2_1cb14ce6","line":239,"updated":"2023-10-16 09:28:21.000000000","message":"same","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":236,"context_line":"        try:"},{"line_number":237,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":238,"context_line":"            if auth is not None:"},{"line_number":239,"context_line":"                head_request_attributes[\u0027auth\u0027] \u003d requests.auth.HTTPBasicAuth("},{"line_number":240,"context_line":"                    CONF.deploy.image_server_user,"},{"line_number":241,"context_line":"                    CONF.deploy.image_server_password)"},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9e63970c_ec5164bf","line":239,"in_reply_to":"52516be2_1cb14ce6","updated":"2023-10-16 13:20:47.000000000","message":"Ack","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        try:"},{"line_number":237,"context_line":"            auth \u003d HttpImageService.gen_auth_from_conf_user_pass(image_href)"},{"line_number":238,"context_line":"            if auth is not None:"},{"line_number":239,"context_line":"                head_request_attributes[\u0027auth\u0027] \u003d requests.auth.HTTPBasicAuth("},{"line_number":240,"context_line":"                    CONF.deploy.image_server_user,"},{"line_number":241,"context_line":"                    CONF.deploy.image_server_password)"},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7ddc47b5_609bd870","line":239,"in_reply_to":"9e63970c_ec5164bf","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"}],"ironic/conf/deploy.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":"13f1cd39dbf26f2e9b0ac5bb5156c3c47b65a65a","unresolved":true,"context_lines":[{"line_number":32,"context_line":"                help\u003d_(\"Enable HTTP(S) Basic Authentication against user \""},{"line_number":33,"context_line":"                       \"image hosting HTTP(S) server. If set to True \""},{"line_number":34,"context_line":"                       \"exception is thrown in case of missing credentials. \""},{"line_number":35,"context_line":"                       \"When this option is True the same single set of \""},{"line_number":36,"context_line":"                       \"credentials will be used against all user-image \""},{"line_number":37,"context_line":"                       \"sources!\")),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027user_image_server_user\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3df2e3d5_99dc4bd8","line":35,"updated":"2023-08-04 19:17:17.000000000","message":"++ This is a really good place for this message","commit_id":"103520435e457e8c9e38dba59e2c1ebd6ad2e3fd"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c35f5c05a38dbade47934b5e9d4e8ee20d3a7a21","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                help\u003d_(\"Enable HTTP(S) Basic Authentication against user \""},{"line_number":33,"context_line":"                       \"image hosting HTTP(S) server. If set to True \""},{"line_number":34,"context_line":"                       \"exception is thrown in case of missing credentials. \""},{"line_number":35,"context_line":"                       \"When this option is True the same single set of \""},{"line_number":36,"context_line":"                       \"credentials will be used against all user-image \""},{"line_number":37,"context_line":"                       \"sources!\")),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027user_image_server_user\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"4718e3c0_e8ca16bb","line":35,"in_reply_to":"3df2e3d5_99dc4bd8","updated":"2023-08-07 10:16:27.000000000","message":"Ack","commit_id":"103520435e457e8c9e38dba59e2c1ebd6ad2e3fd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2de9659c1afce98143e9214190f7b749fd205986","unresolved":true,"context_lines":[{"line_number":27,"context_line":"    cfg.StrOpt(\u0027http_root\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027user_image_server_basic_auth\u0027,"},{"line_number":31,"context_line":"                default\u003dFalse,"},{"line_number":32,"context_line":"                help\u003d_(\"Enable HTTP(S) Basic Authentication against user \""},{"line_number":33,"context_line":"                       \"image hosting HTTP(S) server. If set to True \""}],"source_content_type":"text/x-python","patch_set":4,"id":"abb76867_08001ecc","line":30,"updated":"2023-08-17 15:12:51.000000000","message":"nit: I\u0027d skip the user_ prefix, in the Ironic context we nearly uniformly assume that \"image\" is an instance image (otherwise we say \"ramdisk\")","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"15c3a2631f63668b5b29b1ebc081c26e78d54fff","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    cfg.StrOpt(\u0027http_root\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027user_image_server_basic_auth\u0027,"},{"line_number":31,"context_line":"                default\u003dFalse,"},{"line_number":32,"context_line":"                help\u003d_(\"Enable HTTP(S) Basic Authentication against user \""},{"line_number":33,"context_line":"                       \"image hosting HTTP(S) server. If set to True \""}],"source_content_type":"text/x-python","patch_set":4,"id":"6886d74b_1787feda","line":30,"in_reply_to":"66c86ce0_5d4f3552","updated":"2023-09-22 07:40:49.000000000","message":"Done","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"115d41a6bcb4b7318484e8d6b30c67e36c181e07","unresolved":true,"context_lines":[{"line_number":27,"context_line":"    cfg.StrOpt(\u0027http_root\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027user_image_server_basic_auth\u0027,"},{"line_number":31,"context_line":"                default\u003dFalse,"},{"line_number":32,"context_line":"                help\u003d_(\"Enable HTTP(S) Basic Authentication against user \""},{"line_number":33,"context_line":"                       \"image hosting HTTP(S) server. If set to True \""}],"source_content_type":"text/x-python","patch_set":4,"id":"66c86ce0_5d4f3552","line":30,"in_reply_to":"abb76867_08001ecc","updated":"2023-09-04 08:40:15.000000000","message":"Thanks for the reviews!!! I am back from vacation, I will modify this feature according to your comments.","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2de9659c1afce98143e9214190f7b749fd205986","unresolved":true,"context_lines":[{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027user_image_server_basic_auth\u0027,"},{"line_number":31,"context_line":"                default\u003dFalse,"},{"line_number":32,"context_line":"                help\u003d_(\"Enable HTTP(S) Basic Authentication against user \""},{"line_number":33,"context_line":"                       \"image hosting HTTP(S) server. If set to True \""},{"line_number":34,"context_line":"                       \"exception is thrown in case of missing credentials. \""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf8e5dfa_34fbd6b7","line":31,"updated":"2023-08-17 15:12:51.000000000","message":"nit: please mark new options as mutable\u003dTrue since they can be modified without a restart","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"15c3a2631f63668b5b29b1ebc081c26e78d54fff","unresolved":false,"context_lines":[{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027user_image_server_basic_auth\u0027,"},{"line_number":31,"context_line":"                default\u003dFalse,"},{"line_number":32,"context_line":"                help\u003d_(\"Enable HTTP(S) Basic Authentication against user \""},{"line_number":33,"context_line":"                       \"image hosting HTTP(S) server. If set to True \""},{"line_number":34,"context_line":"                       \"exception is thrown in case of missing credentials. \""}],"source_content_type":"text/x-python","patch_set":4,"id":"71b5545c_c05db606","line":31,"in_reply_to":"79d165ed_0b913036","updated":"2023-09-22 07:40:49.000000000","message":"Done","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"115d41a6bcb4b7318484e8d6b30c67e36c181e07","unresolved":true,"context_lines":[{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027user_image_server_basic_auth\u0027,"},{"line_number":31,"context_line":"                default\u003dFalse,"},{"line_number":32,"context_line":"                help\u003d_(\"Enable HTTP(S) Basic Authentication against user \""},{"line_number":33,"context_line":"                       \"image hosting HTTP(S) server. If set to True \""},{"line_number":34,"context_line":"                       \"exception is thrown in case of missing credentials. \""}],"source_content_type":"text/x-python","patch_set":4,"id":"79d165ed_0b913036","line":31,"in_reply_to":"bf8e5dfa_34fbd6b7","updated":"2023-09-04 08:40:15.000000000","message":"Ack","commit_id":"7b6ab0f48d7e389a3f800eb00d4abb2335224f63"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c22275c6a3293c5ecc51e31f68bbe02b3424c179","unresolved":true,"context_lines":[{"line_number":27,"context_line":"    cfg.StrOpt(\u0027http_root\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027image_server_basic_auth\u0027,"},{"line_number":31,"context_line":"                default\u003dFalse,"},{"line_number":32,"context_line":"                mutable\u003dTrue,"},{"line_number":33,"context_line":"                help\u003d_(\"Enable HTTP(S) Basic Authentication against user \""},{"line_number":34,"context_line":"                       \"image hosting HTTP(S) server. If set to True \""},{"line_number":35,"context_line":"                       \"exception is thrown in case of missing credentials. \""},{"line_number":36,"context_line":"                       \"When this option is True the same single set of \""},{"line_number":37,"context_line":"                       \"credentials will be used against all user-image \""},{"line_number":38,"context_line":"                       \"sources!\")),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027image_server_user\u0027,"},{"line_number":40,"context_line":"               mutable\u003dTrue,"},{"line_number":41,"context_line":"               help\u003d_(\"HTTP(S) Basic Authentication username used to \""}],"source_content_type":"text/x-python","patch_set":5,"id":"33fd0268_7594ed84","line":38,"range":{"start_line":30,"start_character":0,"end_line":38,"end_character":36},"updated":"2023-10-03 00:49:51.000000000","message":"Just to future proof adding other authentication types, can this be a StrOpt with allowed values `noauth`(default) and `http_basic`? These values align with keystoneauth and [DEFAULT]auth_strategy.\n\nAnd rename the option to something like image_server_auth_strategy?","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"230691ef4cd524ba55f90334b31016ebf8862d04","unresolved":true,"context_lines":[{"line_number":27,"context_line":"    cfg.StrOpt(\u0027http_root\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027image_server_basic_auth\u0027,"},{"line_number":31,"context_line":"                default\u003dFalse,"},{"line_number":32,"context_line":"                mutable\u003dTrue,"},{"line_number":33,"context_line":"                help\u003d_(\"Enable HTTP(S) Basic Authentication against user \""},{"line_number":34,"context_line":"                       \"image hosting HTTP(S) server. If set to True \""},{"line_number":35,"context_line":"                       \"exception is thrown in case of missing credentials. \""},{"line_number":36,"context_line":"                       \"When this option is True the same single set of \""},{"line_number":37,"context_line":"                       \"credentials will be used against all user-image \""},{"line_number":38,"context_line":"                       \"sources!\")),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027image_server_user\u0027,"},{"line_number":40,"context_line":"               mutable\u003dTrue,"},{"line_number":41,"context_line":"               help\u003d_(\"HTTP(S) Basic Authentication username used to \""}],"source_content_type":"text/x-python","patch_set":5,"id":"b14f3273_c3006b7f","line":38,"range":{"start_line":30,"start_character":0,"end_line":38,"end_character":36},"in_reply_to":"33fd0268_7594ed84","updated":"2023-10-03 10:56:10.000000000","message":"Yes, I think this is a good idea, I don\u0027t see any downside to this so I will implement it shortly.","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"4a4c5420571389e765969f6cd267d3f4cdf66eb5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    cfg.StrOpt(\u0027http_root\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027image_server_basic_auth\u0027,"},{"line_number":31,"context_line":"                default\u003dFalse,"},{"line_number":32,"context_line":"                mutable\u003dTrue,"},{"line_number":33,"context_line":"                help\u003d_(\"Enable HTTP(S) Basic Authentication against user \""},{"line_number":34,"context_line":"                       \"image hosting HTTP(S) server. If set to True \""},{"line_number":35,"context_line":"                       \"exception is thrown in case of missing credentials. \""},{"line_number":36,"context_line":"                       \"When this option is True the same single set of \""},{"line_number":37,"context_line":"                       \"credentials will be used against all user-image \""},{"line_number":38,"context_line":"                       \"sources!\")),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027image_server_user\u0027,"},{"line_number":40,"context_line":"               mutable\u003dTrue,"},{"line_number":41,"context_line":"               help\u003d_(\"HTTP(S) Basic Authentication username used to \""}],"source_content_type":"text/x-python","patch_set":5,"id":"adb29d82_b819e265","line":38,"range":{"start_line":30,"start_character":0,"end_line":38,"end_character":36},"in_reply_to":"b14f3273_c3006b7f","updated":"2023-10-12 07:43:51.000000000","message":"Done","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":27,"context_line":"    cfg.StrOpt(\u0027http_root\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027image_server_auth_strategy\u0027,"},{"line_number":31,"context_line":"               default\u003d\u0027noauth\u0027,"},{"line_number":32,"context_line":"               mutable\u003dTrue,"},{"line_number":33,"context_line":"               help\u003d_(\"Used to select authentication strategy against the \""}],"source_content_type":"text/x-python","patch_set":7,"id":"c737263f_e438163a","line":30,"updated":"2023-10-16 09:28:21.000000000","message":"What\u0027s the point of this option? I don\u0027t think we\u0027re going to see other authentication approaches, are we? I think you can use the presence of username/password as an indicator.","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    cfg.StrOpt(\u0027http_root\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027image_server_auth_strategy\u0027,"},{"line_number":31,"context_line":"               default\u003d\u0027noauth\u0027,"},{"line_number":32,"context_line":"               mutable\u003dTrue,"},{"line_number":33,"context_line":"               help\u003d_(\"Used to select authentication strategy against the \""}],"source_content_type":"text/x-python","patch_set":7,"id":"14510520_07cf8add","line":30,"in_reply_to":"755d645f_2abd076c","updated":"2023-11-13 13:38:14.000000000","message":"Done","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":27,"context_line":"    cfg.StrOpt(\u0027http_root\u0027,"},{"line_number":28,"context_line":"               default\u003d\u0027/httpboot\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\"ironic-conductor node\u0027s HTTP root path.\")),"},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027image_server_auth_strategy\u0027,"},{"line_number":31,"context_line":"               default\u003d\u0027noauth\u0027,"},{"line_number":32,"context_line":"               mutable\u003dTrue,"},{"line_number":33,"context_line":"               help\u003d_(\"Used to select authentication strategy against the \""}],"source_content_type":"text/x-python","patch_set":7,"id":"755d645f_2abd076c","line":30,"in_reply_to":"c737263f_e438163a","updated":"2023-10-16 13:20:47.000000000","message":"I have been asked by Steve Baker here ( https://review.opendev.org/c/openstack/ironic/+/890411/comment/33fd0268_7594ed84/) to future proof this feature and to make it easier for others to implement other strategies. I have agreed that this is a good idea, I see it feasible that in the future someone might need other auth strategies (why not) actually it is surprising that no one asked for them yet as in my experience image servers/registries/repositories of any kind are usually behind authentication.","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"84b50326c5af793fbd37f264d7a7452cecddc6e3","unresolved":true,"context_lines":[{"line_number":38,"context_line":"                       \", the same single set of credentials will be used \""},{"line_number":39,"context_line":"                       \"against all user-image sources! Currently only the \""},{"line_number":40,"context_line":"                       \"http_basic option has any functionality.\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027image_server_user\u0027,"},{"line_number":42,"context_line":"               mutable\u003dTrue,"},{"line_number":43,"context_line":"               help\u003d_(\"Can be used by any authentication strategy that \""},{"line_number":44,"context_line":"                      \"requires username credential. Currently utilized by \""}],"source_content_type":"text/x-python","patch_set":7,"id":"9951b6f8_8e8dbddf","line":41,"range":{"start_line":41,"start_character":16,"end_line":41,"end_character":33},"updated":"2023-10-16 09:28:21.000000000","message":"nit: I\u0027d slightly prefer username or user_name (we don\u0027t seem overly consistent in this regard).","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"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":"f35669b9bc33ca1d7122df62c0b360cb7bf25647","unresolved":true,"context_lines":[{"line_number":38,"context_line":"                       \", the same single set of credentials will be used \""},{"line_number":39,"context_line":"                       \"against all user-image sources! Currently only the \""},{"line_number":40,"context_line":"                       \"http_basic option has any functionality.\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027image_server_user\u0027,"},{"line_number":42,"context_line":"               mutable\u003dTrue,"},{"line_number":43,"context_line":"               help\u003d_(\"Can be used by any authentication strategy that \""},{"line_number":44,"context_line":"                      \"requires username credential. Currently utilized by \""}],"source_content_type":"text/x-python","patch_set":7,"id":"f76d3edd_6be7dd81","line":41,"range":{"start_line":41,"start_character":16,"end_line":41,"end_character":33},"in_reply_to":"36bce5de_a7401b1c","updated":"2023-11-27 23:30:25.000000000","message":"I don\u0027t care either way, but I\u0027m +2 for less churn","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"8a488f6976f0baa315e887d61f57a729ff68464b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                       \", the same single set of credentials will be used \""},{"line_number":39,"context_line":"                       \"against all user-image sources! Currently only the \""},{"line_number":40,"context_line":"                       \"http_basic option has any functionality.\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027image_server_user\u0027,"},{"line_number":42,"context_line":"               mutable\u003dTrue,"},{"line_number":43,"context_line":"               help\u003d_(\"Can be used by any authentication strategy that \""},{"line_number":44,"context_line":"                      \"requires username credential. Currently utilized by \""}],"source_content_type":"text/x-python","patch_set":7,"id":"8510876c_ccd7e7f0","line":41,"range":{"start_line":41,"start_character":16,"end_line":41,"end_character":33},"in_reply_to":"37f6e35b_3ee32053","updated":"2023-12-01 09:20:56.000000000","message":"Acknowledged","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"da777fae60c028ef3b3adcf42809af61052eface","unresolved":true,"context_lines":[{"line_number":38,"context_line":"                       \", the same single set of credentials will be used \""},{"line_number":39,"context_line":"                       \"against all user-image sources! Currently only the \""},{"line_number":40,"context_line":"                       \"http_basic option has any functionality.\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027image_server_user\u0027,"},{"line_number":42,"context_line":"               mutable\u003dTrue,"},{"line_number":43,"context_line":"               help\u003d_(\"Can be used by any authentication strategy that \""},{"line_number":44,"context_line":"                      \"requires username credential. Currently utilized by \""}],"source_content_type":"text/x-python","patch_set":7,"id":"36bce5de_a7401b1c","line":41,"range":{"start_line":41,"start_character":16,"end_line":41,"end_character":33},"in_reply_to":"47316b03_da53fd8c","updated":"2023-11-22 20:12:07.000000000","message":"I\u0027d kind of prefer image_server_user just because it explicitly tells you what it is for by the name. Anyhow, I\u0027m going to +2 the change, but will ping Dmitry to try and get him to circle back to see if he feels strongly about it.","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"00c524ac717d4135e2a29e5e20516240f1fc8846","unresolved":true,"context_lines":[{"line_number":38,"context_line":"                       \", the same single set of credentials will be used \""},{"line_number":39,"context_line":"                       \"against all user-image sources! Currently only the \""},{"line_number":40,"context_line":"                       \"http_basic option has any functionality.\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027image_server_user\u0027,"},{"line_number":42,"context_line":"               mutable\u003dTrue,"},{"line_number":43,"context_line":"               help\u003d_(\"Can be used by any authentication strategy that \""},{"line_number":44,"context_line":"                      \"requires username credential. Currently utilized by \""}],"source_content_type":"text/x-python","patch_set":7,"id":"aba2cc6c_28f9f9e5","line":41,"range":{"start_line":41,"start_character":16,"end_line":41,"end_character":33},"in_reply_to":"9951b6f8_8e8dbddf","updated":"2023-10-16 13:20:47.000000000","message":"Ack","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c5aa2793f8ce60f098a493f958bed660d867f69a","unresolved":true,"context_lines":[{"line_number":38,"context_line":"                       \", the same single set of credentials will be used \""},{"line_number":39,"context_line":"                       \"against all user-image sources! Currently only the \""},{"line_number":40,"context_line":"                       \"http_basic option has any functionality.\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027image_server_user\u0027,"},{"line_number":42,"context_line":"               mutable\u003dTrue,"},{"line_number":43,"context_line":"               help\u003d_(\"Can be used by any authentication strategy that \""},{"line_number":44,"context_line":"                      \"requires username credential. Currently utilized by \""}],"source_content_type":"text/x-python","patch_set":7,"id":"47316b03_da53fd8c","line":41,"range":{"start_line":41,"start_character":16,"end_line":41,"end_character":33},"in_reply_to":"aba2cc6c_28f9f9e5","updated":"2023-11-13 13:38:14.000000000","message":"The related change in IPA is already merged, I would need to change it in IPA anyways if you still think this is an issue, so I would suggest doing it in 2 separate changes one for Ironic and one for IPA what do you think?","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2441d04e17c271650a06a85ec79923ba696f6ad","unresolved":true,"context_lines":[{"line_number":38,"context_line":"                       \", the same single set of credentials will be used \""},{"line_number":39,"context_line":"                       \"against all user-image sources! Currently only the \""},{"line_number":40,"context_line":"                       \"http_basic option has any functionality.\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027image_server_user\u0027,"},{"line_number":42,"context_line":"               mutable\u003dTrue,"},{"line_number":43,"context_line":"               help\u003d_(\"Can be used by any authentication strategy that \""},{"line_number":44,"context_line":"                      \"requires username credential. Currently utilized by \""}],"source_content_type":"text/x-python","patch_set":7,"id":"37f6e35b_3ee32053","line":41,"range":{"start_line":41,"start_character":16,"end_line":41,"end_character":33},"in_reply_to":"f76d3edd_6be7dd81","updated":"2023-11-28 14:23:14.000000000","message":"I don\u0027t want to hold this further on bikeshedding.","commit_id":"43e49be3db5ebb787199ab836026617bcb9f4592"}],"ironic/drivers/modules/agent.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2441d04e17c271650a06a85ec79923ba696f6ad","unresolved":true,"context_lines":[{"line_number":508,"context_line":"        }"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        if (CONF.deploy.image_server_auth_strategy !\u003d \u0027noauth\u0027"},{"line_number":511,"context_line":"            and CONF.deploy.image_server_auth_strategy is not None):"},{"line_number":512,"context_line":"            image_info[\u0027image_server_auth_strategy\u0027] \u003d \\"},{"line_number":513,"context_line":"                CONF.deploy.image_server_auth_strategy"},{"line_number":514,"context_line":"            image_info[\u0027image_server_user\u0027] \u003d CONF.deploy.image_server_user"}],"source_content_type":"text/x-python","patch_set":8,"id":"2697ea8c_abc6aa76","line":511,"updated":"2023-11-28 14:23:14.000000000","message":"nit: an option with a default value cannot be None","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"8a488f6976f0baa315e887d61f57a729ff68464b","unresolved":false,"context_lines":[{"line_number":508,"context_line":"        }"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        if (CONF.deploy.image_server_auth_strategy !\u003d \u0027noauth\u0027"},{"line_number":511,"context_line":"            and CONF.deploy.image_server_auth_strategy is not None):"},{"line_number":512,"context_line":"            image_info[\u0027image_server_auth_strategy\u0027] \u003d \\"},{"line_number":513,"context_line":"                CONF.deploy.image_server_auth_strategy"},{"line_number":514,"context_line":"            image_info[\u0027image_server_user\u0027] \u003d CONF.deploy.image_server_user"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f23a768_5315943f","line":511,"in_reply_to":"2697ea8c_abc6aa76","updated":"2023-12-01 09:20:56.000000000","message":"Done","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"}],"ironic/tests/unit/common/test_image_service.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c22275c6a3293c5ecc51e31f68bbe02b3424c179","unresolved":true,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    @mock.patch.object(shutil, \u0027copyfileobj\u0027, autospec\u003dTrue)"},{"line_number":389,"context_line":"    @mock.patch.object(requests, \u0027get\u0027, autospec\u003dTrue)"},{"line_number":390,"context_line":"    def test_download_success_verify_false_basic_auth_sucess("},{"line_number":391,"context_line":"            self, req_get_mock, shutil_mock):"},{"line_number":392,"context_line":"        cfg.CONF.set_override(\u0027webserver_verify_ca\u0027, \u0027False\u0027)"},{"line_number":393,"context_line":"        cfg.CONF.set_override(\u0027image_server_basic_auth\u0027, True, \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3714eb4b_51ff6713","line":390,"range":{"start_line":390,"start_character":54,"end_line":390,"end_character":60},"updated":"2023-10-03 00:49:51.000000000","message":"nit: success","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"4a4c5420571389e765969f6cd267d3f4cdf66eb5","unresolved":false,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    @mock.patch.object(shutil, \u0027copyfileobj\u0027, autospec\u003dTrue)"},{"line_number":389,"context_line":"    @mock.patch.object(requests, \u0027get\u0027, autospec\u003dTrue)"},{"line_number":390,"context_line":"    def test_download_success_verify_false_basic_auth_sucess("},{"line_number":391,"context_line":"            self, req_get_mock, shutil_mock):"},{"line_number":392,"context_line":"        cfg.CONF.set_override(\u0027webserver_verify_ca\u0027, \u0027False\u0027)"},{"line_number":393,"context_line":"        cfg.CONF.set_override(\u0027image_server_basic_auth\u0027, True, \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"03a6e8af_7da5e3ee","line":390,"range":{"start_line":390,"start_character":54,"end_line":390,"end_character":60},"in_reply_to":"3714eb4b_51ff6713","updated":"2023-10-12 07:43:51.000000000","message":"Done","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2441d04e17c271650a06a85ec79923ba696f6ad","unresolved":true,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @mock.patch.object(requests, \u0027head\u0027, autospec\u003dTrue)"},{"line_number":136,"context_line":"    def test_validate_href_valid_path_valid_basic_auth(self, head_mock):"},{"line_number":137,"context_line":"        cfg.CONF.set_override(\u0027webserver_verify_ca\u0027, \u0027/some/path\u0027)"},{"line_number":138,"context_line":"        cfg.CONF.set_override(\u0027image_server_auth_strategy\u0027,"},{"line_number":139,"context_line":"                              \u0027http_basic\u0027,"},{"line_number":140,"context_line":"                              \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"15c1bcfc_daafb821","line":137,"updated":"2023-11-28 14:23:14.000000000","message":"Side note: it\u0027s really unfortunate that we call it webserver_ here, but image_server_ otherwise. Maybe image_server_ is actually better though.","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"8a488f6976f0baa315e887d61f57a729ff68464b","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @mock.patch.object(requests, \u0027head\u0027, autospec\u003dTrue)"},{"line_number":136,"context_line":"    def test_validate_href_valid_path_valid_basic_auth(self, head_mock):"},{"line_number":137,"context_line":"        cfg.CONF.set_override(\u0027webserver_verify_ca\u0027, \u0027/some/path\u0027)"},{"line_number":138,"context_line":"        cfg.CONF.set_override(\u0027image_server_auth_strategy\u0027,"},{"line_number":139,"context_line":"                              \u0027http_basic\u0027,"},{"line_number":140,"context_line":"                              \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"e577b9d1_fced1b56","line":137,"in_reply_to":"15c1bcfc_daafb821","updated":"2023-12-01 09:20:56.000000000","message":"Acknowledged","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"}],"ironic/tests/unit/drivers/modules/test_agent.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c22275c6a3293c5ecc51e31f68bbe02b3424c179","unresolved":true,"context_lines":[{"line_number":1256,"context_line":"                \u0027no_proxy\u0027: \u0027.eggs.com\u0027}"},{"line_number":1257,"context_line":"        )"},{"line_number":1258,"context_line":""},{"line_number":1259,"context_line":"    def test_wirte_image_basic_auth_sucess(self):"},{"line_number":1260,"context_line":"        cfg.CONF.set_override(\u0027image_server_basic_auth\u0027,"},{"line_number":1261,"context_line":"                              True,"},{"line_number":1262,"context_line":"                              \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"27698e66_93ca749e","line":1259,"range":{"start_line":1259,"start_character":36,"end_line":1259,"end_character":43},"updated":"2023-10-03 00:49:51.000000000","message":"success","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"4a4c5420571389e765969f6cd267d3f4cdf66eb5","unresolved":false,"context_lines":[{"line_number":1256,"context_line":"                \u0027no_proxy\u0027: \u0027.eggs.com\u0027}"},{"line_number":1257,"context_line":"        )"},{"line_number":1258,"context_line":""},{"line_number":1259,"context_line":"    def test_wirte_image_basic_auth_sucess(self):"},{"line_number":1260,"context_line":"        cfg.CONF.set_override(\u0027image_server_basic_auth\u0027,"},{"line_number":1261,"context_line":"                              True,"},{"line_number":1262,"context_line":"                              \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7229ffb4_1121d41d","line":1259,"range":{"start_line":1259,"start_character":36,"end_line":1259,"end_character":43},"in_reply_to":"27698e66_93ca749e","updated":"2023-10-12 07:43:51.000000000","message":"Done","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c22275c6a3293c5ecc51e31f68bbe02b3424c179","unresolved":true,"context_lines":[{"line_number":1274,"context_line":"            }"},{"line_number":1275,"context_line":"        )"},{"line_number":1276,"context_line":""},{"line_number":1277,"context_line":"    def test_wirte_image_basic_auth_sucess_blocked(self):"},{"line_number":1278,"context_line":"        cfg.CONF.set_override(\u0027image_server_user\u0027,"},{"line_number":1279,"context_line":"                              \u0027SpongeBob\u0027,"},{"line_number":1280,"context_line":"                              \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1b23ed5a_6b725cb0","line":1277,"range":{"start_line":1277,"start_character":36,"end_line":1277,"end_character":42},"updated":"2023-10-03 00:49:51.000000000","message":"ditto","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"4a4c5420571389e765969f6cd267d3f4cdf66eb5","unresolved":false,"context_lines":[{"line_number":1274,"context_line":"            }"},{"line_number":1275,"context_line":"        )"},{"line_number":1276,"context_line":""},{"line_number":1277,"context_line":"    def test_wirte_image_basic_auth_sucess_blocked(self):"},{"line_number":1278,"context_line":"        cfg.CONF.set_override(\u0027image_server_user\u0027,"},{"line_number":1279,"context_line":"                              \u0027SpongeBob\u0027,"},{"line_number":1280,"context_line":"                              \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa4d47d5_90ef026e","line":1277,"range":{"start_line":1277,"start_character":36,"end_line":1277,"end_character":42},"in_reply_to":"1b23ed5a_6b725cb0","updated":"2023-10-12 07:43:51.000000000","message":"Done","commit_id":"95948ac1dde12e1e85ce890f78e0681849bb6df1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2441d04e17c271650a06a85ec79923ba696f6ad","unresolved":true,"context_lines":[{"line_number":1256,"context_line":"                \u0027no_proxy\u0027: \u0027.eggs.com\u0027}"},{"line_number":1257,"context_line":"        )"},{"line_number":1258,"context_line":""},{"line_number":1259,"context_line":"    def test_wirte_image_basic_auth_success(self):"},{"line_number":1260,"context_line":"        cfg.CONF.set_override(\u0027image_server_auth_strategy\u0027,"},{"line_number":1261,"context_line":"                              \u0027http_basic\u0027,"},{"line_number":1262,"context_line":"                              \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"dbbe97b4_b114a8d2","line":1259,"updated":"2023-11-28 14:23:14.000000000","message":"nit: s/wirte/write/","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"8a488f6976f0baa315e887d61f57a729ff68464b","unresolved":false,"context_lines":[{"line_number":1256,"context_line":"                \u0027no_proxy\u0027: \u0027.eggs.com\u0027}"},{"line_number":1257,"context_line":"        )"},{"line_number":1258,"context_line":""},{"line_number":1259,"context_line":"    def test_wirte_image_basic_auth_success(self):"},{"line_number":1260,"context_line":"        cfg.CONF.set_override(\u0027image_server_auth_strategy\u0027,"},{"line_number":1261,"context_line":"                              \u0027http_basic\u0027,"},{"line_number":1262,"context_line":"                              \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"d57db6c3_b712190f","line":1259,"in_reply_to":"dbbe97b4_b114a8d2","updated":"2023-12-01 09:20:56.000000000","message":"Done","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2441d04e17c271650a06a85ec79923ba696f6ad","unresolved":true,"context_lines":[{"line_number":1274,"context_line":"            }"},{"line_number":1275,"context_line":"        )"},{"line_number":1276,"context_line":""},{"line_number":1277,"context_line":"    def test_wirte_image_basic_auth_success_blocked(self):"},{"line_number":1278,"context_line":"        cfg.CONF.set_override(\u0027image_server_user\u0027,"},{"line_number":1279,"context_line":"                              \u0027SpongeBob\u0027,"},{"line_number":1280,"context_line":"                              \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"41278870_f28c387e","line":1277,"updated":"2023-11-28 14:23:14.000000000","message":"same","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"8a488f6976f0baa315e887d61f57a729ff68464b","unresolved":false,"context_lines":[{"line_number":1274,"context_line":"            }"},{"line_number":1275,"context_line":"        )"},{"line_number":1276,"context_line":""},{"line_number":1277,"context_line":"    def test_wirte_image_basic_auth_success_blocked(self):"},{"line_number":1278,"context_line":"        cfg.CONF.set_override(\u0027image_server_user\u0027,"},{"line_number":1279,"context_line":"                              \u0027SpongeBob\u0027,"},{"line_number":1280,"context_line":"                              \u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ad7105c5_6dfe9e75","line":1277,"in_reply_to":"41278870_f28c387e","updated":"2023-12-01 09:20:56.000000000","message":"Done","commit_id":"3ea4bb234cee9df27137f4cdb8836d0c35daaf68"}],"releasenotes/notes/user-image-server-basic-auth-c2b605aade241901.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":"d9d342ffbe9efb748d3d1df552a2882d4e9346a5","unresolved":true,"context_lines":[{"line_number":16,"context_line":"    empty string."},{"line_number":17,"context_line":"issues:"},{"line_number":18,"context_line":"  - |"},{"line_number":19,"context_line":"    This implementation of the Basic Auth support for user-image handling is"},{"line_number":20,"context_line":"    implemented via the global Ironic configuration process thus it doesn\u0027t"},{"line_number":21,"context_line":"    provide node specific customization options. When"},{"line_number":22,"context_line":"    \u0027user_image_server_basic_auth\u0027 is set to True all user-image sources"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"0c1d24f1_ecca1e33","line":19,"updated":"2023-08-04 19:16:56.000000000","message":"Probably the best place for this is a doc in the admin guide (https://opendev.org/openstack/ironic/src/branch/master/doc/source/admin) or more details under features.\n\nGenerally we use the issues header to talk about issues that were resolved in a given release.","commit_id":"103520435e457e8c9e38dba59e2c1ebd6ad2e3fd"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"c35f5c05a38dbade47934b5e9d4e8ee20d3a7a21","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    empty string."},{"line_number":17,"context_line":"issues:"},{"line_number":18,"context_line":"  - |"},{"line_number":19,"context_line":"    This implementation of the Basic Auth support for user-image handling is"},{"line_number":20,"context_line":"    implemented via the global Ironic configuration process thus it doesn\u0027t"},{"line_number":21,"context_line":"    provide node specific customization options. When"},{"line_number":22,"context_line":"    \u0027user_image_server_basic_auth\u0027 is set to True all user-image sources"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"e49f0a0b_a1442fb8","line":19,"in_reply_to":"0c1d24f1_ecca1e33","updated":"2023-08-07 10:16:27.000000000","message":"Done","commit_id":"103520435e457e8c9e38dba59e2c1ebd6ad2e3fd"}]}
