)]}'
{"/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":"afdb1718b540f9b7d9cb0e23ed4ebc633f739bc8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f1512eb4_faee5a41","updated":"2025-04-10 17:23:13.000000000","message":"Overall it\u0027d be nice to associate, with each \"if\" doing a security check, a comment describing what we\u0027re trying to allow or disallow.","commit_id":"540be8ae7f712e7bb368814abe8cdcd4e968c656"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"d5a90167816af09454ec8e76536ce3ac4b007d9f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b49dc715_22c7db87","in_reply_to":"f1512eb4_faee5a41","updated":"2025-04-10 17:38:24.000000000","message":"Done","commit_id":"540be8ae7f712e7bb368814abe8cdcd4e968c656"},{"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":"6321e21eebf55a6adf09fc2a8e392d01f587a734","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"162f348e_b2deb9a9","updated":"2025-04-11 16:36:29.000000000","message":"I gave Satoshi guideance/feedback downstream on the unit tests.\n\ntl;dr:\n* We need to ensure all the image fixtures include a visibility\n* We need to ensure we have specific tests for is_image_available -- it\u0027s a red flag that we are only seeing side-effect style failures in unit tests.","commit_id":"43df36eeb61e94d966bbfdd3ef51f8244015c5a5"},{"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":"d4f35c7a99382314e061b3bdc2308ef39728ef5c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3a74dd4f_ccf724e6","updated":"2025-04-10 17:52:56.000000000","message":"The +2 is just waiting for Julia to confirm we all three agree on this being the right security logic.","commit_id":"43df36eeb61e94d966bbfdd3ef51f8244015c5a5"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"7d51c21b7a2b8e0fa41696e4fc4d2541b7fc5f1f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5c4f5798_5cf667c1","in_reply_to":"162f348e_b2deb9a9","updated":"2025-04-11 17:44:58.000000000","message":"Acknowledged","commit_id":"43df36eeb61e94d966bbfdd3ef51f8244015c5a5"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"5adb38f352e998c660d1ed674995e810911c3a5c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"88ee4cec_2e66ae58","in_reply_to":"3a74dd4f_ccf724e6","updated":"2025-04-10 17:55:14.000000000","message":"Acknowledged","commit_id":"43df36eeb61e94d966bbfdd3ef51f8244015c5a5"}],"ironic/common/glance_service/service_utils.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e339ca3c9fccda756ff0fd03f1da59a7bb746f10","unresolved":true,"context_lines":[{"line_number":162,"context_line":"        LOG.debug(\u0027Satoshi: Request project_id: %s, Conductor project_id: %s,\u0027"},{"line_number":163,"context_line":"                  \u0027 Image owner: %s\u0027,"},{"line_number":164,"context_line":"                  project_id, ironic_conductor_project_id, image_owner)"},{"line_number":165,"context_line":"        if ironic_conductor_project_id:"},{"line_number":166,"context_line":"            if image_owner \u003d\u003d ironic_conductor_project_id:"},{"line_number":167,"context_line":"                LOG.debug(\u0027Satoshi: Access to image %s allowed based on match\u0027"},{"line_number":168,"context_line":"                          \u0027with conductor project ID\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"f3d1891b_b3582ff8","line":165,"updated":"2025-04-09 18:20:37.000000000","message":"Won\u0027t we always have this?","commit_id":"808f03415b881c1a1a782806010addbb4d2743da"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"ab496a9a4bba821b7fc1a9658cb9606316b42d0e","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        LOG.debug(\u0027Satoshi: Request project_id: %s, Conductor project_id: %s,\u0027"},{"line_number":163,"context_line":"                  \u0027 Image owner: %s\u0027,"},{"line_number":164,"context_line":"                  project_id, ironic_conductor_project_id, image_owner)"},{"line_number":165,"context_line":"        if ironic_conductor_project_id:"},{"line_number":166,"context_line":"            if image_owner \u003d\u003d ironic_conductor_project_id:"},{"line_number":167,"context_line":"                LOG.debug(\u0027Satoshi: Access to image %s allowed based on match\u0027"},{"line_number":168,"context_line":"                          \u0027with conductor project ID\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3c2ff1d4_37ca9af7","line":165,"in_reply_to":"f3d1891b_b3582ff8","updated":"2025-04-10 17:38:43.000000000","message":"Done","commit_id":"808f03415b881c1a1a782806010addbb4d2743da"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e339ca3c9fccda756ff0fd03f1da59a7bb746f10","unresolved":true,"context_lines":[{"line_number":170,"context_line":"                return True"},{"line_number":171,"context_line":"    # The presence of an auth token implies this is an authenticated"},{"line_number":172,"context_line":"    # request and we need not handle the noauth use-case."},{"line_number":173,"context_line":"    if auth_token:"},{"line_number":174,"context_line":"        # We return true here since we want the *user* request context to"},{"line_number":175,"context_line":"        # be able to be used."},{"line_number":176,"context_line":"        return True"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    if image_visibility \u003d\u003d \u0027public\u0027:"},{"line_number":179,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"8db71954_332cf7d9","line":176,"range":{"start_line":173,"start_character":0,"end_line":176,"end_character":19},"updated":"2025-04-09 18:20:37.000000000","message":"So the challenge, sort of ulitmately is the auth token able to be used to access the artifact, and is it appropriately granted?\n\nThis value, reliant upon the context, creates a situation where we are already granting access based upon the existence.","commit_id":"808f03415b881c1a1a782806010addbb4d2743da"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"ab496a9a4bba821b7fc1a9658cb9606316b42d0e","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                return True"},{"line_number":171,"context_line":"    # The presence of an auth token implies this is an authenticated"},{"line_number":172,"context_line":"    # request and we need not handle the noauth use-case."},{"line_number":173,"context_line":"    if auth_token:"},{"line_number":174,"context_line":"        # We return true here since we want the *user* request context to"},{"line_number":175,"context_line":"        # be able to be used."},{"line_number":176,"context_line":"        return True"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    if image_visibility \u003d\u003d \u0027public\u0027:"},{"line_number":179,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"ee28ded1_a85a082f","line":176,"range":{"start_line":173,"start_character":0,"end_line":176,"end_character":19},"in_reply_to":"1c5dff9c_1ab30c79","updated":"2025-04-10 17:38:43.000000000","message":"Done","commit_id":"808f03415b881c1a1a782806010addbb4d2743da"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6e1a6d7c8cce306302006df5a41138f53dad674f","unresolved":true,"context_lines":[{"line_number":170,"context_line":"                return True"},{"line_number":171,"context_line":"    # The presence of an auth token implies this is an authenticated"},{"line_number":172,"context_line":"    # request and we need not handle the noauth use-case."},{"line_number":173,"context_line":"    if auth_token:"},{"line_number":174,"context_line":"        # We return true here since we want the *user* request context to"},{"line_number":175,"context_line":"        # be able to be used."},{"line_number":176,"context_line":"        return True"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    if image_visibility \u003d\u003d \u0027public\u0027:"},{"line_number":179,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"1c5dff9c_1ab30c79","line":176,"range":{"start_line":173,"start_character":0,"end_line":176,"end_character":19},"in_reply_to":"8db71954_332cf7d9","updated":"2025-04-09 18:30:08.000000000","message":"So what is broken about this: This is implying if we *have* a token, we can access. That is a bad assumption. We should move this *far* up under the conditional knob check, and if possible actually check the access.","commit_id":"808f03415b881c1a1a782806010addbb4d2743da"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6e1a6d7c8cce306302006df5a41138f53dad674f","unresolved":true,"context_lines":[{"line_number":178,"context_line":"    if image_visibility \u003d\u003d \u0027public\u0027:"},{"line_number":179,"context_line":"        return True"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    if project_id and image_owner \u003d\u003d project_id:"},{"line_number":182,"context_line":"        return True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    if is_admin and CONF.ignore_project_check_for_admin_tasks:"},{"line_number":185,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"346c6b4a_79dae6db","line":182,"range":{"start_line":181,"start_character":0,"end_line":182,"end_character":19},"updated":"2025-04-09 18:30:08.000000000","message":"This allows a private image to be deployed under this flow and model.","commit_id":"808f03415b881c1a1a782806010addbb4d2743da"},{"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":"afdb1718b540f9b7d9cb0e23ed4ebc633f739bc8","unresolved":true,"context_lines":[{"line_number":178,"context_line":"    if image_visibility \u003d\u003d \u0027public\u0027:"},{"line_number":179,"context_line":"        return True"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    if project_id and image_owner \u003d\u003d project_id:"},{"line_number":182,"context_line":"        return True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    if is_admin and CONF.ignore_project_check_for_admin_tasks:"},{"line_number":185,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"553e37ad_a8be6fcf","line":182,"range":{"start_line":181,"start_character":0,"end_line":182,"end_character":19},"in_reply_to":"346c6b4a_79dae6db","updated":"2025-04-10 17:23:13.000000000","message":"This stanza can be removed; 158/159 is the correct logic.","commit_id":"808f03415b881c1a1a782806010addbb4d2743da"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"d5a90167816af09454ec8e76536ce3ac4b007d9f","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    if image_visibility \u003d\u003d \u0027public\u0027:"},{"line_number":179,"context_line":"        return True"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    if project_id and image_owner \u003d\u003d project_id:"},{"line_number":182,"context_line":"        return True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    if is_admin and CONF.ignore_project_check_for_admin_tasks:"},{"line_number":185,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"a7cb631f_d1cde7b5","line":182,"range":{"start_line":181,"start_character":0,"end_line":182,"end_character":19},"in_reply_to":"553e37ad_a8be6fcf","updated":"2025-04-10 17:38:24.000000000","message":"Done","commit_id":"808f03415b881c1a1a782806010addbb4d2743da"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6e1a6d7c8cce306302006df5a41138f53dad674f","unresolved":true,"context_lines":[{"line_number":182,"context_line":"        return True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    if is_admin and CONF.ignore_project_check_for_admin_tasks:"},{"line_number":185,"context_line":"        return True"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    LOG.info("},{"line_number":188,"context_line":"        \u0027Access to %s owned by %s denied to requester %s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"83956604_c69f11f7","line":185,"updated":"2025-04-09 18:30:08.000000000","message":"I guess the idea with this one is \"is the requester an admin\" they should be able to see it.","commit_id":"808f03415b881c1a1a782806010addbb4d2743da"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"d5a90167816af09454ec8e76536ce3ac4b007d9f","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        return True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    if is_admin and CONF.ignore_project_check_for_admin_tasks:"},{"line_number":185,"context_line":"        return True"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    LOG.info("},{"line_number":188,"context_line":"        \u0027Access to %s owned by %s denied to requester %s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"120c9d75_4811db10","line":185,"in_reply_to":"6dcb33f2_c45ff1d0","updated":"2025-04-10 17:38:24.000000000","message":"Done","commit_id":"808f03415b881c1a1a782806010addbb4d2743da"},{"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":"afdb1718b540f9b7d9cb0e23ed4ebc633f739bc8","unresolved":true,"context_lines":[{"line_number":182,"context_line":"        return True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    if is_admin and CONF.ignore_project_check_for_admin_tasks:"},{"line_number":185,"context_line":"        return True"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    LOG.info("},{"line_number":188,"context_line":"        \u0027Access to %s owned by %s denied to requester %s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"6dcb33f2_c45ff1d0","line":185,"in_reply_to":"83956604_c69f11f7","updated":"2025-04-10 17:23:13.000000000","message":"This is \"private images owned by the user that conductor is authenticating as can be used\" (right?)\n\nthis line from our notes --\u003e #     - If image visibility is private AND image_owner \u003d\u003d conductor_project_id, ALLOW","commit_id":"808f03415b881c1a1a782806010addbb4d2743da"}],"ironic/tests/unit/common/test_glance_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":"b91edb74290cb8dafcef6421229ee218efa2534e","unresolved":true,"context_lines":[{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"    def test_allow_access_via_auth_token_enabled(self):"},{"line_number":1017,"context_line":"        self.context.auth_token \u003d \u0027fake-token\u0027"},{"line_number":1018,"context_line":"        self.config(allow_image_access_via_auth_token\u003dTrue)"},{"line_number":1019,"context_line":"        self.assertTrue(service_utils.is_image_available("},{"line_number":1020,"context_line":"            self.context, self.image))"},{"line_number":1021,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7d4c668b_6b50fee7","line":1018,"updated":"2025-04-15 14:55:28.000000000","message":"This works, so consider this nonblocking feedback, but typically we take an oslo.config object (CONF) and call set_override on it for tests.","commit_id":"854f059b82506133d5b0ad37ef57ed4f5635282a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3b02c0d5f4b3559d1bca1ff21221c232af54354e","unresolved":true,"context_lines":[{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"    def test_allow_access_via_auth_token_enabled(self):"},{"line_number":1017,"context_line":"        self.context.auth_token \u003d \u0027fake-token\u0027"},{"line_number":1018,"context_line":"        self.config(allow_image_access_via_auth_token\u003dTrue)"},{"line_number":1019,"context_line":"        self.assertTrue(service_utils.is_image_available("},{"line_number":1020,"context_line":"            self.context, self.image))"},{"line_number":1021,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"46a80a0f_1065a044","line":1018,"in_reply_to":"7d4c668b_6b50fee7","updated":"2025-04-15 16:22:49.000000000","message":"Indeed. This gets weird depending on the style, but this does work for here with the style you\u0027ve written these tests in.","commit_id":"854f059b82506133d5b0ad37ef57ed4f5635282a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3b02c0d5f4b3559d1bca1ff21221c232af54354e","unresolved":true,"context_lines":[{"line_number":1024,"context_line":"        self.assertTrue(service_utils.is_image_available("},{"line_number":1025,"context_line":"            self.context, self.image))"},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"    def test_allow_community_image(self):"},{"line_number":1028,"context_line":"        self.image.visibility \u003d \u0027community\u0027"},{"line_number":1029,"context_line":"        self.assertTrue(service_utils.is_image_available("},{"line_number":1030,"context_line":"            self.context, self.image))"},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"    def test_allow_admin_if_config_enabled(self):"},{"line_number":1033,"context_line":"        self.context.roles \u003d [\u0027admin\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"b62f0eec_b170ab6b","line":1030,"range":{"start_line":1027,"start_character":0,"end_line":1030,"end_character":38},"updated":"2025-04-15 16:22:49.000000000","message":"Thank you!","commit_id":"854f059b82506133d5b0ad37ef57ed4f5635282a"}],"releasenotes/notes/add_allow_image_access_via_auth_token-1b5869f1c0999bea.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":"199c5648e59d94f1c638123cd8e069bf4066a1f3","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - If `allow_image_access_via_auth_token` is set to `True`, Ironic allows access to"},{"line_number":4,"context_line":"    Glance images if an auth_token is present in the request context. This option is"},{"line_number":5,"context_line":"    default False starting in 2025.1 (master), but should remain default True in stable"},{"line_number":6,"context_line":"    branches to preserve legacy behavior"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"abb0dc47_fcf971b8","line":6,"updated":"2025-04-10 17:42:42.000000000","message":"Sorry for the trickle review, but one more thing -- we have the new CONF marked as deprecated, so we should have an upgrade: note here. I\u0027d suggest instead of that last sentence (just get rid of it), add 2 sections like:\n\n```\nupgrade:\n - CONF.allow_image_access_via_auth_token is set to `True` in this Ironic release. OpenStack integrated operators should ensure images for Ironic use are using image visibility \"public\" or \"community\" for the most reliable results.\n\ndeprecation:\n - CONF.allow_image_access_via_auth_token is deprecated, and will be removed, along with legacy image access logic, in or after the OpenStack 2026.2 release.\n```","commit_id":"b48f3599cc99d6f1f006e8555fbead85aaa7c61a"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"5adb38f352e998c660d1ed674995e810911c3a5c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - If `allow_image_access_via_auth_token` is set to `True`, Ironic allows access to"},{"line_number":4,"context_line":"    Glance images if an auth_token is present in the request context. This option is"},{"line_number":5,"context_line":"    default False starting in 2025.1 (master), but should remain default True in stable"},{"line_number":6,"context_line":"    branches to preserve legacy behavior"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"e1ef90c5_06296e93","line":6,"in_reply_to":"abb0dc47_fcf971b8","updated":"2025-04-10 17:55:14.000000000","message":"Done","commit_id":"b48f3599cc99d6f1f006e8555fbead85aaa7c61a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3b02c0d5f4b3559d1bca1ff21221c232af54354e","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    If `allow_image_access_via_auth_token` is set to `True`, Ironic allows access to"},{"line_number":5,"context_line":"    Glance images if an auth_token is present in the request context."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    CONF.allow_image_access_via_auth_token is set to `True` in this Ironic release."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"d9865ccf_5bf195f0","line":5,"range":{"start_line":4,"start_character":0,"end_line":5,"end_character":69},"updated":"2025-04-15 16:22:49.000000000","message":"I guess I\u0027m slightly conflicted over this feature entry since we\u0027re removing it and deprecating it at the same time, but I\u0027ll let it go through.","commit_id":"854f059b82506133d5b0ad37ef57ed4f5635282a"}]}
