)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"45e8eded4484ffb831c4cedde06efff4d5ff4376","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9599dbd9_081deb34","updated":"2026-08-18 07:28:13.000000000","message":"Also, it needs more tests. FileNotFoundError wasn\u0027t raised by any test cases. Could you add more cases so that we don\u0027t accidentally break it later on ?","commit_id":"daece191b417c6e632b0fa024e4ad4cc6c2579d2"},{"author":{"_account_id":37313,"name":"Alma MAILLET-CONTOZ","display_name":"Alma MAILLET-CONTOZ","email":"alma.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"1fe3f80d3b1b41128c390291473160e21e73df83","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"824d1dd9_0164c781","updated":"2026-08-17 21:10:58.000000000","message":"LGTM","commit_id":"daece191b417c6e632b0fa024e4ad4cc6c2579d2"}],"ansible/module_utils/kolla_systemd_worker.py":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"58e9773eea2b089c7de39432be948857386eb223","unresolved":true,"context_lines":[{"line_number":188,"context_line":"    def remove_unit_file(self):"},{"line_number":189,"context_line":"        if self.check_unit_file():"},{"line_number":190,"context_line":"            os.remove(self.sysdir + self.container_dict[\u0027service_name\u0027])"},{"line_number":191,"context_line":"            os.remove(self.sysdir + \"multi-user.target.wants/\" + self.container_dict[\u0027service_name\u0027])"},{"line_number":192,"context_line":"            self.reload()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"78a05791_2de4f516","line":191,"updated":"2026-06-26 07:38:07.000000000","message":"I think you\u0027ll need to update https://opendev.org/openstack/kolla-ansible/src/commit/e6c4dc028f14a7994dcba366873573a599c2ad6c/tests/kolla_container_tests/test_systemd.py#L188","commit_id":"a22f6de158547be7db4312d262dd811ab574e893"},{"author":{"_account_id":35010,"name":"Jack Hodgkiss","display_name":"jackhodgkiss","email":"jack@stackhpc.com","username":"jackhodgkiss"},"change_message_id":"4a4dbf52d41247d9075ac6da22e6c80320b8e8b0","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    def remove_unit_file(self):"},{"line_number":189,"context_line":"        if self.check_unit_file():"},{"line_number":190,"context_line":"            os.remove(self.sysdir + self.container_dict[\u0027service_name\u0027])"},{"line_number":191,"context_line":"            os.remove(self.sysdir + \"multi-user.target.wants/\" + self.container_dict[\u0027service_name\u0027])"},{"line_number":192,"context_line":"            self.reload()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"b6ffc4f1_84a4a61e","line":191,"in_reply_to":"78a05791_2de4f516","updated":"2026-06-26 07:43:13.000000000","message":"Done","commit_id":"a22f6de158547be7db4312d262dd811ab574e893"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f58bdabeb4a9cab6bd6d8f42cb612d2190b66bc7","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    def remove_unit_file(self):"},{"line_number":189,"context_line":"        if self.check_unit_file():"},{"line_number":190,"context_line":"            os.remove(self.sysdir + self.container_dict[\u0027service_name\u0027])"},{"line_number":191,"context_line":"            os.remove(self.sysdir + \"multi-user.target.wants/\" + self.container_dict[\u0027service_name\u0027])"},{"line_number":192,"context_line":"            self.reload()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f5a7e5b_c6835e7f","line":191,"updated":"2026-06-26 09:52:15.000000000","message":"linters: E501 line too long (101 \u003e 79 characters)","commit_id":"3387c3e6e98d8f2a6bc7eaab3a7fcf7bc0f1f464"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f58bdabeb4a9cab6bd6d8f42cb612d2190b66bc7","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    def remove_unit_file(self):"},{"line_number":189,"context_line":"        if self.check_unit_file():"},{"line_number":190,"context_line":"            os.remove(self.sysdir + self.container_dict[\u0027service_name\u0027])"},{"line_number":191,"context_line":"            os.remove(self.sysdir + \"multi-user.target.wants/\" + self.container_dict[\u0027service_name\u0027])"},{"line_number":192,"context_line":"            self.reload()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"af2c7071_3d1411af","line":191,"updated":"2026-06-26 09:52:15.000000000","message":"pep8: E501 line too long (101 \u003e 79 characters)","commit_id":"3387c3e6e98d8f2a6bc7eaab3a7fcf7bc0f1f464"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5d8b07db057c38daa7d0c1b8b85cc2bf5caed7e3","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    def remove_unit_file(self):"},{"line_number":189,"context_line":"        if self.check_unit_file():"},{"line_number":190,"context_line":"            os.remove(self.sysdir + self.container_dict[\u0027service_name\u0027])"},{"line_number":191,"context_line":"            os.remove(self.sysdir + \"multi-user.target.wants/\" + self.container_dict[\u0027service_name\u0027])"},{"line_number":192,"context_line":"            self.reload()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":4,"id":"dcb01453_03255f55","line":191,"updated":"2026-07-03 19:00:36.000000000","message":"linters: E501 line too long (101 \u003e 79 characters)","commit_id":"ebaf8846cd8d5c61dbbefddb6738283a41083649"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5d8b07db057c38daa7d0c1b8b85cc2bf5caed7e3","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    def remove_unit_file(self):"},{"line_number":189,"context_line":"        if self.check_unit_file():"},{"line_number":190,"context_line":"            os.remove(self.sysdir + self.container_dict[\u0027service_name\u0027])"},{"line_number":191,"context_line":"            os.remove(self.sysdir + \"multi-user.target.wants/\" + self.container_dict[\u0027service_name\u0027])"},{"line_number":192,"context_line":"            self.reload()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":4,"id":"05d0210c_86da1223","line":191,"updated":"2026-07-03 19:00:36.000000000","message":"pep8: E501 line too long (101 \u003e 79 characters)","commit_id":"ebaf8846cd8d5c61dbbefddb6738283a41083649"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ff296eff6c44a4d7375109bd0300aabcee3e1ca8","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        if self.check_unit_file():"},{"line_number":190,"context_line":"            os.remove(self.sysdir + self.container_dict[\u0027service_name\u0027])"},{"line_number":191,"context_line":"            os.remove(self.sysdir + \"multi-user.target.wants/\""},{"line_number":192,"context_line":"                + self.container_dict[\u0027service_name\u0027])"},{"line_number":193,"context_line":"            self.reload()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f8650b9_5b51f3ae","line":192,"updated":"2026-07-24 21:12:38.000000000","message":"linters: E128 continuation line under-indented for visual indent","commit_id":"8ab11a411c38b2bfc942144ee2fba8613684fa22"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ff296eff6c44a4d7375109bd0300aabcee3e1ca8","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        if self.check_unit_file():"},{"line_number":190,"context_line":"            os.remove(self.sysdir + self.container_dict[\u0027service_name\u0027])"},{"line_number":191,"context_line":"            os.remove(self.sysdir + \"multi-user.target.wants/\""},{"line_number":192,"context_line":"                + self.container_dict[\u0027service_name\u0027])"},{"line_number":193,"context_line":"            self.reload()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"9606f5f1_9485fe75","line":192,"updated":"2026-07-24 21:12:38.000000000","message":"linters: W503 line break before binary operator","commit_id":"8ab11a411c38b2bfc942144ee2fba8613684fa22"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ff296eff6c44a4d7375109bd0300aabcee3e1ca8","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        if self.check_unit_file():"},{"line_number":190,"context_line":"            os.remove(self.sysdir + self.container_dict[\u0027service_name\u0027])"},{"line_number":191,"context_line":"            os.remove(self.sysdir + \"multi-user.target.wants/\""},{"line_number":192,"context_line":"                + self.container_dict[\u0027service_name\u0027])"},{"line_number":193,"context_line":"            self.reload()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"d4b8eb9a_bc25cc2d","line":192,"updated":"2026-07-24 21:12:38.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"8ab11a411c38b2bfc942144ee2fba8613684fa22"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ff296eff6c44a4d7375109bd0300aabcee3e1ca8","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        if self.check_unit_file():"},{"line_number":190,"context_line":"            os.remove(self.sysdir + self.container_dict[\u0027service_name\u0027])"},{"line_number":191,"context_line":"            os.remove(self.sysdir + \"multi-user.target.wants/\""},{"line_number":192,"context_line":"                + self.container_dict[\u0027service_name\u0027])"},{"line_number":193,"context_line":"            self.reload()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"aeaebd89_5c09fa65","line":192,"updated":"2026-07-24 21:12:38.000000000","message":"pep8: W503 line break before binary operator","commit_id":"8ab11a411c38b2bfc942144ee2fba8613684fa22"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"c619737c3dd7d2f59f131d2421c809a1b60e5804","unresolved":true,"context_lines":[{"line_number":188,"context_line":"    def remove_unit_file(self):"},{"line_number":189,"context_line":"        if self.check_unit_file():"},{"line_number":190,"context_line":"            os.remove(self.sysdir + self.container_dict[\u0027service_name\u0027])"},{"line_number":191,"context_line":"            os.remove(self.sysdir + \"multi-user.target.wants/\" +"},{"line_number":192,"context_line":"                      self.container_dict[\u0027service_name\u0027])"},{"line_number":193,"context_line":"            self.reload()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":7,"id":"938b2404_102c7e3a","line":192,"range":{"start_line":191,"start_character":1,"end_line":192,"end_character":58},"updated":"2026-08-18 07:26:45.000000000","message":"This will throw FileNotFoundError if the file does not exists, and we do not check if it exist in check_unit_file. so a missing unit would crash it. \n\nMaybe adjust check_unit_file to return a Tuple of exist + exist_want ? then you can gate both remove operations correctly.","commit_id":"daece191b417c6e632b0fa024e4ad4cc6c2579d2"}],"tests/kolla_container_tests/test_systemd.py":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b6666c495aec5808eef018fd98d082b73a3e663e","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        return_val \u003d self.sw.remove_unit_file()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        self.assertTrue(return_val)"},{"line_number":196,"context_line":"        os.remove.assert_called_once_with("},{"line_number":197,"context_line":"            \u0027/etc/systemd/system/kolla-test-container.service\u0027"},{"line_number":198,"context_line":"            \u0027/etc/systemd/system/multi-user.target.wants/kolla-test-container.service\u0027"},{"line_number":199,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"af34e954_3ac6539e","line":196,"updated":"2026-06-26 08:31:11.000000000","message":"It\u0027s not once now","commit_id":"3387c3e6e98d8f2a6bc7eaab3a7fcf7bc0f1f464"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"206406d1e1448f68de73a9c7540e94603c88960d","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return_val \u003d self.sw.remove_unit_file()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        self.assertTrue(return_val)"},{"line_number":196,"context_line":"        os.remove.assert_called_once_with("},{"line_number":197,"context_line":"            \u0027/etc/systemd/system/kolla-test-container.service\u0027"},{"line_number":198,"context_line":"            \u0027/etc/systemd/system/multi-user.target.wants/kolla-test-container.service\u0027"},{"line_number":199,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"e5ded7eb_16c2831c","line":196,"in_reply_to":"af34e954_3ac6539e","updated":"2026-08-18 05:16:34.000000000","message":"Done","commit_id":"3387c3e6e98d8f2a6bc7eaab3a7fcf7bc0f1f464"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f58bdabeb4a9cab6bd6d8f42cb612d2190b66bc7","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        self.assertTrue(return_val)"},{"line_number":196,"context_line":"        os.remove.assert_called_once_with("},{"line_number":197,"context_line":"            \u0027/etc/systemd/system/kolla-test-container.service\u0027"},{"line_number":198,"context_line":"            \u0027/etc/systemd/system/multi-user.target.wants/kolla-test-container.service\u0027"},{"line_number":199,"context_line":"        )"},{"line_number":200,"context_line":"        self.sw.reload.assert_called_once()"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"846ed017_f160ac0f","line":198,"updated":"2026-06-26 09:52:15.000000000","message":"linters: E501 line too long (86 \u003e 79 characters)","commit_id":"3387c3e6e98d8f2a6bc7eaab3a7fcf7bc0f1f464"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f58bdabeb4a9cab6bd6d8f42cb612d2190b66bc7","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        self.assertTrue(return_val)"},{"line_number":196,"context_line":"        os.remove.assert_called_once_with("},{"line_number":197,"context_line":"            \u0027/etc/systemd/system/kolla-test-container.service\u0027"},{"line_number":198,"context_line":"            \u0027/etc/systemd/system/multi-user.target.wants/kolla-test-container.service\u0027"},{"line_number":199,"context_line":"        )"},{"line_number":200,"context_line":"        self.sw.reload.assert_called_once()"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fc38c073_ecc0eddc","line":198,"updated":"2026-06-26 09:52:15.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"3387c3e6e98d8f2a6bc7eaab3a7fcf7bc0f1f464"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5d8b07db057c38daa7d0c1b8b85cc2bf5caed7e3","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        self.assertTrue(return_val)"},{"line_number":196,"context_line":"        os.remove.assert_called_once_with("},{"line_number":197,"context_line":"            \u0027/etc/systemd/system/kolla-test-container.service\u0027,"},{"line_number":198,"context_line":"            \u0027/etc/systemd/system/multi-user.target.wants/kolla-test-container.service\u0027"},{"line_number":199,"context_line":"        )"},{"line_number":200,"context_line":"        self.sw.reload.assert_called_once()"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffdeeb22_018bcd58","line":198,"updated":"2026-07-03 19:00:36.000000000","message":"linters: E501 line too long (86 \u003e 79 characters)","commit_id":"ebaf8846cd8d5c61dbbefddb6738283a41083649"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5d8b07db057c38daa7d0c1b8b85cc2bf5caed7e3","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        self.assertTrue(return_val)"},{"line_number":196,"context_line":"        os.remove.assert_called_once_with("},{"line_number":197,"context_line":"            \u0027/etc/systemd/system/kolla-test-container.service\u0027,"},{"line_number":198,"context_line":"            \u0027/etc/systemd/system/multi-user.target.wants/kolla-test-container.service\u0027"},{"line_number":199,"context_line":"        )"},{"line_number":200,"context_line":"        self.sw.reload.assert_called_once()"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"f9189fe4_50eddbe2","line":198,"updated":"2026-07-03 19:00:36.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"ebaf8846cd8d5c61dbbefddb6738283a41083649"}]}
