)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7973,"name":"Douglas Mendizábal","email":"dmendiza@redhat.com","username":"dougmendizabal"},"change_message_id":"d012675a420900336a4259391ea2ca11d31421b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f010434c_6d12f0c7","updated":"2026-02-11 14:20:50.000000000","message":"Keystone API v2 was removed from Keystone in the Queens release: https://docs.openstack.org/keystone/latest/contributor/http-api.html#history\n\nI think a better fix is to drop support for v2 here as well.","commit_id":"fe8e5c6ccaa6ec52d93c7d9c72c3d2c22274c106"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"28e02164da4cc2909de984854a672754c029de8e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"8b370d55_706b3c42","updated":"2026-02-11 08:52:08.000000000","message":"recheck\n\nJust a failure in \npython-tempestconf-tempest-devstack-admin-2024-1","commit_id":"fe8e5c6ccaa6ec52d93c7d9c72c3d2c22274c106"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"edafdb983b65b9f2885070f1e4c1c163cdfab36a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a3b36efb_a7eaad41","in_reply_to":"f010434c_6d12f0c7","updated":"2026-02-11 14:32:20.000000000","message":"I disagree, that would be a bigger change, and I\u0027d prefer to defer to later as it touches more code.","commit_id":"fe8e5c6ccaa6ec52d93c7d9c72c3d2c22274c106"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"85a3135e6a67338fa8827a51d6067c3da3996ba4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"79eac30e_5140ce32","updated":"2026-02-12 19:23:03.000000000","message":"Thanks!","commit_id":"eb3899f5444f97e33541afa39c1cf936557225dc"},{"author":{"_account_id":7973,"name":"Douglas Mendizábal","email":"dmendiza@redhat.com","username":"dougmendizabal"},"change_message_id":"f4e75acc24cb158ff4742b8338bda8a0d2a9f8b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b3c0a309_ea9dd786","updated":"2026-02-12 19:14:35.000000000","message":"lgtm","commit_id":"eb3899f5444f97e33541afa39c1cf936557225dc"}],"config_tempest/services/identity.py":[{"author":{"_account_id":7973,"name":"Douglas Mendizábal","email":"dmendiza@redhat.com","username":"dougmendizabal"},"change_message_id":"31468fed5e439b626a31f3dd2b6daa624f842a31","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        self.extensions_v3 \u003d []"},{"line_number":32,"context_line":"        version \u003d \u0027\u0027"},{"line_number":33,"context_line":"        url_parse \u003d urllib.parse.urlparse(self.service_url)"},{"line_number":34,"context_line":"        if \u0027v2\u0027 in url_parse.path:"},{"line_number":35,"context_line":"            self.api_version_2 \u003d True"},{"line_number":36,"context_line":"            version \u003d \u0027/v2.0\u0027"},{"line_number":37,"context_line":"            self.service_url \u003d \u0027{}://{}{}\u0027.format(url_parse.scheme,"}],"source_content_type":"text/x-python","patch_set":2,"id":"07e34fc8_18f7f853","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":33},"updated":"2026-02-11 17:16:40.000000000","message":"The use of the `in` operator here is still problematic.  Consider a URL like\n\n    https://my.example.com/mcyloudv2/v3\n\nIn this case it will still be incorrectly parsed as v2.  This needs further work to completely fix the bug and keep the support v2.  I suggest using pathlib to further process the url path:\n\n    url_parse \u003d urllib.parse.urlparse(self.service_url)\n    path \u003d pathlib.PurePosixPath(url_parse.path)\n    if path.name.startswith(\u0027v2\u0027):\n        self.api_version_2 \u003d True","commit_id":"498507c46c6ddef0b1bdc252aff02bea6bd5ca9e"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"60af4896e44e3ee6f2291e80ff150d1a73a56f61","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        self.extensions_v3 \u003d []"},{"line_number":32,"context_line":"        version \u003d \u0027\u0027"},{"line_number":33,"context_line":"        url_parse \u003d urllib.parse.urlparse(self.service_url)"},{"line_number":34,"context_line":"        if \u0027v2\u0027 in url_parse.path:"},{"line_number":35,"context_line":"            self.api_version_2 \u003d True"},{"line_number":36,"context_line":"            version \u003d \u0027/v2.0\u0027"},{"line_number":37,"context_line":"            self.service_url \u003d \u0027{}://{}{}\u0027.format(url_parse.scheme,"}],"source_content_type":"text/x-python","patch_set":2,"id":"2548124c_294e0277","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":33},"in_reply_to":"07e34fc8_18f7f853","updated":"2026-02-11 17:27:14.000000000","message":"Thanks.\nI don\u0027t really know which format is acceptable here for that URI. So can people freely define anything they want even in the path part, not just /v2 or /v3 or none?\nOr better, would a v2 api be just \u003chostname\u003e/v2 ? Or can it be also \u003chostname\u003e/foo/v2?\n\n\nAlso: if the version is v2, couldn\u0027t then I just check for \u0027/v2\u0027 in the path?","commit_id":"498507c46c6ddef0b1bdc252aff02bea6bd5ca9e"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"34da4d4be7a5fbde38e7fcbc324763dc5fea569a","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        self.extensions_v3 \u003d []"},{"line_number":32,"context_line":"        version \u003d \u0027\u0027"},{"line_number":33,"context_line":"        url_parse \u003d urllib.parse.urlparse(self.service_url)"},{"line_number":34,"context_line":"        if \u0027v2\u0027 in url_parse.path:"},{"line_number":35,"context_line":"            self.api_version_2 \u003d True"},{"line_number":36,"context_line":"            version \u003d \u0027/v2.0\u0027"},{"line_number":37,"context_line":"            self.service_url \u003d \u0027{}://{}{}\u0027.format(url_parse.scheme,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3de5c17b_5d5b943a","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":33},"in_reply_to":"1e83d43b_5985c17b","updated":"2026-02-12 00:31:38.000000000","message":"Should be fixed now (hopefully)","commit_id":"498507c46c6ddef0b1bdc252aff02bea6bd5ca9e"},{"author":{"_account_id":7973,"name":"Douglas Mendizábal","email":"dmendiza@redhat.com","username":"dougmendizabal"},"change_message_id":"cf265014225b7fd1813030b28306b7eddf080a9b","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        self.extensions_v3 \u003d []"},{"line_number":32,"context_line":"        version \u003d \u0027\u0027"},{"line_number":33,"context_line":"        url_parse \u003d urllib.parse.urlparse(self.service_url)"},{"line_number":34,"context_line":"        if \u0027v2\u0027 in url_parse.path:"},{"line_number":35,"context_line":"            self.api_version_2 \u003d True"},{"line_number":36,"context_line":"            version \u003d \u0027/v2.0\u0027"},{"line_number":37,"context_line":"            self.service_url \u003d \u0027{}://{}{}\u0027.format(url_parse.scheme,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1e83d43b_5985c17b","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":33},"in_reply_to":"2548124c_294e0277","updated":"2026-02-11 17:39:48.000000000","message":"Yes, the hostname and path up to the root of keystone wsgi can be arbitrary.  Once keystone root is defined (e.g. https://my.example.com/keystone) then keystone responds to `/v2.0`, `/v2.1`, `/v3`, and any other versions that the release supports.","commit_id":"498507c46c6ddef0b1bdc252aff02bea6bd5ca9e"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"30e5fb4e0a479059167782732bd8b1dbd6db0a49","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.extensions_v3 \u003d []"},{"line_number":32,"context_line":"        version \u003d \u0027\u0027"},{"line_number":33,"context_line":"        url_parse \u003d urllib.parse.urlparse(self.service_url)"},{"line_number":34,"context_line":"        if \u0027v2\u0027 in url_parse.path:"},{"line_number":35,"context_line":"            self.api_version_2 \u003d True"},{"line_number":36,"context_line":"            version \u003d \u0027/v2.0\u0027"},{"line_number":37,"context_line":"            self.service_url \u003d \u0027{}://{}{}\u0027.format(url_parse.scheme,"}],"source_content_type":"text/x-python","patch_set":2,"id":"e38d46b9_6cef8301","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":33},"in_reply_to":"3de5c17b_5d5b943a","updated":"2026-02-12 00:32:09.000000000","message":"Done","commit_id":"498507c46c6ddef0b1bdc252aff02bea6bd5ca9e"}]}
