)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c9d1c7ccfec4ffed23b4dbeee8a5a59027a4b63a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"eb71b1be_810aa437","updated":"2026-03-08 01:16:17.000000000","message":"failing tests down from 130 to 72","commit_id":"19f75559220ff25a9f85bdc0bcb956beea005a26"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"f193d5e9875aa0c8aea3fe0f97c5eb3bc04ac686","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"3191ecd3_f931d72a","updated":"2026-03-12 13:44:48.000000000","message":"Started review, will finish later...","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7fe8b3579331eeeed68dafb45ae58366891c0d37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"0bddd61e_2dadfb75","updated":"2026-04-02 19:10:49.000000000","message":"recheck seeing if any race condition happening while getting creds","commit_id":"e902e3bfdb9862f1dc080793ee69fbe78c883b7e"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"789910ed4b91f47d43345126efcdb89bd539d668","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"be02d627_0e351ad8","updated":"2026-04-02 14:28:22.000000000","message":"Thank you for addressing the comments.  Looks good from my perspective.","commit_id":"75c1095e48eeba3b02046ac50cbfa18eb5d21c3c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"cd4f8787167791ca6e035999b75bb6e1050f1549","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"0ca7bb63_92e2b35b","updated":"2026-04-03 17:24:21.000000000","message":"it seems there is another race condition.  test_list_containers_with_marker is failing because in between test_storage_policy_quota_limit is creating more containers. In pre provisioned creds, they use the same creds.","commit_id":"b1192f9ed3c3eecb211932ce0b03135514f43093"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"410f9ef58b26b2947ba23a99f91f56c282871f90","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"ff80daad_3270d295","updated":"2026-04-03 05:11:29.000000000","message":"recheck test_list_containers_with_marker failure","commit_id":"b1192f9ed3c3eecb211932ce0b03135514f43093"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7282d3d7b7eece8fbf879e3dd3c10364cbad516c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"8ce6d85e_da4e739e","updated":"2026-04-03 00:46:01.000000000","message":"tempest-full-preprov-creds is green now \\o/ finally :).\n\nmerging it","commit_id":"b1192f9ed3c3eecb211932ce0b03135514f43093"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"2da10022b2a360407b9a89da43148c6955c1c3b0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"1a0e003b_840c5bc1","in_reply_to":"0ca7bb63_92e2b35b","updated":"2026-04-03 17:43:00.000000000","message":"it seems test_storage_policy_quota_limit test not deleting the containers - https://github.com/openstack/tempest/blob/9f2edcd28338bbd719576c2dd2fb59fee53d21ed/tempest/api/object_storage/test_account_quotas.py#L135-L154\n\nwhich end up showing in other test","commit_id":"b1192f9ed3c3eecb211932ce0b03135514f43093"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7496726e9ca6bc67829f0d35eabae13dde6d76fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"7c3e4c1c_3725694c","updated":"2026-04-03 19:29:54.000000000","message":"now it is failing for other containers race condition which is created by the volume backup test\n\n\nTraceback (most recent call last):\n  File \"/opt/stack/tempest/tempest/api/object_storage/test_account_services.py\", line 170, in test_list_containers_with_marker\n    self.assertEmpty(container_list)\n  File \"/opt/stack/tempest/tempest/test.py\", line 938, in assertEmpty\n    self.assertFalse(items, msg)\n  File \"/usr/lib/python3.12/unittest/case.py\", line 721, in assertFalse\n    raise self.failureException(msg)\nAssertionError: [b\u0027volumebackups\u0027] is not false : sequence or collection is not empty: [b\u0027volumebackups\u0027]","commit_id":"644feb97c5711b2def3a4fc1b6c494be93c1f7b3"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8d3f816e92405a96785cfe5a339551843f76115f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"372c7916_2b85660b","updated":"2026-04-04 04:24:56.000000000","message":"there are still other containers conflicting with that test, now volumebackups","commit_id":"644feb97c5711b2def3a4fc1b6c494be93c1f7b3"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"69871a7c3f592a87ccaf34b4ea1c8d427c16066d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"7a6d21d0_500ad7ad","updated":"2026-04-04 04:42:10.000000000","message":"reported bug for the failing test for pre provisioned cred https://bugs.launchpad.net/tempest/+bug/2147232\n\nand skipping the test in this change so that we can make pre prov creds job voting.","commit_id":"b78b60c5a27066f9ebac63b866182a75dcc4aef7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a3f65a39425d1d2edffa3034728a643528924342","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"907b13eb_5aac6844","updated":"2026-04-04 16:13:42.000000000","message":"test_list_containers_with_marker skipped for pre provisioned creds job only","commit_id":"b78b60c5a27066f9ebac63b866182a75dcc4aef7"}],"releasenotes/notes/support-srabc-in-pre-provisioned-creds-f1b817e85c1fb171.yaml":[{"author":{"_account_id":35153,"name":"Ashish Gupta","email":"ashigupt@redhat.com","username":"ashigupt","status":"Redhat"},"change_message_id":"024c0a82a62b231d1bd5f7a4568cf476840b6c30","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"4700f3f4_ee457dbf","updated":"2026-03-22 23:24:52.000000000","message":"pls fix the typo in the name of the file srbac instead of srabc","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"71ea3616_18414930","in_reply_to":"4700f3f4_ee457dbf","updated":"2026-04-01 19:29:48.000000000","message":"Done","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"7c97fd1e77ec7759c778b0ef00b993d3cdad14ca","unresolved":true,"context_lines":[{"line_number":3,"context_line":"    The pre-provisioned credentials supports the new SRBAC personas."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Add support for SRBAC personas as well as system scope in"},{"line_number":7,"context_line":"    ``tempest account-generator`` command as well as in pre"},{"line_number":8,"context_line":"    provisioned credentials. The below SRBAC personas are supported:"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"06e4b231_9a15a848","line":6,"range":{"start_line":6,"start_character":59,"end_line":6,"end_character":61},"updated":"2026-03-13 12:39:01.000000000","message":"add the word \"the\" so it reads: \"in the...\"","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    The pre-provisioned credentials supports the new SRBAC personas."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Add support for SRBAC personas as well as system scope in"},{"line_number":7,"context_line":"    ``tempest account-generator`` command as well as in pre"},{"line_number":8,"context_line":"    provisioned credentials. The below SRBAC personas are supported:"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"297ccb81_3a99ef5e","line":6,"range":{"start_line":6,"start_character":59,"end_line":6,"end_character":61},"in_reply_to":"06e4b231_9a15a848","updated":"2026-04-01 19:29:48.000000000","message":"Done","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"7c97fd1e77ec7759c778b0ef00b993d3cdad14ca","unresolved":true,"context_lines":[{"line_number":18,"context_line":"    Fixed a bug#2143564 in the pre-provisioned credentials provider where"},{"line_number":19,"context_line":"    ``project_member`` and ``project_reader`` were not guaranteed to be"},{"line_number":20,"context_line":"    allocated from the same project. The ``PreProvisionedCredentialProvider``"},{"line_number":21,"context_line":"    now store accounts by project name and get the accounts based on the"},{"line_number":22,"context_line":"    project name if they are requested from the same test class."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ac6dcc90_4fee160e","line":21,"range":{"start_line":21,"start_character":43,"end_line":21,"end_character":46},"updated":"2026-03-13 12:39:01.000000000","message":"should be \"gets\"?","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"7c97fd1e77ec7759c778b0ef00b993d3cdad14ca","unresolved":true,"context_lines":[{"line_number":18,"context_line":"    Fixed a bug#2143564 in the pre-provisioned credentials provider where"},{"line_number":19,"context_line":"    ``project_member`` and ``project_reader`` were not guaranteed to be"},{"line_number":20,"context_line":"    allocated from the same project. The ``PreProvisionedCredentialProvider``"},{"line_number":21,"context_line":"    now store accounts by project name and get the accounts based on the"},{"line_number":22,"context_line":"    project name if they are requested from the same test class."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"6e3ae96d_9a7be32f","line":21,"range":{"start_line":21,"start_character":8,"end_line":21,"end_character":13},"updated":"2026-03-13 12:39:01.000000000","message":"should be \"stores\"?","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    Fixed a bug#2143564 in the pre-provisioned credentials provider where"},{"line_number":19,"context_line":"    ``project_member`` and ``project_reader`` were not guaranteed to be"},{"line_number":20,"context_line":"    allocated from the same project. The ``PreProvisionedCredentialProvider``"},{"line_number":21,"context_line":"    now store accounts by project name and get the accounts based on the"},{"line_number":22,"context_line":"    project name if they are requested from the same test class."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"045b52ec_ff1572a1","line":21,"range":{"start_line":21,"start_character":8,"end_line":21,"end_character":13},"in_reply_to":"6e3ae96d_9a7be32f","updated":"2026-04-01 19:29:48.000000000","message":"Done","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    Fixed a bug#2143564 in the pre-provisioned credentials provider where"},{"line_number":19,"context_line":"    ``project_member`` and ``project_reader`` were not guaranteed to be"},{"line_number":20,"context_line":"    allocated from the same project. The ``PreProvisionedCredentialProvider``"},{"line_number":21,"context_line":"    now store accounts by project name and get the accounts based on the"},{"line_number":22,"context_line":"    project name if they are requested from the same test class."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ee700348_c578964d","line":21,"range":{"start_line":21,"start_character":43,"end_line":21,"end_character":46},"in_reply_to":"ac6dcc90_4fee160e","updated":"2026-04-01 19:29:48.000000000","message":"Done","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"}],"tempest/lib/common/cred_provider.py":[{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"7641e4bb78c9e22282660349d537bd536c7c8e77","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        elif credential_type in same_alt_creds:"},{"line_number":58,"context_line":"            search_in \u003d same_alt_creds"},{"line_number":59,"context_line":"        for cred in search_in:"},{"line_number":60,"context_line":"            found_cred \u003d (self._creds.get(\"%s_%s\" % (scope, str(cred))) or"},{"line_number":61,"context_line":"                          self._creds.get(\"%s_%s\" % (scope, \u0027_\u0027.join(cred))))"},{"line_number":62,"context_line":"            if found_cred:"},{"line_number":63,"context_line":"                field \u003d \u0027name\u0027 if return_name else \u0027id\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1c9e7d75_648fba86","line":60,"updated":"2026-03-12 18:33:25.000000000","message":"claude assisted:\n- Issue: Why are there two different key formats? This suggests inconsistent key generation elsewhere\n- Suggestion: Standardize on one key format or add a comment explaining why both are needed","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f0f6f7b301a029414669e5d47ac8aaa3768e76fc","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        elif credential_type in same_alt_creds:"},{"line_number":58,"context_line":"            search_in \u003d same_alt_creds"},{"line_number":59,"context_line":"        for cred in search_in:"},{"line_number":60,"context_line":"            found_cred \u003d (self._creds.get(\"%s_%s\" % (scope, str(cred))) or"},{"line_number":61,"context_line":"                          self._creds.get(\"%s_%s\" % (scope, \u0027_\u0027.join(cred))))"},{"line_number":62,"context_line":"            if found_cred:"},{"line_number":63,"context_line":"                field \u003d \u0027name\u0027 if return_name else \u0027id\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"fefdcb5e_a2b9cd87","line":60,"in_reply_to":"1c9e7d75_648fba86","updated":"2026-04-01 19:35:57.000000000","message":"both are different as they are different in pre provisioned creds and dynamic creds","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"}],"tempest/lib/common/dynamic_creds.py":[{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"f193d5e9875aa0c8aea3fe0f97c5eb3bc04ac686","unresolved":true,"context_lines":[{"line_number":383,"context_line":"        self.routers_admin_client.add_router_interface(router_id,"},{"line_number":384,"context_line":"                                                       subnet_id\u003dsubnet_id)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def _get_project_id(self, credential_type, scope):"},{"line_number":387,"context_line":"        same_creds \u003d [[\u0027admin\u0027], [\u0027manager\u0027], [\u0027member\u0027], [\u0027reader\u0027]]"},{"line_number":388,"context_line":"        same_alt_creds \u003d [[\u0027alt_admin\u0027], [\u0027alt_manager\u0027],"},{"line_number":389,"context_line":"                          [\u0027alt_member\u0027], [\u0027alt_reader\u0027]]"}],"source_content_type":"text/x-python","patch_set":7,"id":"859167d5_a9966560","side":"PARENT","line":386,"updated":"2026-03-12 13:44:48.000000000","message":"It looks like on line 422 it is calling self._get_project_id but this function is getting removed here.  It looks like it will it still work based on the fact that this class is inheriting from the CredentialProvider class. Just want to understand and make sure this is not a breaker.  But this looks correct.","commit_id":"cbb2eff6c75b190a21705abeb506420b26417b51"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        self.routers_admin_client.add_router_interface(router_id,"},{"line_number":384,"context_line":"                                                       subnet_id\u003dsubnet_id)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def _get_project_id(self, credential_type, scope):"},{"line_number":387,"context_line":"        same_creds \u003d [[\u0027admin\u0027], [\u0027manager\u0027], [\u0027member\u0027], [\u0027reader\u0027]]"},{"line_number":388,"context_line":"        same_alt_creds \u003d [[\u0027alt_admin\u0027], [\u0027alt_manager\u0027],"},{"line_number":389,"context_line":"                          [\u0027alt_member\u0027], [\u0027alt_reader\u0027]]"}],"source_content_type":"text/x-python","patch_set":7,"id":"977771ba_17d1655f","side":"PARENT","line":386,"in_reply_to":"859167d5_a9966560","updated":"2026-04-01 19:29:48.000000000","message":"yes, I moved this function in the base class so that preprov_creds.py can also use it\n\nhttps://review.opendev.org/c/openstack/tempest/+/979366/7/tempest/lib/common/cred_provider.py","commit_id":"cbb2eff6c75b190a21705abeb506420b26417b51"}],"tempest/lib/common/preprov_creds.py":[{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"f193d5e9875aa0c8aea3fe0f97c5eb3bc04ac686","unresolved":true,"context_lines":[{"line_number":187,"context_line":"                        \u0027Unknown resource type %s, ignoring this field\u0027,"},{"line_number":188,"context_line":"                        resource"},{"line_number":189,"context_line":"                    )"},{"line_number":190,"context_line":"        LOG.info(\u0027Pre provisioned hash dict: %s\u0027, hash_dict)"},{"line_number":191,"context_line":"        return hash_dict"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def is_multi_user(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fde635b_a48d6fcd","line":190,"updated":"2026-03-12 13:44:48.000000000","message":"I recognize you may want this verbose logging but wanted to add the comment in case you may agree with this suggestions.\n\nhere and one other log.info on line 310 assisted by claude:\n\nLOG.info(\u0027Pre provisioned hash dict: %s\u0027, hash_dict)\nLOG.info(\u0027Pre provisioned useable hashes: %s\u0027, useable_hashes)\n\n  - Issue: Logging the entire hash_dict at INFO level could be very verbose and may contain sensitive information\n  - Suggestion: Use LOG.debug() instead, or log only the keys/counts","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                        \u0027Unknown resource type %s, ignoring this field\u0027,"},{"line_number":188,"context_line":"                        resource"},{"line_number":189,"context_line":"                    )"},{"line_number":190,"context_line":"        LOG.info(\u0027Pre provisioned hash dict: %s\u0027, hash_dict)"},{"line_number":191,"context_line":"        return hash_dict"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def is_multi_user(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"c541e6f4_f7632eec","line":190,"in_reply_to":"3fde635b_a48d6fcd","updated":"2026-04-01 19:29:48.000000000","message":"I think hash_dict can be too verbose, I also realized it while debugging logs. Let me remove it entirely.","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8aead790dc60bf2c2c850b9a6f2c059ff943c149","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                        \u0027Unknown resource type %s, ignoring this field\u0027,"},{"line_number":188,"context_line":"                        resource"},{"line_number":189,"context_line":"                    )"},{"line_number":190,"context_line":"        LOG.info(\u0027Pre provisioned hash dict: %s\u0027, hash_dict)"},{"line_number":191,"context_line":"        return hash_dict"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def is_multi_user(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"440ed04e_e168b4b7","line":190,"in_reply_to":"c541e6f4_f7632eec","updated":"2026-04-02 21:11:11.000000000","message":"denuging the current failure need this hash_dict which will help to know which user matches from which hash sub dict.\n\nCurrent test failing because system admin has been allocated when test ask for the admin creds.\n\nLet me add it back.","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"f193d5e9875aa0c8aea3fe0f97c5eb3bc04ac686","unresolved":true,"context_lines":[{"line_number":280,"context_line":"            useable_hashes \u003d [x for x in hashes if x not in admin_hashes]"},{"line_number":281,"context_line":"        else:"},{"line_number":282,"context_line":"            useable_hashes \u003d hashes"},{"line_number":283,"context_line":"        # When test is requesting the first credentials, we should select the"},{"line_number":284,"context_line":"        # hashes of project that has more roles accounts so that the first"},{"line_number":285,"context_line":"        # credential request can be from the project accounts which has more"},{"line_number":286,"context_line":"        # roles accounts which can fulfill the further credentials requests."}],"source_content_type":"text/x-python","patch_set":7,"id":"8a23d799_20371baa","line":283,"updated":"2026-03-12 13:44:48.000000000","message":"claude assisted: \nThe scoring logic is complex and may be difficult to maintain:\n  if (scope \u003d\u003d \u0027project\u0027 and not project_name and\n          roles in [[\u0027manager\u0027], [\u0027member\u0027], [\u0027reader\u0027],\n                    [\u0027alt_manager\u0027], [\u0027alt_member\u0027], [\u0027alt_reader\u0027]]):\n\n  - Issue: Hardcoded role lists repeated in multiple places\n  - Suggestion: Extract these to class constants like:\n  PRIMARY_ROLES \u003d [[\u0027manager\u0027], [\u0027member\u0027], [\u0027reader\u0027]]\n  ALT_ROLES \u003d [[\u0027alt_manager\u0027], [\u0027alt_member\u0027], [\u0027alt_reader\u0027]]","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"7c97fd1e77ec7759c778b0ef00b993d3cdad14ca","unresolved":true,"context_lines":[{"line_number":280,"context_line":"            useable_hashes \u003d [x for x in hashes if x not in admin_hashes]"},{"line_number":281,"context_line":"        else:"},{"line_number":282,"context_line":"            useable_hashes \u003d hashes"},{"line_number":283,"context_line":"        # When test is requesting the first credentials, we should select the"},{"line_number":284,"context_line":"        # hashes of project that has more roles accounts so that the first"},{"line_number":285,"context_line":"        # credential request can be from the project accounts which has more"},{"line_number":286,"context_line":"        # roles accounts which can fulfill the further credentials requests."}],"source_content_type":"text/x-python","patch_set":7,"id":"c736a311_f642a3ea","line":283,"updated":"2026-03-13 12:39:01.000000000","message":"this comment could be better written as \"When a test requests its first credentials, prefer the project with the largest set of role accounts. This helps ensure that subsequent credential requests can be fulfilled from the same project.\"","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"789910ed4b91f47d43345126efcdb89bd539d668","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            useable_hashes \u003d [x for x in hashes if x not in admin_hashes]"},{"line_number":281,"context_line":"        else:"},{"line_number":282,"context_line":"            useable_hashes \u003d hashes"},{"line_number":283,"context_line":"        # When test is requesting the first credentials, we should select the"},{"line_number":284,"context_line":"        # hashes of project that has more roles accounts so that the first"},{"line_number":285,"context_line":"        # credential request can be from the project accounts which has more"},{"line_number":286,"context_line":"        # roles accounts which can fulfill the further credentials requests."}],"source_content_type":"text/x-python","patch_set":7,"id":"b3b33a87_e1c955fe","line":283,"in_reply_to":"85ec7f9c_de8d9c32","updated":"2026-04-02 14:28:22.000000000","message":"Acknowledged","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":true,"context_lines":[{"line_number":280,"context_line":"            useable_hashes \u003d [x for x in hashes if x not in admin_hashes]"},{"line_number":281,"context_line":"        else:"},{"line_number":282,"context_line":"            useable_hashes \u003d hashes"},{"line_number":283,"context_line":"        # When test is requesting the first credentials, we should select the"},{"line_number":284,"context_line":"        # hashes of project that has more roles accounts so that the first"},{"line_number":285,"context_line":"        # credential request can be from the project accounts which has more"},{"line_number":286,"context_line":"        # roles accounts which can fulfill the further credentials requests."}],"source_content_type":"text/x-python","patch_set":7,"id":"85ec7f9c_de8d9c32","line":283,"in_reply_to":"8a23d799_20371baa","updated":"2026-04-01 19:29:48.000000000","message":"I am not sure any benefits of that. This is still fine as it is used in a few places only.","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            useable_hashes \u003d [x for x in hashes if x not in admin_hashes]"},{"line_number":281,"context_line":"        else:"},{"line_number":282,"context_line":"            useable_hashes \u003d hashes"},{"line_number":283,"context_line":"        # When test is requesting the first credentials, we should select the"},{"line_number":284,"context_line":"        # hashes of project that has more roles accounts so that the first"},{"line_number":285,"context_line":"        # credential request can be from the project accounts which has more"},{"line_number":286,"context_line":"        # roles accounts which can fulfill the further credentials requests."}],"source_content_type":"text/x-python","patch_set":7,"id":"f152fc32_81710d8f","line":283,"in_reply_to":"c736a311_f642a3ea","updated":"2026-04-01 19:29:48.000000000","message":"Done","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"7c97fd1e77ec7759c778b0ef00b993d3cdad14ca","unresolved":true,"context_lines":[{"line_number":281,"context_line":"        else:"},{"line_number":282,"context_line":"            useable_hashes \u003d hashes"},{"line_number":283,"context_line":"        # When test is requesting the first credentials, we should select the"},{"line_number":284,"context_line":"        # hashes of project that has more roles accounts so that the first"},{"line_number":285,"context_line":"        # credential request can be from the project accounts which has more"},{"line_number":286,"context_line":"        # roles accounts which can fulfill the further credentials requests."},{"line_number":287,"context_line":"        if (scope \u003d\u003d \u0027project\u0027 and not project_name and"}],"source_content_type":"text/x-python","patch_set":7,"id":"ac77f1bb_0d287a97","line":284,"range":{"start_line":284,"start_character":17,"end_line":284,"end_character":28},"updated":"2026-03-13 12:39:01.000000000","message":"\"of the project\"?","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        else:"},{"line_number":282,"context_line":"            useable_hashes \u003d hashes"},{"line_number":283,"context_line":"        # When test is requesting the first credentials, we should select the"},{"line_number":284,"context_line":"        # hashes of project that has more roles accounts so that the first"},{"line_number":285,"context_line":"        # credential request can be from the project accounts which has more"},{"line_number":286,"context_line":"        # roles accounts which can fulfill the further credentials requests."},{"line_number":287,"context_line":"        if (scope \u003d\u003d \u0027project\u0027 and not project_name and"}],"source_content_type":"text/x-python","patch_set":7,"id":"23ddb480_06c175f2","line":284,"range":{"start_line":284,"start_character":17,"end_line":284,"end_character":28},"in_reply_to":"ac77f1bb_0d287a97","updated":"2026-04-01 19:29:48.000000000","message":"Done","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"7641e4bb78c9e22282660349d537bd536c7c8e77","unresolved":true,"context_lines":[{"line_number":320,"context_line":"        if scope \u003d\u003d \u0027project\u0027 and roles in [[\u0027manager\u0027], [\u0027member\u0027],"},{"line_number":321,"context_line":"                                            [\u0027reader\u0027], [\u0027alt_manager\u0027],"},{"line_number":322,"context_line":"                                            [\u0027alt_member\u0027], [\u0027alt_reader\u0027]]:"},{"line_number":323,"context_line":"            project_name \u003d self._get_project_id(roles, scope, return_name\u003dTrue)"},{"line_number":324,"context_line":"        useable_hashes \u003d self._get_match_hash_list(roles, scope, project_name)"},{"line_number":325,"context_line":"        if not useable_hashes:"},{"line_number":326,"context_line":"            msg \u003d \u0027No users configured for type/roles %s\u0027 % roles"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a98e0d8_82b5bf7e","line":323,"updated":"2026-03-12 18:33:25.000000000","message":"claude assisted:\n- Issue: What if _get_project_id returns None on the first request? The code doesn\u0027t handle this case explicitly\n- Result: Will still work (project_name stays None), but could be clearer","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        if scope \u003d\u003d \u0027project\u0027 and roles in [[\u0027manager\u0027], [\u0027member\u0027],"},{"line_number":321,"context_line":"                                            [\u0027reader\u0027], [\u0027alt_manager\u0027],"},{"line_number":322,"context_line":"                                            [\u0027alt_member\u0027], [\u0027alt_reader\u0027]]:"},{"line_number":323,"context_line":"            project_name \u003d self._get_project_id(roles, scope, return_name\u003dTrue)"},{"line_number":324,"context_line":"        useable_hashes \u003d self._get_match_hash_list(roles, scope, project_name)"},{"line_number":325,"context_line":"        if not useable_hashes:"},{"line_number":326,"context_line":"            msg \u003d \u0027No users configured for type/roles %s\u0027 % roles"}],"source_content_type":"text/x-python","patch_set":7,"id":"cf39120b_53e00971","line":323,"in_reply_to":"5a98e0d8_82b5bf7e","updated":"2026-04-01 19:29:48.000000000","message":"_get_match_hash_list handle the project_name as None. If no project selected then it give matching free hash from any project.","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"7641e4bb78c9e22282660349d537bd536c7c8e77","unresolved":true,"context_lines":[{"line_number":521,"context_line":"                                             identity_uri\u003dself.identity_uri)"},{"line_number":522,"context_line":"        networks_client \u003d net_clients.network.NetworksClient()"},{"line_number":523,"context_line":"        net_name \u003d self.hash_dict[\u0027networks\u0027].get(hash, None)"},{"line_number":524,"context_line":"        if not net_name:"},{"line_number":525,"context_line":"            # NOTE(gmaan): If no network for this hash, look for a network"},{"line_number":526,"context_line":"            # from another account in the same project (project manager/member/"},{"line_number":527,"context_line":"            # reader share the same project network)."}],"source_content_type":"text/x-python","patch_set":7,"id":"86261605_eb0a9425","line":524,"updated":"2026-03-12 18:33:25.000000000","message":"claude assisted:\n\n- Issue: No logging when a network is inherited from another account\n- Suggestion: Add a debug log when falling back to another account\u0027s network","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":false,"context_lines":[{"line_number":521,"context_line":"                                             identity_uri\u003dself.identity_uri)"},{"line_number":522,"context_line":"        networks_client \u003d net_clients.network.NetworksClient()"},{"line_number":523,"context_line":"        net_name \u003d self.hash_dict[\u0027networks\u0027].get(hash, None)"},{"line_number":524,"context_line":"        if not net_name:"},{"line_number":525,"context_line":"            # NOTE(gmaan): If no network for this hash, look for a network"},{"line_number":526,"context_line":"            # from another account in the same project (project manager/member/"},{"line_number":527,"context_line":"            # reader share the same project network)."}],"source_content_type":"text/x-python","patch_set":7,"id":"ee1776c1_fa817980","line":524,"in_reply_to":"86261605_eb0a9425","updated":"2026-04-01 19:29:48.000000000","message":"it is done at L541","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"7c97fd1e77ec7759c778b0ef00b993d3cdad14ca","unresolved":true,"context_lines":[{"line_number":522,"context_line":"        networks_client \u003d net_clients.network.NetworksClient()"},{"line_number":523,"context_line":"        net_name \u003d self.hash_dict[\u0027networks\u0027].get(hash, None)"},{"line_number":524,"context_line":"        if not net_name:"},{"line_number":525,"context_line":"            # NOTE(gmaan): If no network for this hash, look for a network"},{"line_number":526,"context_line":"            # from another account in the same project (project manager/member/"},{"line_number":527,"context_line":"            # reader share the same project network)."},{"line_number":528,"context_line":"            project \u003d (creds_dict.get(\u0027project_name\u0027) or"},{"line_number":529,"context_line":"                       creds_dict.get(\u0027tenant_name\u0027))"},{"line_number":530,"context_line":"            if project:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f6d11ce_2d5729a9","line":527,"range":{"start_line":525,"start_character":27,"end_line":527,"end_character":53},"updated":"2026-03-13 12:39:01.000000000","message":"suggested reword comment to \"If no network is found for this hash, try to use the network from another account in the same project, since project manager/member/reader accounts share the same project network.","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        networks_client \u003d net_clients.network.NetworksClient()"},{"line_number":523,"context_line":"        net_name \u003d self.hash_dict[\u0027networks\u0027].get(hash, None)"},{"line_number":524,"context_line":"        if not net_name:"},{"line_number":525,"context_line":"            # NOTE(gmaan): If no network for this hash, look for a network"},{"line_number":526,"context_line":"            # from another account in the same project (project manager/member/"},{"line_number":527,"context_line":"            # reader share the same project network)."},{"line_number":528,"context_line":"            project \u003d (creds_dict.get(\u0027project_name\u0027) or"},{"line_number":529,"context_line":"                       creds_dict.get(\u0027tenant_name\u0027))"},{"line_number":530,"context_line":"            if project:"}],"source_content_type":"text/x-python","patch_set":7,"id":"f0044144_f96a095b","line":527,"range":{"start_line":525,"start_character":27,"end_line":527,"end_character":53},"in_reply_to":"7f6d11ce_2d5729a9","updated":"2026-04-01 19:29:48.000000000","message":"Done","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9ee6621b54cb10be31d709581ae01ffde9dc0966","unresolved":true,"context_lines":[{"line_number":147,"context_line":"                    account[field], [])"},{"line_number":148,"context_line":"                hash_dict[\u0027project_names\u0027][account[field]].append("},{"line_number":149,"context_line":"                    temp_hash_key)"},{"line_number":150,"context_line":"            for role in roles:"},{"line_number":151,"context_line":"                hash_dict \u003d cls._append_role(role, temp_hash_key,"},{"line_number":152,"context_line":"                                             hash_dict)"},{"line_number":153,"context_line":"                if scope:"},{"line_number":154,"context_line":"                    hash_dict \u003d cls._append_scoped_role("},{"line_number":155,"context_line":"                        scope, role, temp_hash_key, hash_dict)"}],"source_content_type":"text/x-python","patch_set":10,"id":"6d246dea_32ddcf11","line":152,"range":{"start_line":150,"start_character":0,"end_line":152,"end_character":55},"updated":"2026-04-02 21:22:27.000000000","message":"This is the one issue where the test is failing. System-scoped roles\u0027 creds are added in the role hash dict also. For example, system_admin hash is added in the admin role hash dict. When test test_device_tagging.py asking for \u0027admin\u0027 creds[1] then it fetch the system admin \u0027\u0027username\u0027: \u0027tempest-test_creds-1821419876-system-admin\u0027\u0027[2][3]. When test use this system admin then Nova denies the requests with 403[4]\n\n[1]\nhttps://github.com/openstack/tempest/blob/9307558eb0a4248fbbc02b9489132b6156ffef61/tempest/api/compute/servers/test_device_tagging.py#L36C9-L36C39\n\n[2] https://zuul.opendev.org/t/openstack/build/46669850d2a54950a4da24a34c59379e/log/controller/logs/tempest_log.txt#10191-10193\n[3] https://zuul.opendev.org/t/openstack/build/46669850d2a54950a4da24a34c59379e/log/controller/logs/accounts_yaml.txt#479-483\n[4] https://zuul.opendev.org/t/openstack/build/46669850d2a54950a4da24a34c59379e/log/controller/logs/screen-n-api.txt#12662","commit_id":"8142700833fe38b6d4b5d5bbac6aee1cba42ff6d"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"69464c5fda963879faf3a620c1693b85c983d0ca","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                    account[field], [])"},{"line_number":148,"context_line":"                hash_dict[\u0027project_names\u0027][account[field]].append("},{"line_number":149,"context_line":"                    temp_hash_key)"},{"line_number":150,"context_line":"            for role in roles:"},{"line_number":151,"context_line":"                hash_dict \u003d cls._append_role(role, temp_hash_key,"},{"line_number":152,"context_line":"                                             hash_dict)"},{"line_number":153,"context_line":"                if scope:"},{"line_number":154,"context_line":"                    hash_dict \u003d cls._append_scoped_role("},{"line_number":155,"context_line":"                        scope, role, temp_hash_key, hash_dict)"}],"source_content_type":"text/x-python","patch_set":10,"id":"4f1daf6b_a3b58c77","line":152,"range":{"start_line":150,"start_character":0,"end_line":152,"end_character":55},"in_reply_to":"6d246dea_32ddcf11","updated":"2026-04-02 21:45:46.000000000","message":"Done","commit_id":"8142700833fe38b6d4b5d5bbac6aee1cba42ff6d"}],"tempest/tests/lib/common/test_preprov_creds.py":[{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"7641e4bb78c9e22282660349d537bd536c7c8e77","unresolved":true,"context_lines":[{"line_number":34,"context_line":"from tempest.tests.lib.services import registry_fixture"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# Store the real os.path.isfile before any test mocking replaces it"},{"line_number":37,"context_line":"original_isfile \u003d os.path.isfile"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class TestPreProvisionedCredentials(base.TestCase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"62f597b8_c5c34bcc","line":37,"updated":"2026-03-12 18:33:25.000000000","message":"claude assisted:\n- Issue: Tests deliberately bypass mocking to use real filesystem for hash-file locking\n- Risk: Could fail if /tmp is full or permissions issues\n- Mitigation: Already using fixtures.TempDir(), so this is acceptable for integration-style testing\n\n  Questions for Reviewer/Author\n\n  1. Performance: The scoring logic iterates through all useable_hashes. With large accounts files (100s of accounts), has performance been tested?\n  2. get_primary_creds() Deprecation: The implementation now delegates to get_project_member_creds(). Is there existing documentation about this deprecation for users to be aware of?\n  3. Zuul Job Changes: The patch makes the tempest-full-preprov-creds job voting. Are we confident the bug fixes are sufficient to make this reliable?","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"789910ed4b91f47d43345126efcdb89bd539d668","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from tempest.tests.lib.services import registry_fixture"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# Store the real os.path.isfile before any test mocking replaces it"},{"line_number":37,"context_line":"original_isfile \u003d os.path.isfile"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class TestPreProvisionedCredentials(base.TestCase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"b3fb4018_3be7a70f","line":37,"in_reply_to":"621257fc_e1f9cf72","updated":"2026-04-02 14:28:22.000000000","message":"Acknowledged","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"279ac3b27584787a69222f863d427e51eaf988b3","unresolved":true,"context_lines":[{"line_number":34,"context_line":"from tempest.tests.lib.services import registry_fixture"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# Store the real os.path.isfile before any test mocking replaces it"},{"line_number":37,"context_line":"original_isfile \u003d os.path.isfile"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class TestPreProvisionedCredentials(base.TestCase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"621257fc_e1f9cf72","line":37,"in_reply_to":"62f597b8_c5c34bcc","updated":"2026-04-01 19:29:48.000000000","message":"I am not sure I understand the comment from this change scope perspective. we need to do this beacuse some test mock isfile and we need to restore it","commit_id":"63e91119d0a1e0e45f31f6fec10128d1d93a380a"}]}
