)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"79ea5e30993aa2a8a0a2d23d344af6b83afbf354","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Switch from passlib to internal bcrypt filter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Also drop testtools pinning:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Revert \"CI: Temporarily pin testtools\u003c2.8.3\""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This reverts commit 28531dbdbe2b1985929a9a32a88b33a06d80067b."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Revert \"CI: Pin testtools in yet another place\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This reverts commit a91a4a875b0006026eb6710835d0e1404dae0ba7."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I1c0312aa7bdfb78fedef6c98463f25e6460f4587"},{"line_number":20,"context_line":"Co-Authored-By: Pierre Riteau \u003cpierre@stackhpc.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"7161edbe_746ac885","line":17,"range":{"start_line":9,"start_character":0,"end_line":17,"end_character":61},"updated":"2026-02-25 08:40:21.000000000","message":"We may be able to remove/separate this part now.","commit_id":"6fc9a07bad3a8d56bebcc36a9ae3452e4f704a7d"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"578d7bad2b0bc6a2307491aeb1c73172c2d21eb1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Switch from passlib to internal bcrypt filter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Also drop testtools pinning:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Revert \"CI: Temporarily pin testtools\u003c2.8.3\""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This reverts commit 28531dbdbe2b1985929a9a32a88b33a06d80067b."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Revert \"CI: Pin testtools in yet another place\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This reverts commit a91a4a875b0006026eb6710835d0e1404dae0ba7."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I1c0312aa7bdfb78fedef6c98463f25e6460f4587"},{"line_number":20,"context_line":"Co-Authored-By: Pierre Riteau \u003cpierre@stackhpc.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"1590db07_5db57b0b","line":17,"range":{"start_line":9,"start_character":0,"end_line":17,"end_character":61},"in_reply_to":"7161edbe_746ac885","updated":"2026-03-02 09:21:15.000000000","message":"Done","commit_id":"6fc9a07bad3a8d56bebcc36a9ae3452e4f704a7d"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"6eb0da3e5efbdf37e86645de3a89048b0bf9deb7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":18,"id":"c7a855c4_58bbc9e8","updated":"2026-02-24 08:16:14.000000000","message":"Pierre - can you open a new patch instead of constantly editing mine to the point of me not recognosing it?","commit_id":"229a62b76712a8eafb7053e4dd0aa1875b8d1494"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"892b245e0249d1f3be985be680cbf777d0d6b42b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"661cce31_ffd339ef","in_reply_to":"46178cc9_872452a5","updated":"2026-03-02 09:18:48.000000000","message":"Done","commit_id":"229a62b76712a8eafb7053e4dd0aa1875b8d1494"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"222185058741f5d5cac30e226691ecf655cbe987","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":18,"id":"46178cc9_872452a5","in_reply_to":"c7a855c4_58bbc9e8","updated":"2026-02-24 10:20:05.000000000","message":"Sorry, I was just helping to fix CI which is completely broken at the moment.\n\nYour patch is not changed much, I only added a function to fix the bcrypt base64 encoding. The rest was just squashing other commits to make jobs pass.","commit_id":"229a62b76712a8eafb7053e4dd0aa1875b8d1494"},{"author":{"_account_id":14200,"name":"Maksim Malchuk","email":"maksim.malchuk@gmail.com","username":"mmalchuk"},"change_message_id":"506854b8bb57458cbe80f0091da4c904f31c3797","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"f3c046cb_8f5a282a","updated":"2026-02-27 15:12:02.000000000","message":"cool commit message)","commit_id":"6166d902838d74e0ce972f831954c06495e706b7"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"a52d6dabd07c62a870ea39d7e32b522900443993","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"2b01865e_c74404a6","updated":"2026-02-27 17:20:03.000000000","message":"It looks good to me - waiting for CI","commit_id":"a75528171cac94d286238c310419b274536c832b"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b134db131a4f75be3c2c72382796b1ce2429df8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"0f454d84_611bd9fe","updated":"2026-03-02 15:13:23.000000000","message":"recheck debian bookworm upgrade unrelated failure","commit_id":"49ff7cda1a3f1f3b7ed1730dd59ff632bf166613"}],"kolla_ansible/filters.py":[{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"0700be78021ba1079229395cd3042fc053d35f6d","unresolved":true,"context_lines":[{"line_number":134,"context_line":"    :param context: Jinja2 Context object."},{"line_number":135,"context_line":"    :param password: Cleartext password to encode"},{"line_number":136,"context_line":"    :param salt: Salt, optional."},{"line_number":137,"context_line":"    :returns: A string containing password hash"},{"line_number":138,"context_line":"    \"\"\""},{"line_number":139,"context_line":"    if salt:"},{"line_number":140,"context_line":"        # Generate a 16-byte salt from your string using SHA256"}],"source_content_type":"text/x-python","patch_set":34,"id":"d6749a8d_83f64c08","line":137,"updated":"2026-03-02 12:22:55.000000000","message":"nit:  byte string","commit_id":"282e9f1a33bffd3413ee3bc680731446ef1c219e"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"16f2b703e9aef13941ea08b7cf75b58a3c4e24bf","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    :param context: Jinja2 Context object."},{"line_number":135,"context_line":"    :param password: Cleartext password to encode"},{"line_number":136,"context_line":"    :param salt: Salt, optional."},{"line_number":137,"context_line":"    :returns: A string containing password hash"},{"line_number":138,"context_line":"    \"\"\""},{"line_number":139,"context_line":"    if salt:"},{"line_number":140,"context_line":"        # Generate a 16-byte salt from your string using SHA256"}],"source_content_type":"text/x-python","patch_set":34,"id":"18cdc98f_0bdf0413","line":137,"in_reply_to":"d6749a8d_83f64c08","updated":"2026-03-02 12:53:32.000000000","message":"Done","commit_id":"282e9f1a33bffd3413ee3bc680731446ef1c219e"}],"kolla_ansible/tests/unit/test_filters.py":[{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"a52d6dabd07c62a870ea39d7e32b522900443993","unresolved":true,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_bcrypt_without_salt(self):"},{"line_number":41,"context_line":"        password \u003d \u0027test\u0027  # nosec B105"},{"line_number":42,"context_line":"        filters.bcrypt_hash(self.context, password)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_bcrypt_with_salt(self):"},{"line_number":45,"context_line":"        password \u003d \u0027test\u0027  # nosec B105"}],"source_content_type":"text/x-python","patch_set":30,"id":"22bf472b_071ee24a","line":42,"updated":"2026-02-27 17:20:03.000000000","message":"nit: assert that an object of type string is returned? same below","commit_id":"a75528171cac94d286238c310419b274536c832b"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"578d7bad2b0bc6a2307491aeb1c73172c2d21eb1","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_bcrypt_without_salt(self):"},{"line_number":41,"context_line":"        password \u003d \u0027test\u0027  # nosec B105"},{"line_number":42,"context_line":"        filters.bcrypt_hash(self.context, password)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_bcrypt_with_salt(self):"},{"line_number":45,"context_line":"        password \u003d \u0027test\u0027  # nosec B105"}],"source_content_type":"text/x-python","patch_set":30,"id":"94161834_0807f772","line":42,"in_reply_to":"22bf472b_071ee24a","updated":"2026-03-02 09:21:15.000000000","message":"Done","commit_id":"a75528171cac94d286238c310419b274536c832b"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"a52d6dabd07c62a870ea39d7e32b522900443993","unresolved":true,"context_lines":[{"line_number":50,"context_line":"        password \u003d \u0027test\u0027  # nosec B105"},{"line_number":51,"context_line":"        salt \u003d \u0027$2a$12$w40nlebw3XyoZ5Cqke14M.\u0027"},{"line_number":52,"context_line":"        first \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":53,"context_line":"        second \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":54,"context_line":"        self.assertEqual(first, second)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_service_enabled_true(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"f446ec88_936bd779","line":53,"updated":"2026-02-27 17:20:03.000000000","message":"nit: assert that either `first` or `second` is of type string?\n\nEg. it /could/ return `none` both times and pass","commit_id":"a75528171cac94d286238c310419b274536c832b"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"578d7bad2b0bc6a2307491aeb1c73172c2d21eb1","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        password \u003d \u0027test\u0027  # nosec B105"},{"line_number":51,"context_line":"        salt \u003d \u0027$2a$12$w40nlebw3XyoZ5Cqke14M.\u0027"},{"line_number":52,"context_line":"        first \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":53,"context_line":"        second \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":54,"context_line":"        self.assertEqual(first, second)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_service_enabled_true(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"6eb0e57c_cdbcba0c","line":53,"in_reply_to":"f446ec88_936bd779","updated":"2026-03-02 09:21:15.000000000","message":"Done","commit_id":"a75528171cac94d286238c310419b274536c832b"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"097d1743fd125af1bdf68b7f98edc53d30b633d7","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    def test_bcrypt_with_salt(self):"},{"line_number":46,"context_line":"        password \u003d \u0027test\u0027  # nosec B105"},{"line_number":47,"context_line":"        salt \u003d \u0027$2a$12$w40nlebw3XyoZ5Cqke14M.\u0027"},{"line_number":48,"context_line":"        filters.bcrypt_hash(self.context, password, salt)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_bcrypt_with_salt_idempotent(self):"},{"line_number":51,"context_line":"        password \u003d \u0027test\u0027  # nosec B105"}],"source_content_type":"text/x-python","patch_set":34,"id":"cbe8e458_a05aa095","line":48,"updated":"2026-03-02 10:58:39.000000000","message":"nit: same here","commit_id":"282e9f1a33bffd3413ee3bc680731446ef1c219e"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"16f2b703e9aef13941ea08b7cf75b58a3c4e24bf","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def test_bcrypt_with_salt(self):"},{"line_number":46,"context_line":"        password \u003d \u0027test\u0027  # nosec B105"},{"line_number":47,"context_line":"        salt \u003d \u0027$2a$12$w40nlebw3XyoZ5Cqke14M.\u0027"},{"line_number":48,"context_line":"        filters.bcrypt_hash(self.context, password, salt)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_bcrypt_with_salt_idempotent(self):"},{"line_number":51,"context_line":"        password \u003d \u0027test\u0027  # nosec B105"}],"source_content_type":"text/x-python","patch_set":34,"id":"19e15a79_8b523642","line":48,"in_reply_to":"cbe8e458_a05aa095","updated":"2026-03-02 12:53:32.000000000","message":"Done","commit_id":"282e9f1a33bffd3413ee3bc680731446ef1c219e"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"0700be78021ba1079229395cd3042fc053d35f6d","unresolved":true,"context_lines":[{"line_number":52,"context_line":"        salt \u003d \u0027$2a$12$w40nlebw3XyoZ5Cqke14M.\u0027"},{"line_number":53,"context_line":"        first \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":54,"context_line":"        second \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":55,"context_line":"        self.assertIsInstance(first, str)"},{"line_number":56,"context_line":"        self.assertIsInstance(second, str)"},{"line_number":57,"context_line":"        self.assertEqual(first, second)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"257a558f_8562fc98","line":55,"updated":"2026-03-02 12:22:55.000000000","message":"`s/str/bytes`","commit_id":"282e9f1a33bffd3413ee3bc680731446ef1c219e"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"16f2b703e9aef13941ea08b7cf75b58a3c4e24bf","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        salt \u003d \u0027$2a$12$w40nlebw3XyoZ5Cqke14M.\u0027"},{"line_number":53,"context_line":"        first \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":54,"context_line":"        second \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":55,"context_line":"        self.assertIsInstance(first, str)"},{"line_number":56,"context_line":"        self.assertIsInstance(second, str)"},{"line_number":57,"context_line":"        self.assertEqual(first, second)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9597eb26_2dae42a6","line":55,"in_reply_to":"257a558f_8562fc98","updated":"2026-03-02 12:53:32.000000000","message":"Done","commit_id":"282e9f1a33bffd3413ee3bc680731446ef1c219e"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"097d1743fd125af1bdf68b7f98edc53d30b633d7","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        first \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":54,"context_line":"        second \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":55,"context_line":"        self.assertIsInstance(first, str)"},{"line_number":56,"context_line":"        self.assertIsInstance(second, str)"},{"line_number":57,"context_line":"        self.assertEqual(first, second)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def test_service_enabled_true(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"0bce946a_d450444a","line":56,"updated":"2026-03-02 10:58:39.000000000","message":"nit: check just one since we have l57? I don\u0027t mind if you want to leave as-is","commit_id":"282e9f1a33bffd3413ee3bc680731446ef1c219e"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"16f2b703e9aef13941ea08b7cf75b58a3c4e24bf","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        first \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":54,"context_line":"        second \u003d filters.bcrypt_hash(self.context, password, salt)"},{"line_number":55,"context_line":"        self.assertIsInstance(first, str)"},{"line_number":56,"context_line":"        self.assertIsInstance(second, str)"},{"line_number":57,"context_line":"        self.assertEqual(first, second)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def test_service_enabled_true(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"3c700466_02fdf243","line":56,"in_reply_to":"0bce946a_d450444a","updated":"2026-03-02 12:53:32.000000000","message":"Acknowledged","commit_id":"282e9f1a33bffd3413ee3bc680731446ef1c219e"}]}
