)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38857,"name":"Kurt Bendl","display_name":"kbendl","email":"kbendl@tool.net","username":"kbendl"},"change_message_id":"92f36e78152926cfbc414fc2f9f2ba333d69c725","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"419fa650_d8a543b7","updated":"2026-04-27 15:50:32.000000000","message":"work in progress","commit_id":"01ea4efced4af71ba59daa5aa6cd80f2e14f967c"},{"author":{"_account_id":38857,"name":"Kurt Bendl","display_name":"kbendl","email":"kbendl@tool.net","username":"kbendl"},"change_message_id":"5cff0a7972909b8b2ccc4b2a05e9305c33c64e7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"4d2cfd6c_47c4fae4","updated":"2026-06-25 19:23:14.000000000","message":"Let me know what you think.","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"}],"ansible/module_utils/kolla_container_worker.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"90380e4f_9781c935","line":149,"updated":"2026-06-25 20:24:26.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9575a8cf_018b873d","line":149,"updated":"2026-06-25 20:24:26.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"327408bb_fc8824d9","line":149,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"d3ced566_2843b04b","line":149,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"},{"line_number":153,"context_line":"        if not sec_opt and name:"}],"source_content_type":"text/x-python","patch_set":6,"id":"76f1f3d0_75ade2b5","line":150,"updated":"2026-06-25 20:24:26.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"},{"line_number":153,"context_line":"        if not sec_opt and name:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3bfecbd9_37e0c06c","line":150,"updated":"2026-06-25 20:24:26.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"},{"line_number":153,"context_line":"        if not sec_opt and name:"}],"source_content_type":"text/x-python","patch_set":6,"id":"48edc408_f7e0d42a","line":150,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"},{"line_number":153,"context_line":"        if not sec_opt and name:"}],"source_content_type":"text/x-python","patch_set":6,"id":"2d274aed_52f563e7","line":150,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"529636fe_8331f66b","line":149,"updated":"2026-07-03 21:25:24.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"92e89052_5bff7c19","line":149,"updated":"2026-07-03 21:25:24.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"cbd38880_628c76f6","line":149,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9c06ae70_6a272220","line":149,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"},{"line_number":153,"context_line":"        if not sec_opt and name:"}],"source_content_type":"text/x-python","patch_set":7,"id":"be5fbd2b_e755ca11","line":150,"updated":"2026-07-03 21:25:24.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"},{"line_number":153,"context_line":"        if not sec_opt and name:"}],"source_content_type":"text/x-python","patch_set":7,"id":"100544d2_ceb5c8dc","line":150,"updated":"2026-07-03 21:25:24.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"},{"line_number":153,"context_line":"        if not sec_opt and name:"}],"source_content_type":"text/x-python","patch_set":7,"id":"afd4749e_fda10463","line":150,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _effective_security_opt(self):"},{"line_number":149,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":150,"context_line":"        SELinux label when none is explicitly set.\"\"\""},{"line_number":151,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"},{"line_number":152,"context_line":"        name \u003d self.params.get(\u0027name\u0027)"},{"line_number":153,"context_line":"        if not sec_opt and name:"}],"source_content_type":"text/x-python","patch_set":7,"id":"d51f207a_5ec2ec70","line":150,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ca0f723c_22c837e0","line":150,"updated":"2026-07-20 15:04:59.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7ddc0246_d0161c85","line":150,"updated":"2026-07-20 15:04:59.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"}],"source_content_type":"text/x-python","patch_set":13,"id":"f069a137_54bd3428","line":150,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"}],"source_content_type":"text/x-python","patch_set":13,"id":"e9c4b813_4d90b172","line":150,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":13,"id":"1b3680d9_ae5dd529","line":151,"updated":"2026-07-20 15:04:59.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":13,"id":"7ca65868_545c4708","line":151,"updated":"2026-07-20 15:04:59.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":13,"id":"89879323_1f144a2d","line":151,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":13,"id":"e20bf6a4_b3584229","line":151,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"},{"line_number":155,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"}],"source_content_type":"text/x-python","patch_set":13,"id":"5473eb58_323aa642","line":152,"updated":"2026-07-20 15:04:59.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"},{"line_number":155,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"}],"source_content_type":"text/x-python","patch_set":13,"id":"e40eec0d_7cede8d2","line":152,"updated":"2026-07-20 15:04:59.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"},{"line_number":155,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"}],"source_content_type":"text/x-python","patch_set":13,"id":"ad53630d_22e3c238","line":152,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"},{"line_number":155,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"}],"source_content_type":"text/x-python","patch_set":13,"id":"b54e2916_c5f10cd0","line":152,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"}],"source_content_type":"text/x-python","patch_set":14,"id":"ea3b8ceb_b9b26a16","line":150,"updated":"2026-07-20 19:34:18.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bb7d206c_8426668f","line":150,"updated":"2026-07-20 19:34:18.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"}],"source_content_type":"text/x-python","patch_set":14,"id":"323c3661_23a8a8c9","line":150,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return sorted(current), sorted(self.params.get(\u0027cap_add\u0027, []))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"}],"source_content_type":"text/x-python","patch_set":14,"id":"14f4c443_e4710b40","line":150,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":14,"id":"da09b377_627053ae","line":151,"updated":"2026-07-20 19:34:18.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":14,"id":"b63ef1f7_15c70f8d","line":151,"updated":"2026-07-20 19:34:18.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":14,"id":"70fcd5f0_e8b1e926","line":151,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":14,"id":"4c64a293_ccbb476b","line":151,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"},{"line_number":155,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"}],"source_content_type":"text/x-python","patch_set":14,"id":"ed35fdc1_7969c738","line":152,"updated":"2026-07-20 19:34:18.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"},{"line_number":155,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"}],"source_content_type":"text/x-python","patch_set":14,"id":"5999d8f7_649e1d61","line":152,"updated":"2026-07-20 19:34:18.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"},{"line_number":155,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"}],"source_content_type":"text/x-python","patch_set":14,"id":"aeb15083_b2bfc050","line":152,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    def _effective_security_opt(self):"},{"line_number":150,"context_line":"        \"\"\"Return the effective security_opt list, auto-generating a"},{"line_number":151,"context_line":"        SELinux label when none is explicitly set."},{"line_number":152,"context_line":"        When the container is privileged, SELinux labeling is not used.\"\"\""},{"line_number":153,"context_line":"        if self.params.get(\u0027privileged\u0027, False):"},{"line_number":154,"context_line":"            return []"},{"line_number":155,"context_line":"        sec_opt \u003d self.params.get(\u0027security_opt\u0027) or []"}],"source_content_type":"text/x-python","patch_set":14,"id":"2883bed2_2724acc9","line":152,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"}],"ansible/roles/grafana/defaults/main.yml":[{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"46340d31fef9604e023c625d65919bf5cc53d87d","unresolved":true,"context_lines":[{"line_number":130,"context_line":"###################"},{"line_number":131,"context_line":"# Copy certificates"},{"line_number":132,"context_line":"###################"},{"line_number":133,"context_line":"glance_copy_certs: \"{{ kolla_copy_ca_into_containers | bool or glance_enable_tls_backend | bool or glance_database_enable_tls_internal | bool }}\""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"####################"},{"line_number":136,"context_line":"# Enable SELinux"}],"source_content_type":"text/x-yaml","patch_set":17,"id":"8953fd86_984af255","line":133,"updated":"2026-07-29 12:12:07.000000000","message":"grafana ;)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"}],"ansible/roles/service-selinux/tasks/check.yml":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"a8f7455193e8feb2b2d3c7d7469efca8f36cff23","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: Checking systems for selinux setup and packages"},{"line_number":3,"context_line":"  ansible.builtin.include_tasks:"},{"line_number":4,"context_line":"  include_tasks:"},{"line_number":5,"context_line":"    file: bootstrap.yml"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"d1e95ad7_d0fa3b95","line":2,"updated":"2026-08-21 13:07:29.000000000","message":"linters: parser-error: conflicting action statements: ansible.builtin.include_tasks, include_tasks (warning)","commit_id":"aa6e5bb31db3f6e796ddb9cc8cb4a8f900608dbb"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bea72a2df652e4e1adb22a8115052dfc0d7c5440","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: Checking systems for selinux setup and packages"},{"line_number":3,"context_line":"  ansible.builtin.include_tasks:"},{"line_number":4,"context_line":"  include_tasks:"},{"line_number":5,"context_line":"    file: bootstrap.yml"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"0bf50014_65c16e7a","line":2,"updated":"2026-08-21 15:43:53.000000000","message":"linters: parser-error: conflicting action statements: ansible.builtin.include_tasks, include_tasks (warning)","commit_id":"53f03aa891d5f41e2d55aa2504e8aebf9bf62dd2"}],"ansible/roles/service-selinux/tasks/config.yml":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"a8f7455193e8feb2b2d3c7d7469efca8f36cff23","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"# config setup for service-selinux"},{"line_number":3,"context_line":"- name: Checking systems for selinux avc denied messages"},{"line_number":4,"context_line":"  ansible.builtin.include_tasks:"},{"line_number":5,"context_line":"  include_tasks:"},{"line_number":6,"context_line":"    file: deploy.yml"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"a7c556bc_b90035eb","line":3,"updated":"2026-08-21 13:07:29.000000000","message":"linters: parser-error: conflicting action statements: ansible.builtin.include_tasks, include_tasks (warning)","commit_id":"aa6e5bb31db3f6e796ddb9cc8cb4a8f900608dbb"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bea72a2df652e4e1adb22a8115052dfc0d7c5440","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"# config setup for service-selinux"},{"line_number":3,"context_line":"- name: Checking systems for selinux avc denied messages"},{"line_number":4,"context_line":"  ansible.builtin.include_tasks:"},{"line_number":5,"context_line":"  include_tasks:"},{"line_number":6,"context_line":"    file: deploy.yml"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"fee5d2ed_c392589d","line":3,"updated":"2026-08-21 15:43:53.000000000","message":"linters: parser-error: conflicting action statements: ansible.builtin.include_tasks, include_tasks (warning)","commit_id":"53f03aa891d5f41e2d55aa2504e8aebf9bf62dd2"}],"tests/kolla_container_tests/test_selinux_security_opt.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":6,"id":"94902045_f4fe84d1","line":126,"updated":"2026-06-25 20:24:26.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ce6dfe4_4439b96f","line":126,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        self.assertIsNotNone(dw.compare_security_opt({}))"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"b8a8c143_680b5465","line":339,"updated":"2026-06-25 20:24:26.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        self.assertIsNotNone(dw.compare_security_opt({}))"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"0b47cbdb_1c69352b","line":339,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3619fcf5_c5f9d608","line":340,"updated":"2026-06-25 20:24:26.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9063aad7_1317be7f","line":340,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":344,"context_line":"        self.assertRaises(AttributeError,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ae352121_6f9c6edb","line":341,"updated":"2026-06-25 20:24:26.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":344,"context_line":"        self.assertRaises(AttributeError,"}],"source_content_type":"text/x-python","patch_set":6,"id":"e66f8eaa_c1afc597","line":341,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":344,"context_line":"        self.assertRaises(AttributeError,"},{"line_number":345,"context_line":"                          dw.compare_security_opt,"}],"source_content_type":"text/x-python","patch_set":6,"id":"43dee83b_a9475d01","line":342,"updated":"2026-06-25 20:24:26.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":344,"context_line":"        self.assertRaises(AttributeError,"},{"line_number":345,"context_line":"                          dw.compare_security_opt,"}],"source_content_type":"text/x-python","patch_set":6,"id":"a41ee208_bd7f2949","line":342,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        })"},{"line_number":418,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":419,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":420,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":421,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":422,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"2bcdbb82_68f45960","line":420,"updated":"2026-06-25 20:24:26.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        })"},{"line_number":418,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":419,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":420,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":421,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":422,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"e98549f8_3cca6bfb","line":420,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":432,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":433,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":434,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":435,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_build_host_config_sets_privileged_when_selinux_disabled(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ee18cf4a_144be108","line":434,"updated":"2026-06-25 20:24:26.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":432,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":433,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":434,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":435,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_build_host_config_sets_privileged_when_selinux_disabled(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"e35b9f31_4a678fa6","line":434,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":435,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_build_host_config_sets_privileged_when_selinux_disabled(self):"},{"line_number":438,"context_line":"        \"\"\"When SELinux is disabled, privileged should be set by Ansible layer.\"\"\""},{"line_number":439,"context_line":"        # This test validates that when privileged\u003dTrue is passed,"},{"line_number":440,"context_line":"        # build_host_config reflects it correctly."},{"line_number":441,"context_line":"        self.fake_data[\u0027params\u0027].update({"}],"source_content_type":"text/x-python","patch_set":6,"id":"a9720e3d_3c96daf6","line":438,"updated":"2026-06-25 20:24:26.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6869690b9a89c86878775b09d9bd94b038103aec","unresolved":false,"context_lines":[{"line_number":435,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_build_host_config_sets_privileged_when_selinux_disabled(self):"},{"line_number":438,"context_line":"        \"\"\"When SELinux is disabled, privileged should be set by Ansible layer.\"\"\""},{"line_number":439,"context_line":"        # This test validates that when privileged\u003dTrue is passed,"},{"line_number":440,"context_line":"        # build_host_config reflects it correctly."},{"line_number":441,"context_line":"        self.fake_data[\u0027params\u0027].update({"}],"source_content_type":"text/x-python","patch_set":6,"id":"bd63ce0e_aecff19a","line":438,"updated":"2026-06-25 20:24:26.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"3d547db4adde8024918a4b80b7e541421bc4d6dc"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":7,"id":"e3205f5e_96a1ba93","line":126,"updated":"2026-07-03 21:25:24.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf433f01_2c838b71","line":126,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        self.assertIsNotNone(dw.compare_security_opt({}))"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"7cd0f4e3_189d72d4","line":339,"updated":"2026-07-03 21:25:24.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        self.assertIsNotNone(dw.compare_security_opt({}))"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"42ad57b3_ec1806d2","line":339,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"0f9e96b8_5c337e69","line":340,"updated":"2026-07-03 21:25:24.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"e2b4ea8c_37e0e4b2","line":340,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":344,"context_line":"        self.assertRaises(AttributeError,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f0919e1_88fa344e","line":341,"updated":"2026-07-03 21:25:24.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":344,"context_line":"        self.assertRaises(AttributeError,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dd1264dc_0d118a38","line":341,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":344,"context_line":"        self.assertRaises(AttributeError,"},{"line_number":345,"context_line":"                          dw.compare_security_opt,"}],"source_content_type":"text/x-python","patch_set":7,"id":"f9c88500_429bb0cf","line":342,"updated":"2026-07-03 21:25:24.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        because None.get() not caught by the existing"},{"line_number":342,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":343,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":344,"context_line":"        self.assertRaises(AttributeError,"},{"line_number":345,"context_line":"                          dw.compare_security_opt,"}],"source_content_type":"text/x-python","patch_set":7,"id":"e3c1f4cd_7368b39d","line":342,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        })"},{"line_number":418,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":419,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":420,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":421,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":422,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5ca72244_eb28860e","line":420,"updated":"2026-07-03 21:25:24.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        })"},{"line_number":418,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":419,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":420,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":421,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":422,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ce064575_6712b84f","line":420,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":432,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":433,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":434,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":435,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_build_host_config_sets_privileged_when_selinux_disabled(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1b6ea81a_6b11425e","line":434,"updated":"2026-07-03 21:25:24.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":432,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":433,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":434,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":435,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_build_host_config_sets_privileged_when_selinux_disabled(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"731bfbf1_9d968baf","line":434,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":435,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_build_host_config_sets_privileged_when_selinux_disabled(self):"},{"line_number":438,"context_line":"        \"\"\"When SELinux is disabled, privileged should be set by Ansible layer.\"\"\""},{"line_number":439,"context_line":"        # This test validates that when privileged\u003dTrue is passed,"},{"line_number":440,"context_line":"        # build_host_config reflects it correctly."},{"line_number":441,"context_line":"        self.fake_data[\u0027params\u0027].update({"}],"source_content_type":"text/x-python","patch_set":7,"id":"6c8b13dd_a390b479","line":438,"updated":"2026-07-03 21:25:24.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"10d9104e0321054bbacbec5687aecc15dbd816c3","unresolved":false,"context_lines":[{"line_number":435,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_build_host_config_sets_privileged_when_selinux_disabled(self):"},{"line_number":438,"context_line":"        \"\"\"When SELinux is disabled, privileged should be set by Ansible layer.\"\"\""},{"line_number":439,"context_line":"        # This test validates that when privileged\u003dTrue is passed,"},{"line_number":440,"context_line":"        # build_host_config reflects it correctly."},{"line_number":441,"context_line":"        self.fake_data[\u0027params\u0027].update({"}],"source_content_type":"text/x-python","patch_set":7,"id":"57775f5b_87d31020","line":438,"updated":"2026-07-03 21:25:24.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"748a06de129880c8078c174ee0ef9191f6e97a7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":13,"id":"291513e7_6d256694","line":126,"updated":"2026-07-20 15:04:59.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":13,"id":"d4deaf48_9351979e","line":126,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        self.assertIsNotNone(dw.compare_security_opt({}))"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"52cd2870_23ff4185","line":349,"updated":"2026-07-20 15:04:59.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        self.assertIsNotNone(dw.compare_security_opt({}))"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"dda65f0f_244be330","line":349,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"298f2933_3ad4622c","line":350,"updated":"2026-07-20 15:04:59.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9839b4a5_09e31ab7","line":350,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":354,"context_line":"        self.assertRaises(AttributeError,"}],"source_content_type":"text/x-python","patch_set":13,"id":"170071bc_c24f00e4","line":351,"updated":"2026-07-20 15:04:59.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":354,"context_line":"        self.assertRaises(AttributeError,"}],"source_content_type":"text/x-python","patch_set":13,"id":"89147450_b0120d51","line":351,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":354,"context_line":"        self.assertRaises(AttributeError,"},{"line_number":355,"context_line":"                          dw.compare_security_opt,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5b4a6d47_d5238a46","line":352,"updated":"2026-07-20 15:04:59.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":354,"context_line":"        self.assertRaises(AttributeError,"},{"line_number":355,"context_line":"                          dw.compare_security_opt,"}],"source_content_type":"text/x-python","patch_set":13,"id":"dd2d78c6_0b4a5110","line":352,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        })"},{"line_number":428,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":429,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":430,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":431,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":432,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"2dc701ce_84f1c4e5","line":430,"updated":"2026-07-20 15:04:59.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        })"},{"line_number":428,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":429,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":430,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":431,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":432,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"186484ba_18750bba","line":430,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":442,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":443,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":444,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"5cedddbe_b67e2e9d","line":444,"updated":"2026-07-20 15:04:59.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":442,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":443,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":444,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a43b929_ca198c6f","line":444,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":448,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":449,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":450,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":451,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":13,"id":"deccba7d_574ad3eb","line":448,"updated":"2026-07-20 15:04:59.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16e41d49c6f50ee9e4d6713585f376043078654c","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":448,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":449,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":450,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":451,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":13,"id":"767d4f51_c6718b73","line":448,"updated":"2026-07-20 15:04:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"affb6d66242c095db8cff61ae9b2e1fc5ad48e79"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":14,"id":"9320150d_c29ae539","line":126,"updated":"2026-07-20 19:34:18.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":14,"id":"d93543a6_9d4ee9bc","line":126,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        self.assertIsNotNone(dw.compare_security_opt({}))"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"ca6b97f4_b3284df9","line":349,"updated":"2026-07-20 19:34:18.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        self.assertIsNotNone(dw.compare_security_opt({}))"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"a6068d77_f5c8b526","line":349,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"f09662eb_5f0bc124","line":350,"updated":"2026-07-20 19:34:18.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"cc211d6a_c9b62428","line":350,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":354,"context_line":"        self.assertRaises(AttributeError,"}],"source_content_type":"text/x-python","patch_set":14,"id":"72750dd3_d54b471c","line":351,"updated":"2026-07-20 19:34:18.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":348,"context_line":"    def test_handles_none_host_config(self):"},{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":354,"context_line":"        self.assertRaises(AttributeError,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fc8b2c9_7fe32505","line":351,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":354,"context_line":"        self.assertRaises(AttributeError,"},{"line_number":355,"context_line":"                          dw.compare_security_opt,"}],"source_content_type":"text/x-python","patch_set":14,"id":"d7264585_db38b3f8","line":352,"updated":"2026-07-20 19:34:18.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        \"\"\"None HostConfig raises AttributeError"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        because None.get() not caught by the existing"},{"line_number":352,"context_line":"        KeyError/TypeError handlers in compare_security_opt.\"\"\""},{"line_number":353,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027memcached\u0027)"},{"line_number":354,"context_line":"        self.assertRaises(AttributeError,"},{"line_number":355,"context_line":"                          dw.compare_security_opt,"}],"source_content_type":"text/x-python","patch_set":14,"id":"e40f05d8_35516ae6","line":352,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        })"},{"line_number":428,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":429,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":430,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":431,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":432,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"8260a02b_5d1616ef","line":430,"updated":"2026-07-20 19:34:18.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        })"},{"line_number":428,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":429,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":430,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":431,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":432,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"8ec91f15_63afdd3b","line":430,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":442,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":443,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":444,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"03113b98_f5b291c3","line":444,"updated":"2026-07-20 19:34:18.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":442,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":443,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":444,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"2e119db5_9d88b850","line":444,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":448,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":449,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":450,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":451,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":14,"id":"cff3b5f2_604e519f","line":448,"updated":"2026-07-20 19:34:18.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6e06917634cdd48f1e5e1723dfd5967fb5d42ad2","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":448,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":449,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":450,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":451,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":14,"id":"75f64eca_35608ba7","line":448,"updated":"2026-07-20 19:34:18.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"491bfb9777f5f9efecb235450c76ac979c4a3df5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"49ccd2d5b1fb3972f31e7ef5b61b37a0a8cb2ef9","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":15,"id":"2f282dea_9ebf7c3c","line":126,"updated":"2026-07-23 15:49:41.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"2c2e817e7db17defee762a55e121245d14790746"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"49ccd2d5b1fb3972f31e7ef5b61b37a0a8cb2ef9","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":15,"id":"4cbceedd_896e91d7","line":126,"updated":"2026-07-23 15:49:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"2c2e817e7db17defee762a55e121245d14790746"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"49ccd2d5b1fb3972f31e7ef5b61b37a0a8cb2ef9","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        \"\"\"Container with SecurityOpt matching the generated default\"\"\""},{"line_number":361,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027test_container\u0027)"},{"line_number":362,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":363,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_test_container_t\u0027]"},{"line_number":364,"context_line":"        self.assertIsNone(dw.compare_security_opt(container_info))"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"0201ae58_314c4196","line":363,"updated":"2026-07-23 15:49:41.000000000","message":"linters: E501 line too long (91 \u003e 79 characters)","commit_id":"2c2e817e7db17defee762a55e121245d14790746"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"49ccd2d5b1fb3972f31e7ef5b61b37a0a8cb2ef9","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        \"\"\"Container with SecurityOpt matching the generated default\"\"\""},{"line_number":361,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027test_container\u0027)"},{"line_number":362,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":363,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_test_container_t\u0027]"},{"line_number":364,"context_line":"        self.assertIsNone(dw.compare_security_opt(container_info))"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"67acfc08_df2ad48b","line":363,"updated":"2026-07-23 15:49:41.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"2c2e817e7db17defee762a55e121245d14790746"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"49ccd2d5b1fb3972f31e7ef5b61b37a0a8cb2ef9","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        })"},{"line_number":428,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":429,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":430,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":431,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":432,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"81f9e247_694aea90","line":430,"updated":"2026-07-23 15:49:41.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"2c2e817e7db17defee762a55e121245d14790746"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"49ccd2d5b1fb3972f31e7ef5b61b37a0a8cb2ef9","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        })"},{"line_number":428,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":429,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":430,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":431,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":432,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"a8148db0_c4063afc","line":430,"updated":"2026-07-23 15:49:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"2c2e817e7db17defee762a55e121245d14790746"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"49ccd2d5b1fb3972f31e7ef5b61b37a0a8cb2ef9","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":442,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":443,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":444,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5c40760e_7c55eedd","line":444,"updated":"2026-07-23 15:49:41.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"2c2e817e7db17defee762a55e121245d14790746"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"49ccd2d5b1fb3972f31e7ef5b61b37a0a8cb2ef9","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":442,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":443,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":444,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"a9a98872_a2b96b96","line":444,"updated":"2026-07-23 15:49:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"2c2e817e7db17defee762a55e121245d14790746"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"49ccd2d5b1fb3972f31e7ef5b61b37a0a8cb2ef9","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":448,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":449,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":450,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":451,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":15,"id":"ee2a2e12_9d3525b1","line":448,"updated":"2026-07-23 15:49:41.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"2c2e817e7db17defee762a55e121245d14790746"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"49ccd2d5b1fb3972f31e7ef5b61b37a0a8cb2ef9","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":448,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":449,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":450,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":451,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":15,"id":"d96c6731_cbe04a8b","line":448,"updated":"2026-07-23 15:49:41.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"2c2e817e7db17defee762a55e121245d14790746"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":16,"id":"46eb57ed_7a902dbb","line":126,"updated":"2026-07-23 23:13:16.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":16,"id":"89234f0b_7ef9bcc8","line":126,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":192,"context_line":"    def test_label_contains_container_name_not_service_name(self, mock_get):"},{"line_number":193,"context_line":"        \"\"\"Label must use the exact container name, preserving underscores.\"\"\""},{"line_number":194,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_neutron_openvswitch_agent_t\u0027])"},{"line_number":195,"context_line":"        self.fake_data[\u0027params\u0027][\u0027name\u0027] \u003d \u0027neutron_openvswitch_agent\u0027"},{"line_number":196,"context_line":"        self.fake_data[\u0027params\u0027][\u0027security_opt\u0027] \u003d None"},{"line_number":197,"context_line":"        self.dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"a0698b44_80ad2021","line":194,"updated":"2026-07-23 23:13:16.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":192,"context_line":"    def test_label_contains_container_name_not_service_name(self, mock_get):"},{"line_number":193,"context_line":"        \"\"\"Label must use the exact container name, preserving underscores.\"\"\""},{"line_number":194,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_neutron_openvswitch_agent_t\u0027])"},{"line_number":195,"context_line":"        self.fake_data[\u0027params\u0027][\u0027name\u0027] \u003d \u0027neutron_openvswitch_agent\u0027"},{"line_number":196,"context_line":"        self.fake_data[\u0027params\u0027][\u0027security_opt\u0027] \u003d None"},{"line_number":197,"context_line":"        self.dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"7101251e_390312f0","line":194,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_test_container_t\u0027])"},{"line_number":371,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027test_container\u0027)"},{"line_number":372,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":373,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_test_container_t\u0027]"},{"line_number":374,"context_line":"        self.assertIsNone(dw.compare_security_opt(container_info))"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"0a7220d8_74621b05","line":373,"updated":"2026-07-23 23:13:16.000000000","message":"linters: E501 line too long (91 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_test_container_t\u0027])"},{"line_number":371,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027test_container\u0027)"},{"line_number":372,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":373,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_test_container_t\u0027]"},{"line_number":374,"context_line":"        self.assertIsNone(dw.compare_security_opt(container_info))"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3ed4677b_1ad3bd68","line":373,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        })"},{"line_number":438,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":439,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":440,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":441,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":442,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"53d29e87_6b45a03a","line":440,"updated":"2026-07-23 23:13:16.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        })"},{"line_number":438,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":439,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":440,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":441,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":442,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"daa37caa_23b81f36","line":440,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":452,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":453,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":454,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"e20f35dc_cdba7dd6","line":454,"updated":"2026-07-23 23:13:16.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":452,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":453,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":454,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"376b3423_6bcb17a0","line":454,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":458,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":459,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":460,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":461,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":16,"id":"642e62da_a9ff40df","line":458,"updated":"2026-07-23 23:13:16.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":458,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":459,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":460,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":461,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":16,"id":"37d7b300_c32cd19c","line":458,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":555,"context_line":"    def test_seinfo_unavailable_falls_back_to_label(self, mock_get):"},{"line_number":556,"context_line":"        \"\"\"When seinfo is unavailable (returns None), apply label optimistically.\"\"\""},{"line_number":557,"context_line":"        mock_get.return_value \u003d None"},{"line_number":558,"context_line":"        dw \u003d self._get_docker_worker(\u0027nova_api\u0027)"},{"line_number":559,"context_line":"        self.assertEqual(dw._effective_security_opt(),"}],"source_content_type":"text/x-python","patch_set":16,"id":"d4c12081_64cc28ea","line":556,"updated":"2026-07-23 23:13:16.000000000","message":"linters: E501 line too long (84 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":555,"context_line":"    def test_seinfo_unavailable_falls_back_to_label(self, mock_get):"},{"line_number":556,"context_line":"        \"\"\"When seinfo is unavailable (returns None), apply label optimistically.\"\"\""},{"line_number":557,"context_line":"        mock_get.return_value \u003d None"},{"line_number":558,"context_line":"        dw \u003d self._get_docker_worker(\u0027nova_api\u0027)"},{"line_number":559,"context_line":"        self.assertEqual(dw._effective_security_opt(),"}],"source_content_type":"text/x-python","patch_set":16,"id":"2940cecb_3775d459","line":556,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"2a2ce51d_577199f1","line":564,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"305ba15a_ab2fdbb4","line":564,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"d316d3a1_486e2e0e","line":564,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7cf78991_bf9ab648","line":564,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"c06ab57b_5735982f","line":565,"updated":"2026-07-23 23:13:16.000000000","message":"linters: E501 line too long (84 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"569da470_cc889deb","line":565,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"71151f81_3f8ba768","line":565,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"76451e5e_254f5a91","line":565,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"f1409b88_66040c2d","line":565,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"126579bb_f57e5de4","line":565,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":569,"context_line":"        # Container already has a label, but we can\u0027t apply one for neutron_server"},{"line_number":570,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d ["},{"line_number":571,"context_line":"            \u0027label\u003dtype:kolla_neutron_server_t\u0027]"},{"line_number":572,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"}],"source_content_type":"text/x-python","patch_set":16,"id":"82069ebe_8d2f6cd0","line":569,"updated":"2026-07-23 23:13:16.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":569,"context_line":"        # Container already has a label, but we can\u0027t apply one for neutron_server"},{"line_number":570,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d ["},{"line_number":571,"context_line":"            \u0027label\u003dtype:kolla_neutron_server_t\u0027]"},{"line_number":572,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"}],"source_content_type":"text/x-python","patch_set":16,"id":"93eb02ca_19248576","line":569,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ea3f5ef7_61520e3f","line":576,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"4e9ea575_212c811f","line":576,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"49a40eba_94ca6824","line":576,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"e549b4c3_cd1ab525","line":576,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"6d0eb76e_74de2ec2","line":577,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"e10b06ba_b4d3767d","line":577,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"38456f12_fc2bab93","line":577,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"b23e3cb2_ec9ccfc9","line":577,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"88cb69fc_720f0610","line":586,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7ffb9cba_5963d3c3","line":586,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"aff9d13e_9d85f8d9","line":586,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1fb7ef1b_8e045ce6","line":586,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"622bb2e3_087aa64f","line":587,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"f7bb37d9_c1118129","line":587,"updated":"2026-07-23 23:13:16.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"c76f9341_91637517","line":587,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b245af5bf51d26ad5e59fd895bb1621bcb971c7","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ca44eab0_56a9bc31","line":587,"updated":"2026-07-23 23:13:16.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"749e2c9cf5785efd93bae52acfbe3bc46b97b521"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":17,"id":"bdb765e0_cacf40e3","line":126,"updated":"2026-07-29 13:00:47.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":17,"id":"c644f74f_a9a8ee20","line":126,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":192,"context_line":"    def test_label_contains_container_name_not_service_name(self, mock_get):"},{"line_number":193,"context_line":"        \"\"\"Label must use the exact container name, preserving underscores.\"\"\""},{"line_number":194,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_neutron_openvswitch_agent_t\u0027])"},{"line_number":195,"context_line":"        self.fake_data[\u0027params\u0027][\u0027name\u0027] \u003d \u0027neutron_openvswitch_agent\u0027"},{"line_number":196,"context_line":"        self.fake_data[\u0027params\u0027][\u0027security_opt\u0027] \u003d None"},{"line_number":197,"context_line":"        self.dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"acea5d75_d3d4f17a","line":194,"updated":"2026-07-29 13:00:47.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":192,"context_line":"    def test_label_contains_container_name_not_service_name(self, mock_get):"},{"line_number":193,"context_line":"        \"\"\"Label must use the exact container name, preserving underscores.\"\"\""},{"line_number":194,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_neutron_openvswitch_agent_t\u0027])"},{"line_number":195,"context_line":"        self.fake_data[\u0027params\u0027][\u0027name\u0027] \u003d \u0027neutron_openvswitch_agent\u0027"},{"line_number":196,"context_line":"        self.fake_data[\u0027params\u0027][\u0027security_opt\u0027] \u003d None"},{"line_number":197,"context_line":"        self.dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"d920509b_09b27d36","line":194,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_test_container_t\u0027])"},{"line_number":371,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027test_container\u0027)"},{"line_number":372,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":373,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_test_container_t\u0027]"},{"line_number":374,"context_line":"        self.assertIsNone(dw.compare_security_opt(container_info))"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"14f5ea7c_859ca7ea","line":373,"updated":"2026-07-29 13:00:47.000000000","message":"linters: E501 line too long (91 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_test_container_t\u0027])"},{"line_number":371,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027test_container\u0027)"},{"line_number":372,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":373,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_test_container_t\u0027]"},{"line_number":374,"context_line":"        self.assertIsNone(dw.compare_security_opt(container_info))"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"c1dd5462_010e3425","line":373,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        })"},{"line_number":438,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":439,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":440,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":441,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":442,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"20cedd47_acb51b42","line":440,"updated":"2026-07-29 13:00:47.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        })"},{"line_number":438,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":439,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":440,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":441,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":442,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3b2d9740_c67b5d27","line":440,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":452,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":453,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":454,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"c59d9500_012f08cd","line":454,"updated":"2026-07-29 13:00:47.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":452,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":453,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":454,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1ab75d3f_41d34493","line":454,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":458,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":459,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":460,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":461,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":17,"id":"398e64b1_cdfad900","line":458,"updated":"2026-07-29 13:00:47.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":458,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":459,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":460,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":461,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":17,"id":"b343a747_8e898aa0","line":458,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":555,"context_line":"    def test_seinfo_unavailable_falls_back_to_label(self, mock_get):"},{"line_number":556,"context_line":"        \"\"\"When seinfo is unavailable (returns None), apply label optimistically.\"\"\""},{"line_number":557,"context_line":"        mock_get.return_value \u003d None"},{"line_number":558,"context_line":"        dw \u003d self._get_docker_worker(\u0027nova_api\u0027)"},{"line_number":559,"context_line":"        self.assertEqual(dw._effective_security_opt(),"}],"source_content_type":"text/x-python","patch_set":17,"id":"52c0799d_230eac25","line":556,"updated":"2026-07-29 13:00:47.000000000","message":"linters: E501 line too long (84 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":555,"context_line":"    def test_seinfo_unavailable_falls_back_to_label(self, mock_get):"},{"line_number":556,"context_line":"        \"\"\"When seinfo is unavailable (returns None), apply label optimistically.\"\"\""},{"line_number":557,"context_line":"        mock_get.return_value \u003d None"},{"line_number":558,"context_line":"        dw \u003d self._get_docker_worker(\u0027nova_api\u0027)"},{"line_number":559,"context_line":"        self.assertEqual(dw._effective_security_opt(),"}],"source_content_type":"text/x-python","patch_set":17,"id":"090b0701_e4a2e013","line":556,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"d73a348b_480558fd","line":564,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"2fc76dce_7beb847e","line":564,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"833bc7fe_b27011e0","line":564,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"6a077607_b9046936","line":564,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"93f22490_a7e69a6c","line":565,"updated":"2026-07-29 13:00:47.000000000","message":"linters: E501 line too long (84 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"f9b99e46_a9ac53bd","line":565,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"ca8637f6_ac5e105d","line":565,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"083078f5_9145dde2","line":565,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"cc1346fe_5ee5393e","line":565,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"4f762ebe_a91bdce0","line":565,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":569,"context_line":"        # Container already has a label, but we can\u0027t apply one for neutron_server"},{"line_number":570,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d ["},{"line_number":571,"context_line":"            \u0027label\u003dtype:kolla_neutron_server_t\u0027]"},{"line_number":572,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"}],"source_content_type":"text/x-python","patch_set":17,"id":"2e56a20b_d93883fd","line":569,"updated":"2026-07-29 13:00:47.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":569,"context_line":"        # Container already has a label, but we can\u0027t apply one for neutron_server"},{"line_number":570,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d ["},{"line_number":571,"context_line":"            \u0027label\u003dtype:kolla_neutron_server_t\u0027]"},{"line_number":572,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"}],"source_content_type":"text/x-python","patch_set":17,"id":"509dc9fa_3dbce2c9","line":569,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"39e851cc_909ee2bd","line":576,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"eb4baeec_681c5e6f","line":576,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"8a6b34b7_55fb4665","line":576,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"40bbe0d7_9bb6401c","line":576,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"841c5d02_54cbeba3","line":577,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"cdafb88f_ea78ef69","line":577,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"ae130eb8_8ffa2299","line":577,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"e81f5fcf_e369c80c","line":577,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3b4aed22_79359452","line":586,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3c69615b_84d1ec3a","line":586,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"0d4a5f2e_b70f8f7b","line":586,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"0315a8c2_3bb7e7b0","line":586,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"345ddcf0_ba298129","line":587,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"f0fac2f4_6f7b33d3","line":587,"updated":"2026-07-29 13:00:47.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ee79ab63_0e7656f8","line":587,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c2f23a27da81ba35010df600803a8de60ae7bbd6","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"5e2acb93_95501b45","line":587,"updated":"2026-07-29 13:00:47.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"4976bc3ca35639f3b8fc360fd510ba5b4c162bc7"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":18,"id":"429d7a48_f0f7734d","line":126,"updated":"2026-08-13 22:24:28.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":18,"id":"ac9f781b_ffc868c3","line":126,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":192,"context_line":"    def test_label_contains_container_name_not_service_name(self, mock_get):"},{"line_number":193,"context_line":"        \"\"\"Label must use the exact container name, preserving underscores.\"\"\""},{"line_number":194,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_neutron_openvswitch_agent_t\u0027])"},{"line_number":195,"context_line":"        self.fake_data[\u0027params\u0027][\u0027name\u0027] \u003d \u0027neutron_openvswitch_agent\u0027"},{"line_number":196,"context_line":"        self.fake_data[\u0027params\u0027][\u0027security_opt\u0027] \u003d None"},{"line_number":197,"context_line":"        self.dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"16c5a399_b61dfff5","line":194,"updated":"2026-08-13 22:24:28.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":192,"context_line":"    def test_label_contains_container_name_not_service_name(self, mock_get):"},{"line_number":193,"context_line":"        \"\"\"Label must use the exact container name, preserving underscores.\"\"\""},{"line_number":194,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_neutron_openvswitch_agent_t\u0027])"},{"line_number":195,"context_line":"        self.fake_data[\u0027params\u0027][\u0027name\u0027] \u003d \u0027neutron_openvswitch_agent\u0027"},{"line_number":196,"context_line":"        self.fake_data[\u0027params\u0027][\u0027security_opt\u0027] \u003d None"},{"line_number":197,"context_line":"        self.dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"b8432c5b_c1a0ce87","line":194,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_test_container_t\u0027])"},{"line_number":371,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027test_container\u0027)"},{"line_number":372,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":373,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_test_container_t\u0027]"},{"line_number":374,"context_line":"        self.assertIsNone(dw.compare_security_opt(container_info))"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"e0b9880e_67627db3","line":373,"updated":"2026-08-13 22:24:28.000000000","message":"linters: E501 line too long (91 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_test_container_t\u0027])"},{"line_number":371,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027test_container\u0027)"},{"line_number":372,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":373,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_test_container_t\u0027]"},{"line_number":374,"context_line":"        self.assertIsNone(dw.compare_security_opt(container_info))"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"4e09b837_983f2054","line":373,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        })"},{"line_number":438,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":439,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":440,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":441,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":442,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"81517dd9_48eb9fdc","line":440,"updated":"2026-08-13 22:24:28.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        })"},{"line_number":438,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":439,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":440,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":441,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":442,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1c69d28b_cf6b420c","line":440,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":452,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":453,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":454,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"37c64c47_6718ce1c","line":454,"updated":"2026-08-13 22:24:28.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":452,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":453,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":454,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"11a73df4_972b9597","line":454,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":458,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":459,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":460,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":461,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a59d28e_414f4f6e","line":458,"updated":"2026-08-13 22:24:28.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":458,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":459,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":460,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":461,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":18,"id":"c927ac2b_329dfbfa","line":458,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":555,"context_line":"    def test_seinfo_unavailable_falls_back_to_label(self, mock_get):"},{"line_number":556,"context_line":"        \"\"\"When seinfo is unavailable (returns None), apply label optimistically.\"\"\""},{"line_number":557,"context_line":"        mock_get.return_value \u003d None"},{"line_number":558,"context_line":"        dw \u003d self._get_docker_worker(\u0027nova_api\u0027)"},{"line_number":559,"context_line":"        self.assertEqual(dw._effective_security_opt(),"}],"source_content_type":"text/x-python","patch_set":18,"id":"defc792d_41f21c85","line":556,"updated":"2026-08-13 22:24:28.000000000","message":"linters: E501 line too long (84 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":555,"context_line":"    def test_seinfo_unavailable_falls_back_to_label(self, mock_get):"},{"line_number":556,"context_line":"        \"\"\"When seinfo is unavailable (returns None), apply label optimistically.\"\"\""},{"line_number":557,"context_line":"        mock_get.return_value \u003d None"},{"line_number":558,"context_line":"        dw \u003d self._get_docker_worker(\u0027nova_api\u0027)"},{"line_number":559,"context_line":"        self.assertEqual(dw._effective_security_opt(),"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fc8dfed_2f55d41b","line":556,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"dc553e57_01277ce1","line":564,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"646328be_15d7bad5","line":564,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"942710ab_afdd0671","line":564,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ea294d7f_a88af7d7","line":564,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"69929037_6d9c3822","line":565,"updated":"2026-08-13 22:24:28.000000000","message":"linters: E501 line too long (84 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"f1bca73f_180a8b3f","line":565,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"75423eb3_d9c12958","line":565,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"9d8b774c_1220dc29","line":565,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"68358234_07d8e44d","line":565,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"d5b2c5cd_0e05e026","line":565,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":569,"context_line":"        # Container already has a label, but we can\u0027t apply one for neutron_server"},{"line_number":570,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d ["},{"line_number":571,"context_line":"            \u0027label\u003dtype:kolla_neutron_server_t\u0027]"},{"line_number":572,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"}],"source_content_type":"text/x-python","patch_set":18,"id":"88f939ed_fd40c2e0","line":569,"updated":"2026-08-13 22:24:28.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":569,"context_line":"        # Container already has a label, but we can\u0027t apply one for neutron_server"},{"line_number":570,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d ["},{"line_number":571,"context_line":"            \u0027label\u003dtype:kolla_neutron_server_t\u0027]"},{"line_number":572,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"}],"source_content_type":"text/x-python","patch_set":18,"id":"7d98c447_bb8b0e91","line":569,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3da6300e_f3aa7658","line":576,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"896358ae_812789c5","line":576,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5db01324_667fc67c","line":576,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"01594b74_b08a80bb","line":576,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"57b7e67a_f47bed89","line":577,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"342bb791_50313960","line":577,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"448045cc_37333c23","line":577,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a801e11_20f8a64b","line":577,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5197b623_3676ba79","line":586,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"4ca45ee6_da42e099","line":586,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"f426f7d0_82d4c591","line":586,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3d16e416_6321646d","line":586,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a24c787_47ab72d2","line":587,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"7de433a2_3bcc76e4","line":587,"updated":"2026-08-13 22:24:28.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"62e60c62_88978a8b","line":587,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"16b021003d6fdb2b54334b7692a75ed76cddd96e","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"46d7af65_2f37246c","line":587,"updated":"2026-08-13 22:24:28.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"92a901a5f0e6d5a806c67be81aa83c068d7824b5"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":20,"id":"7e22cb13_b6eb17e6","line":126,"updated":"2026-08-20 20:32:20.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    for k, v in module.params.items():"},{"line_number":124,"context_line":"        if v is None:"},{"line_number":125,"context_line":"            if k in common_options_defaults:"},{"line_number":126,"context_line":"                if k not in new_args and common_options_defaults[k] is not None:"},{"line_number":127,"context_line":"                    new_args[k] \u003d common_options_defaults[k]"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            new_args[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":20,"id":"4fc507e3_d0d411a2","line":126,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":192,"context_line":"    def test_label_contains_container_name_not_service_name(self, mock_get):"},{"line_number":193,"context_line":"        \"\"\"Label must use the exact container name, preserving underscores.\"\"\""},{"line_number":194,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_neutron_openvswitch_agent_t\u0027])"},{"line_number":195,"context_line":"        self.fake_data[\u0027params\u0027][\u0027name\u0027] \u003d \u0027neutron_openvswitch_agent\u0027"},{"line_number":196,"context_line":"        self.fake_data[\u0027params\u0027][\u0027security_opt\u0027] \u003d None"},{"line_number":197,"context_line":"        self.dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a3596b2_a3c01400","line":194,"updated":"2026-08-20 20:32:20.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":192,"context_line":"    def test_label_contains_container_name_not_service_name(self, mock_get):"},{"line_number":193,"context_line":"        \"\"\"Label must use the exact container name, preserving underscores.\"\"\""},{"line_number":194,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_neutron_openvswitch_agent_t\u0027])"},{"line_number":195,"context_line":"        self.fake_data[\u0027params\u0027][\u0027name\u0027] \u003d \u0027neutron_openvswitch_agent\u0027"},{"line_number":196,"context_line":"        self.fake_data[\u0027params\u0027][\u0027security_opt\u0027] \u003d None"},{"line_number":197,"context_line":"        self.dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"844580e4_95669a22","line":194,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_test_container_t\u0027])"},{"line_number":371,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027test_container\u0027)"},{"line_number":372,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":373,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_test_container_t\u0027]"},{"line_number":374,"context_line":"        self.assertIsNone(dw.compare_security_opt(container_info))"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"499b3cbd_e4801ed2","line":373,"updated":"2026-08-20 20:32:20.000000000","message":"linters: E501 line too long (91 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_test_container_t\u0027])"},{"line_number":371,"context_line":"        dw \u003d self._get_worker(name\u003d\u0027test_container\u0027)"},{"line_number":372,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":373,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_test_container_t\u0027]"},{"line_number":374,"context_line":"        self.assertIsNone(dw.compare_security_opt(container_info))"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"8d8fd90c_67226a25","line":373,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        })"},{"line_number":438,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":439,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":440,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":441,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":442,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"a9a436ac_b12a4d7c","line":440,"updated":"2026-08-20 20:32:20.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        })"},{"line_number":438,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":439,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":440,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":441,"context_line":"        # privileged → comparison skipped, no diff"},{"line_number":442,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"389da583_575da35a","line":440,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":452,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":453,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":454,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"419b612c_0dd99eb5","line":454,"updated":"2026-08-20 20:32:20.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        dw \u003d get_DockerWorker(self.fake_data[\u0027params\u0027])"},{"line_number":452,"context_line":"        # Container has a different SELinux label → should detect diff"},{"line_number":453,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":454,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d [\u0027label\u003dtype:kolla_old_t\u0027]"},{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"a759ebf0_debaf918","line":454,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":458,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":459,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":460,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":461,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":20,"id":"76258698_75f8fcf0","line":458,"updated":"2026-08-20 20:32:20.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        self.assertTrue(dw.compare_security_opt(container_info))"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def test_build_host_config_omits_security_opt_when_privileged(self):"},{"line_number":458,"context_line":"        \"\"\"When SELinux is disabled (privileged\u003dTrue), security_opt is omitted.\"\"\""},{"line_number":459,"context_line":"        self.fake_data[\u0027params\u0027].update({"},{"line_number":460,"context_line":"            \u0027name\u0027: \u0027nova_compute\u0027,"},{"line_number":461,"context_line":"            \u0027privileged\u0027: True,"}],"source_content_type":"text/x-python","patch_set":20,"id":"d02f6034_34db36cc","line":458,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":555,"context_line":"    def test_seinfo_unavailable_falls_back_to_label(self, mock_get):"},{"line_number":556,"context_line":"        \"\"\"When seinfo is unavailable (returns None), apply label optimistically.\"\"\""},{"line_number":557,"context_line":"        mock_get.return_value \u003d None"},{"line_number":558,"context_line":"        dw \u003d self._get_docker_worker(\u0027nova_api\u0027)"},{"line_number":559,"context_line":"        self.assertEqual(dw._effective_security_opt(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"1c74b891_16624a50","line":556,"updated":"2026-08-20 20:32:20.000000000","message":"linters: E501 line too long (84 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":555,"context_line":"    def test_seinfo_unavailable_falls_back_to_label(self, mock_get):"},{"line_number":556,"context_line":"        \"\"\"When seinfo is unavailable (returns None), apply label optimistically.\"\"\""},{"line_number":557,"context_line":"        mock_get.return_value \u003d None"},{"line_number":558,"context_line":"        dw \u003d self._get_docker_worker(\u0027nova_api\u0027)"},{"line_number":559,"context_line":"        self.assertEqual(dw._effective_security_opt(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"0da419a6_b97fd479","line":556,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"c9bd6337_e31e921f","line":564,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"ebed8c71_09bccf43","line":564,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"ad72f4f3_6d01e805","line":564,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"79840e4e_07ea9c7e","line":564,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"a519dfde_d1c198b0","line":565,"updated":"2026-08-20 20:32:20.000000000","message":"linters: E501 line too long (84 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"f7ee819c_b2e7e286","line":565,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"b4dff8fb_f18fc346","line":565,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"fde2e0aa_675963f5","line":565,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"07bb180e_3a96edcd","line":565,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":562,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":563,"context_line":"    def test_compare_no_diff_when_type_not_loaded(self, mock_get):"},{"line_number":564,"context_line":"        \"\"\"When type not loaded, effective is []; compare against current label"},{"line_number":565,"context_line":"        that exists on the container should NOT report a diff (we cannot fix it).\"\"\""},{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"86f406a1_ec6cc271","line":565,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":569,"context_line":"        # Container already has a label, but we can\u0027t apply one for neutron_server"},{"line_number":570,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d ["},{"line_number":571,"context_line":"            \u0027label\u003dtype:kolla_neutron_server_t\u0027]"},{"line_number":572,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"}],"source_content_type":"text/x-python","patch_set":20,"id":"2c971ab9_44589808","line":569,"updated":"2026-08-20 20:32:20.000000000","message":"linters: E501 line too long (82 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":567,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":568,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"},{"line_number":569,"context_line":"        # Container already has a label, but we can\u0027t apply one for neutron_server"},{"line_number":570,"context_line":"        container_info[\u0027HostConfig\u0027][\u0027SecurityOpt\u0027] \u003d ["},{"line_number":571,"context_line":"            \u0027label\u003dtype:kolla_neutron_server_t\u0027]"},{"line_number":572,"context_line":"        self.assertFalse(dw.compare_security_opt(container_info))"}],"source_content_type":"text/x-python","patch_set":20,"id":"ebfb3389_fd780c77","line":569,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fc425a3_daffa1f9","line":576,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f407798_bfc9a9ca","line":576,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a6104b0_5c84fc88","line":576,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3142884d_8a9f9bdd","line":576,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"90ae1b55_aaff60c8","line":577,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"696f4c2d_68593d0b","line":577,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"4039498c_3085c87d","line":577,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":575,"context_line":"    def test_compare_removes_label_when_type_unloaded(self, mock_get):"},{"line_number":576,"context_line":"        \"\"\"When type not loaded, effective is [], and container has no label:"},{"line_number":577,"context_line":"        no diff (already unlabeled).\"\"\""},{"line_number":578,"context_line":"        mock_get.return_value \u003d frozenset([\u0027kolla_keystone_t\u0027])"},{"line_number":579,"context_line":"        dw \u003d self._get_docker_worker(\u0027neutron_server\u0027)"},{"line_number":580,"context_line":"        container_info \u003d copy.deepcopy(FAKE_DATA[\u0027container_inspect\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"8a749c80_ad20538c","line":577,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"973cd888_b0f045d9","line":586,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1afc180e_fcfbf361","line":586,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"58c0248f_99b55780","line":586,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"db4968b6_58d0a936","line":586,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"e75c48aa_2a9d3026","line":587,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"e61ec5da_1edb0611","line":587,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"d58349b6_a52477b2","line":587,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @mock.patch.object(dwm.ContainerWorker, \u0027_get_kolla_selinux_types\u0027)"},{"line_number":585,"context_line":"    def test_compare_detects_diff_when_loaded_type_differs(self, mock_get):"},{"line_number":586,"context_line":"        \"\"\"When both current and desired types are loaded but differ,"},{"line_number":587,"context_line":"        report a diff.\"\"\""},{"line_number":588,"context_line":"        mock_get.return_value \u003d frozenset(["},{"line_number":589,"context_line":"            \u0027kolla_keystone_t\u0027,"},{"line_number":590,"context_line":"            \u0027kolla_keystone_new_t\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"93c6bc4e_0eb4fde4","line":587,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"}],"tests/test_selinux_kolla_denials.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# kolla-ansible/tests/test_selinux_kolla_denials.py"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a1ca915_103c5e76","line":1,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H102: Apache 2.0 license header not found","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# kolla-ansible/tests/test_selinux_kolla_denials.py"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"}],"source_content_type":"text/x-python","patch_set":20,"id":"747509fb_cd2323b8","line":1,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H102: Apache 2.0 license header not found","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"},{"line_number":5,"context_line":"import paramiko"},{"line_number":6,"context_line":"from datetime import datetime, timedelta"},{"line_number":7,"context_line":"import logging"},{"line_number":8,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"24ba2718_81b5c051","line":5,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H306: imports not in alphabetical order (unittest, paramiko)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"},{"line_number":5,"context_line":"import paramiko"},{"line_number":6,"context_line":"from datetime import datetime, timedelta"},{"line_number":7,"context_line":"import logging"},{"line_number":8,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"f8e758b4_9c13e0a8","line":5,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H306: imports not in alphabetical order (unittest, paramiko)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"},{"line_number":5,"context_line":"import paramiko"},{"line_number":6,"context_line":"from datetime import datetime, timedelta"},{"line_number":7,"context_line":"import logging"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":20,"id":"0ff33091_1da1519e","line":6,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H301: one import per line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"},{"line_number":5,"context_line":"import paramiko"},{"line_number":6,"context_line":"from datetime import datetime, timedelta"},{"line_number":7,"context_line":"import logging"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9dc3e711_fa629b42","line":6,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H301: one import per line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"33f39c69_dec9e3c3","line":13,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"03d35d47_37be22a8","line":13,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9ce72eca_598dbe77","line":13,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"54dc4035_19cb67d7","line":13,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":20,"id":"f088d067_29cc29e5","line":14,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":20,"id":"d9dd14b6_a56046d0","line":14,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":20,"id":"4e111de8_48505991","line":14,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":20,"id":"bf85c325_58b3c8f0","line":14,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":20,"id":"90a90579_565d3ea3","line":15,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":20,"id":"47dbad4d_0e79c287","line":15,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7842bfe4_cccfe3f2","line":15,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9e227324_a2af66ac","line":15,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"60ff8d1c_64978fb9","line":19,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1cbdb34f_7788e4c1","line":19,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"        cls.enabled \u003d os.environ.get(\u0027SELINUX_TEST_ENABLED\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"c07e6a9e_32d22f9e","line":20,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"        cls.enabled \u003d os.environ.get(\u0027SELINUX_TEST_ENABLED\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"c6e96f8e_27080728","line":20,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"        cls.enabled \u003d os.environ.get(\u0027SELINUX_TEST_ENABLED\u0027,"},{"line_number":24,"context_line":"                                     \u0027true\u0027).lower() \u003d\u003d \u0027true\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"9ebc04d4_be4afa69","line":21,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"        cls.enabled \u003d os.environ.get(\u0027SELINUX_TEST_ENABLED\u0027,"},{"line_number":24,"context_line":"                                     \u0027true\u0027).lower() \u003d\u003d \u0027true\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"1b71fc53_6a29b215","line":21,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        return status"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":20,"id":"e2291aeb_47d85c81","line":84,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        return status"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":20,"id":"331947ec_b8e0f107","line":84,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        return status"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":20,"id":"6adae4ac_b117bba3","line":84,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        return status"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":20,"id":"873fb7f6_7d76b873","line":84,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"}],"source_content_type":"text/x-python","patch_set":20,"id":"12b07900_5a98831c","line":85,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"}],"source_content_type":"text/x-python","patch_set":20,"id":"0f911bbf_8bda72f0","line":85,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"}],"source_content_type":"text/x-python","patch_set":20,"id":"baad4f04_f5b9a267","line":85,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"}],"source_content_type":"text/x-python","patch_set":20,"id":"84270771_2674ee25","line":85,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"b332ff66_6360e3f0","line":86,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"2fde981f_1fadf65f","line":86,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"97c51d78_84b0f32f","line":86,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"b32d9b61_c05cfcd6","line":86,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":20,"id":"4267b7c1_72552f71","line":87,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":20,"id":"45efca7f_ccfba700","line":87,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":20,"id":"5c756d9c_2d9dd570","line":87,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":20,"id":"37c6a598_f2c4a3d1","line":87,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"}],"source_content_type":"text/x-python","patch_set":20,"id":"f9a08729_5d2046a8","line":88,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"}],"source_content_type":"text/x-python","patch_set":20,"id":"c5b5b12a_26085ffa","line":88,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"}],"source_content_type":"text/x-python","patch_set":20,"id":"2fbeef3b_684d68af","line":88,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"}],"source_content_type":"text/x-python","patch_set":20,"id":"efca5d3b_1487ce43","line":88,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"bccfd502_999e06ac","line":89,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"00dd7429_891bdbc9","line":89,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"d9240561_91e276a1","line":89,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"c6b93624_e312f239","line":89,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"b2eecd8a_c49b1fcf","line":90,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"36e43a9d_092f6403","line":90,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"053dfd23_28c2558c","line":90,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"06607316_7e9482fa","line":90,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"}],"source_content_type":"text/x-python","patch_set":20,"id":"27c34020_38377460","line":91,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"}],"source_content_type":"text/x-python","patch_set":20,"id":"da66250a_a8f4b73c","line":91,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"}],"source_content_type":"text/x-python","patch_set":20,"id":"eaefce14_65427b0c","line":91,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"}],"source_content_type":"text/x-python","patch_set":20,"id":"86d900a1_55805e4c","line":91,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"},{"line_number":95,"context_line":"        return (target_time.strftime(\"%x\"),"}],"source_content_type":"text/x-python","patch_set":20,"id":"229dbf90_9ed9f9ed","line":92,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"},{"line_number":95,"context_line":"        return (target_time.strftime(\"%x\"),"}],"source_content_type":"text/x-python","patch_set":20,"id":"063817e5_767f1320","line":92,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"},{"line_number":95,"context_line":"        return (target_time.strftime(\"%x\"),"}],"source_content_type":"text/x-python","patch_set":20,"id":"856c13e4_afa5d003","line":92,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"},{"line_number":95,"context_line":"        return (target_time.strftime(\"%x\"),"}],"source_content_type":"text/x-python","patch_set":20,"id":"8048b37e_92d41a52","line":92,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                target_time.strftime(\"%H:%M:%S\"))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":20,"id":"6eeff3d7_0b65a8b0","line":99,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                target_time.strftime(\"%H:%M:%S\"))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":20,"id":"72c866be_0df751d7","line":99,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                target_time.strftime(\"%H:%M:%S\"))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":20,"id":"09936cb7_b2c8011c","line":99,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                target_time.strftime(\"%H:%M:%S\"))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":20,"id":"737d1188_f53822ff","line":99,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"}],"source_content_type":"text/x-python","patch_set":20,"id":"75a287fb_e17f5a90","line":100,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"}],"source_content_type":"text/x-python","patch_set":20,"id":"7c75629c_a33af881","line":100,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"}],"source_content_type":"text/x-python","patch_set":20,"id":"ef0a5bbb_80420d60","line":100,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ee7e79b_905092eb","line":100,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5bec1950_b81c9275","line":101,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"}],"source_content_type":"text/x-python","patch_set":20,"id":"04578bd4_834a95f8","line":101,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"}],"source_content_type":"text/x-python","patch_set":20,"id":"111fef83_ce6a9652","line":101,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"}],"source_content_type":"text/x-python","patch_set":20,"id":"f28321a1_f93b67dc","line":101,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"a5f41da7_b37e747f","line":102,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"e19b837b_f9c42512","line":102,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3d6d3631_196c0b2c","line":102,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"48681bc3_fb92d674","line":102,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":20,"id":"d0e11a93_534bcd71","line":103,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":20,"id":"492c9bec_a13fb1e2","line":103,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":20,"id":"de92be97_34099748","line":103,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":20,"id":"2769ede6_61160c0f","line":103,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"}],"source_content_type":"text/x-python","patch_set":20,"id":"b0f52cad_0f2d39c3","line":104,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"}],"source_content_type":"text/x-python","patch_set":20,"id":"96ef6347_ab81793d","line":104,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"}],"source_content_type":"text/x-python","patch_set":20,"id":"6135bec5_1195cb89","line":104,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"}],"source_content_type":"text/x-python","patch_set":20,"id":"fc9c04ab_e8cb122a","line":104,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"2bcaf70c_85a43132","line":105,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"1211056d_abf3bacc","line":105,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"0c66d9c3_a027eda0","line":105,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"4ad4e67d_e141e4d3","line":105,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"e181342b_6fc2170b","line":106,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"df386229_eace8272","line":106,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"e82916ac_b3754da6","line":106,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"83f4fffd_e40d77b9","line":106,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"}],"source_content_type":"text/x-python","patch_set":20,"id":"6ab0856e_5b093804","line":107,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"}],"source_content_type":"text/x-python","patch_set":20,"id":"ac002e7f_a1a5e3d3","line":107,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"}],"source_content_type":"text/x-python","patch_set":20,"id":"f9ae34ee_e4f4cca9","line":107,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"}],"source_content_type":"text/x-python","patch_set":20,"id":"cddbf7b6_9b3468ee","line":107,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"},{"line_number":111,"context_line":"            minutes_ago \u003d self.time_window_minutes"}],"source_content_type":"text/x-python","patch_set":20,"id":"ebf77c9c_5e39afa8","line":108,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"},{"line_number":111,"context_line":"            minutes_ago \u003d self.time_window_minutes"}],"source_content_type":"text/x-python","patch_set":20,"id":"f8ac07cf_bc46aca8","line":108,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"},{"line_number":111,"context_line":"            minutes_ago \u003d self.time_window_minutes"}],"source_content_type":"text/x-python","patch_set":20,"id":"7c87a9e7_e0c30873","line":108,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"},{"line_number":111,"context_line":"            minutes_ago \u003d self.time_window_minutes"}],"source_content_type":"text/x-python","patch_set":20,"id":"c16f138c_a1e79f6c","line":108,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        start_date, start_time \u003d self._get_time_window_string(minutes_ago)"},{"line_number":118,"context_line":"        LOG.info(f\"\"\"Querying audit logs"},{"line_number":119,"context_line":"                 from {start_date} {start_time} (last {minutes_ago} minutes)\"\"\")"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # Build the ausearch command. ausearch -ts takes the date and time as"},{"line_number":122,"context_line":"        # two separate arguments."}],"source_content_type":"text/x-python","patch_set":20,"id":"58c2998d_b3d1670b","line":119,"updated":"2026-08-20 20:32:20.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        start_date, start_time \u003d self._get_time_window_string(minutes_ago)"},{"line_number":118,"context_line":"        LOG.info(f\"\"\"Querying audit logs"},{"line_number":119,"context_line":"                 from {start_date} {start_time} (last {minutes_ago} minutes)\"\"\")"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # Build the ausearch command. ausearch -ts takes the date and time as"},{"line_number":122,"context_line":"        # two separate arguments."}],"source_content_type":"text/x-python","patch_set":20,"id":"eb263620_d801f901","line":119,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            # Filter for AVC denials whose source context is a kolla_ domain."},{"line_number":143,"context_line":"            denials \u003d []"},{"line_number":144,"context_line":"            for line in output.splitlines():"},{"line_number":145,"context_line":"                if \"kolla_\" in line and (\"scontext\u003d\" in line or \"svc\u003d\" in line):"},{"line_number":146,"context_line":"                    denials.append(line.strip())"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            if denials:"}],"source_content_type":"text/x-python","patch_set":20,"id":"09dc80e0_d0d5eb25","line":145,"updated":"2026-08-20 20:32:20.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            # Filter for AVC denials whose source context is a kolla_ domain."},{"line_number":143,"context_line":"            denials \u003d []"},{"line_number":144,"context_line":"            for line in output.splitlines():"},{"line_number":145,"context_line":"                if \"kolla_\" in line and (\"scontext\u003d\" in line or \"svc\u003d\" in line):"},{"line_number":146,"context_line":"                    denials.append(line.strip())"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            if denials:"}],"source_content_type":"text/x-python","patch_set":20,"id":"833eddfa_d9d2b48a","line":145,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.fail(f\"Failed to query audit logs: {str(e)}\")"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fd720148_8342bf35","line":157,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.fail(f\"Failed to query audit logs: {str(e)}\")"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3022f68d_61ecd92e","line":157,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.fail(f\"Failed to query audit logs: {str(e)}\")"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"13f0ea34_444c9c95","line":157,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.fail(f\"Failed to query audit logs: {str(e)}\")"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"60f7e3c5_73a33b31","line":157,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"}],"source_content_type":"text/x-python","patch_set":20,"id":"142c7450_d45c5dc1","line":158,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"}],"source_content_type":"text/x-python","patch_set":20,"id":"50c94b19_118f10e5","line":158,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"}],"source_content_type":"text/x-python","patch_set":20,"id":"7c33024b_c6744af8","line":158,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"}],"source_content_type":"text/x-python","patch_set":20,"id":"2a3af570_0513b1a1","line":158,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"},{"line_number":162,"context_line":"        denials \u003d self._query_audit_logs(self.ssh)"}],"source_content_type":"text/x-python","patch_set":20,"id":"21de8b5f_959ad022","line":159,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"},{"line_number":162,"context_line":"        denials \u003d self._query_audit_logs(self.ssh)"}],"source_content_type":"text/x-python","patch_set":20,"id":"ed76a157_10377001","line":159,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"},{"line_number":162,"context_line":"        denials \u003d self._query_audit_logs(self.ssh)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1fba02b0_9b1b342f","line":159,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"},{"line_number":162,"context_line":"        denials \u003d self._query_audit_logs(self.ssh)"}],"source_content_type":"text/x-python","patch_set":20,"id":"58ef984b_e5785d0b","line":159,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            )"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"4d6f3eac_735c2988","line":179,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            )"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"273934e7_bc9cba52","line":179,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        custom_minutes \u003d 60"}],"source_content_type":"text/x-python","patch_set":20,"id":"b2b58dbb_64119828","line":180,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        custom_minutes \u003d 60"}],"source_content_type":"text/x-python","patch_set":20,"id":"fb89d18d_fa6ce796","line":180,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        custom_minutes \u003d 60"},{"line_number":184,"context_line":"        denials \u003d self._query_audit_logs(self.ssh, custom_minutes)"}],"source_content_type":"text/x-python","patch_set":20,"id":"845d5203_0614516d","line":181,"updated":"2026-08-20 20:32:20.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"160c80e52b937afcc11f0a67ff7a7591d47a9058","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        custom_minutes \u003d 60"},{"line_number":184,"context_line":"        denials \u003d self._query_audit_logs(self.ssh, custom_minutes)"}],"source_content_type":"text/x-python","patch_set":20,"id":"e93cbf1d_4e8ecbc3","line":181,"updated":"2026-08-20 20:32:20.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"064cf67aeb8ae8c4b1114c63a9ddaf0252bc6ad4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# kolla-ansible/tests/test_selinux_kolla_denials.py"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"}],"source_content_type":"text/x-python","patch_set":21,"id":"9162deda_034a5d7a","line":1,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H102: Apache 2.0 license header not found","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# kolla-ansible/tests/test_selinux_kolla_denials.py"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"}],"source_content_type":"text/x-python","patch_set":21,"id":"d97d625a_cd3f8e7a","line":1,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H102: Apache 2.0 license header not found","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"},{"line_number":5,"context_line":"import paramiko"},{"line_number":6,"context_line":"from datetime import datetime, timedelta"},{"line_number":7,"context_line":"import logging"},{"line_number":8,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"477bc6e2_e23508fa","line":5,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H306: imports not in alphabetical order (unittest, paramiko)","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"},{"line_number":5,"context_line":"import paramiko"},{"line_number":6,"context_line":"from datetime import datetime, timedelta"},{"line_number":7,"context_line":"import logging"},{"line_number":8,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"2c096f7f_f9a7923e","line":5,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H306: imports not in alphabetical order (unittest, paramiko)","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"},{"line_number":5,"context_line":"import paramiko"},{"line_number":6,"context_line":"from datetime import datetime, timedelta"},{"line_number":7,"context_line":"import logging"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":21,"id":"75bedc6d_4f80642b","line":6,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H301: one import per line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import unittest"},{"line_number":5,"context_line":"import paramiko"},{"line_number":6,"context_line":"from datetime import datetime, timedelta"},{"line_number":7,"context_line":"import logging"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":21,"id":"2fc153bf_fa4411f3","line":6,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H301: one import per line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"dc243e4b_fef47d33","line":13,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3e88ae8e_7b72d89c","line":13,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"aea6a7cc_2c783c78","line":13,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"807829e7_8a0cfe45","line":13,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"b063a454_1d3ace81","line":14,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"b3c8fd8a_1dc22cdb","line":14,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"f1495319_8081ac5e","line":14,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"eb2243b0_2e264714","line":14,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":21,"id":"74cf4355_c859c346","line":15,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":21,"id":"b99ebe55_eb5626a4","line":15,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":21,"id":"0f90c0e2_7abfb019","line":15,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class TestSELinuxKollaDenials(unittest.TestCase):"},{"line_number":13,"context_line":"    \"\"\""},{"line_number":14,"context_line":"     Do SELinux denials exist for kolla_ services within time window?"},{"line_number":15,"context_line":"    \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9891e06e_26372f7b","line":15,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"c515e27c_d7f2d02c","line":19,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"706d9f6b_794ed65d","line":19,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"        cls.enabled \u003d os.environ.get(\u0027SELINUX_TEST_ENABLED\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"cbb9139a_81801034","line":20,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    @classmethod"},{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"        cls.enabled \u003d os.environ.get(\u0027SELINUX_TEST_ENABLED\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"24b6bf56_38aca0a1","line":20,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"        cls.enabled \u003d os.environ.get(\u0027SELINUX_TEST_ENABLED\u0027,"},{"line_number":24,"context_line":"                                     \u0027true\u0027).lower() \u003d\u003d \u0027true\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"928479dc_93587cb5","line":21,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    def setUpClass(cls):"},{"line_number":19,"context_line":"        \"\"\"Setup test environment and configuration."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        Read configuration from kolla-ansible environment variables.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"        cls.enabled \u003d os.environ.get(\u0027SELINUX_TEST_ENABLED\u0027,"},{"line_number":24,"context_line":"                                     \u0027true\u0027).lower() \u003d\u003d \u0027true\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba4abe34_21012a20","line":21,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        return status"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":21,"id":"a258f64b_839532eb","line":84,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        return status"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":21,"id":"21043bbf_56479877","line":84,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        return status"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":21,"id":"44cd3a32_5ea2b174","line":84,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        return status"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":21,"id":"194ec234_1f0fd496","line":84,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"}],"source_content_type":"text/x-python","patch_set":21,"id":"e47878b9_6ff0662d","line":85,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"}],"source_content_type":"text/x-python","patch_set":21,"id":"2020d3f8_fbce7528","line":85,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"}],"source_content_type":"text/x-python","patch_set":21,"id":"f1a4df39_50ba8f71","line":85,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"}],"source_content_type":"text/x-python","patch_set":21,"id":"598c1673_73a2e231","line":85,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"eac40277_e894099a","line":86,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"e2264cf6_941f8c05","line":86,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"849783ab_496c05c7","line":86,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def _get_time_window_string(self, minutes_ago):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"659ee656_42488479","line":86,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":21,"id":"f251b2ff_a8b5b4c6","line":87,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":21,"id":"13f64aaf_ec49f006","line":87,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":21,"id":"00fb94d6_068c47cb","line":87,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7d159ad1_6ceb8b0d","line":87,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"}],"source_content_type":"text/x-python","patch_set":21,"id":"c0cc6251_455e34ab","line":88,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"}],"source_content_type":"text/x-python","patch_set":21,"id":"351ba1a5_ab38b8dc","line":88,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"}],"source_content_type":"text/x-python","patch_set":21,"id":"4ad9c587_2a0c9ce0","line":88,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        Generate ausearch date and time strings for X minutes ago."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"}],"source_content_type":"text/x-python","patch_set":21,"id":"e9d04169_3a232ce9","line":88,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"4a1a18bd_b9e74539","line":89,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"ca6e7f98_b908826c","line":89,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"ea6ad45d_f6343725","line":89,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"f2081511_84006669","line":89,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3c7b10c8_3a204538","line":90,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"4c118089_85e0a084","line":90,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"2b292e2d_db2e9386","line":90,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        Args:"},{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"30ce5164_3d55ef9d","line":90,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"}],"source_content_type":"text/x-python","patch_set":21,"id":"f235e226_702ac139","line":91,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"}],"source_content_type":"text/x-python","patch_set":21,"id":"446f9d4b_dc5e9ba7","line":91,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"}],"source_content_type":"text/x-python","patch_set":21,"id":"59738ef2_a5ce60f3","line":91,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            minutes_ago (int): Number of minutes to look back"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"}],"source_content_type":"text/x-python","patch_set":21,"id":"53f84fc4_f5097059","line":91,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"},{"line_number":95,"context_line":"        return (target_time.strftime(\"%x\"),"}],"source_content_type":"text/x-python","patch_set":21,"id":"0d6b28b5_3a66723f","line":92,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"},{"line_number":95,"context_line":"        return (target_time.strftime(\"%x\"),"}],"source_content_type":"text/x-python","patch_set":21,"id":"293f8efd_3d444f73","line":92,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"},{"line_number":95,"context_line":"        return (target_time.strftime(\"%x\"),"}],"source_content_type":"text/x-python","patch_set":21,"id":"aca9a80e_8000519f","line":92,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Returns:"},{"line_number":91,"context_line":"            tuple: (date, time) strings suitable for ausearch -ts"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        target_time \u003d datetime.now() - timedelta(minutes\u003dminutes_ago)"},{"line_number":95,"context_line":"        return (target_time.strftime(\"%x\"),"}],"source_content_type":"text/x-python","patch_set":21,"id":"226a17a2_e1b18aac","line":92,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                target_time.strftime(\"%H:%M:%S\"))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a1ebc4d_84ae5190","line":99,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                target_time.strftime(\"%H:%M:%S\"))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":21,"id":"b543891e_7ce1f0af","line":99,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                target_time.strftime(\"%H:%M:%S\"))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":21,"id":"8e4a186e_fc0dd83a","line":99,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                target_time.strftime(\"%H:%M:%S\"))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":21,"id":"90785e4a_59ef5ce1","line":99,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"}],"source_content_type":"text/x-python","patch_set":21,"id":"8f4997fe_d221f031","line":100,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"}],"source_content_type":"text/x-python","patch_set":21,"id":"e4025e66_3a9e6b64","line":100,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"}],"source_content_type":"text/x-python","patch_set":21,"id":"b270cb1f_40d64a42","line":100,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"}],"source_content_type":"text/x-python","patch_set":21,"id":"7f405efd_f650da4f","line":100,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"}],"source_content_type":"text/x-python","patch_set":21,"id":"2510dc86_dc3d587a","line":101,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"}],"source_content_type":"text/x-python","patch_set":21,"id":"dca5ee8f_d76568fc","line":101,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"}],"source_content_type":"text/x-python","patch_set":21,"id":"0aa8f427_03e61cbf","line":101,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def _query_audit_logs(self, ssh, minutes_ago\u003dNone):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"}],"source_content_type":"text/x-python","patch_set":21,"id":"17a3f5a5_67c127a2","line":101,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"25441310_bf932b15","line":102,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ca98d95a_981c2e57","line":102,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"25808ae0_ba63a08d","line":102,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"81ca3229_57af87be","line":102,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":21,"id":"dcb96988_c1584690","line":103,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":21,"id":"264f6ab4_854cf056","line":103,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":21,"id":"668d47b1_955475b3","line":103,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        Query audit logs for AVC denials within configured time window."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":21,"id":"c8e31fe6_e97730d4","line":103,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"}],"source_content_type":"text/x-python","patch_set":21,"id":"798f7443_04e0d364","line":104,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"}],"source_content_type":"text/x-python","patch_set":21,"id":"be35823c_a188410c","line":104,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"}],"source_content_type":"text/x-python","patch_set":21,"id":"4e40a250_6925f84d","line":104,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"}],"source_content_type":"text/x-python","patch_set":21,"id":"70e4860f_c000fcaf","line":104,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"eebb9299_2856455b","line":105,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"43dee2ce_26050b05","line":105,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1776314c_821b7d17","line":105,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        Args:"},{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"51b4ec70_8a3d1733","line":105,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"e0cad641_28ff3b08","line":106,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1ec3ff4b_18cc448e","line":106,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"019798e7_abd57993","line":106,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            ssh: SSH connection object"},{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"08f5b96f_d1d74316","line":106,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"6bcbe2c9_99c585ee","line":107,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"fcf62f2a_5e6a7d04","line":107,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"ad2309ec_22b1b0a4","line":107,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            minutes_ago (int): Override for time window (optional)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a354e9b_f972dcbd","line":107,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"},{"line_number":111,"context_line":"            minutes_ago \u003d self.time_window_minutes"}],"source_content_type":"text/x-python","patch_set":21,"id":"e5b29f99_c113138d","line":108,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"},{"line_number":111,"context_line":"            minutes_ago \u003d self.time_window_minutes"}],"source_content_type":"text/x-python","patch_set":21,"id":"e84c3566_6bc3b025","line":108,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"},{"line_number":111,"context_line":"            minutes_ago \u003d self.time_window_minutes"}],"source_content_type":"text/x-python","patch_set":21,"id":"3bfe8baa_bb9c5134","line":108,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        Returns:"},{"line_number":107,"context_line":"            list: Matching denial entries"},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if minutes_ago is None:"},{"line_number":111,"context_line":"            minutes_ago \u003d self.time_window_minutes"}],"source_content_type":"text/x-python","patch_set":21,"id":"73dc957b_968f7dab","line":108,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        start_date, start_time \u003d self._get_time_window_string(minutes_ago)"},{"line_number":118,"context_line":"        LOG.info(f\"\"\"Querying audit logs"},{"line_number":119,"context_line":"                 from {start_date} {start_time} (last {minutes_ago} minutes)\"\"\")"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # Build the ausearch command. ausearch -ts takes the date and time as"},{"line_number":122,"context_line":"        # two separate arguments."}],"source_content_type":"text/x-python","patch_set":21,"id":"68abc764_15a6b864","line":119,"updated":"2026-08-21 01:06:09.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        start_date, start_time \u003d self._get_time_window_string(minutes_ago)"},{"line_number":118,"context_line":"        LOG.info(f\"\"\"Querying audit logs"},{"line_number":119,"context_line":"                 from {start_date} {start_time} (last {minutes_ago} minutes)\"\"\")"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        # Build the ausearch command. ausearch -ts takes the date and time as"},{"line_number":122,"context_line":"        # two separate arguments."}],"source_content_type":"text/x-python","patch_set":21,"id":"bcf52f06_0a2d26c6","line":119,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            # Filter for AVC denials whose source context is a kolla_ domain."},{"line_number":143,"context_line":"            denials \u003d []"},{"line_number":144,"context_line":"            for line in output.splitlines():"},{"line_number":145,"context_line":"                if \"kolla_\" in line and (\"scontext\u003d\" in line or \"svc\u003d\" in line):"},{"line_number":146,"context_line":"                    denials.append(line.strip())"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            if denials:"}],"source_content_type":"text/x-python","patch_set":21,"id":"06945cc0_78f5db57","line":145,"updated":"2026-08-21 01:06:09.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            # Filter for AVC denials whose source context is a kolla_ domain."},{"line_number":143,"context_line":"            denials \u003d []"},{"line_number":144,"context_line":"            for line in output.splitlines():"},{"line_number":145,"context_line":"                if \"kolla_\" in line and (\"scontext\u003d\" in line or \"svc\u003d\" in line):"},{"line_number":146,"context_line":"                    denials.append(line.strip())"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            if denials:"}],"source_content_type":"text/x-python","patch_set":21,"id":"2bb8a148_1c9e8a90","line":145,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.fail(f\"Failed to query audit logs: {str(e)}\")"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"73555bc7_8847e2b3","line":157,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.fail(f\"Failed to query audit logs: {str(e)}\")"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ab155a57_3d67971f","line":157,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.fail(f\"Failed to query audit logs: {str(e)}\")"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"2cab4377_f3315e3c","line":157,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.fail(f\"Failed to query audit logs: {str(e)}\")"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"aa061fae_93e78f89","line":157,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"}],"source_content_type":"text/x-python","patch_set":21,"id":"844aeed5_d0efce65","line":158,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"}],"source_content_type":"text/x-python","patch_set":21,"id":"4ae868a5_8a40109e","line":158,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"}],"source_content_type":"text/x-python","patch_set":21,"id":"8136599d_c867941a","line":158,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"}],"source_content_type":"text/x-python","patch_set":21,"id":"c3c587a6_390f65f2","line":158,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"},{"line_number":162,"context_line":"        denials \u003d self._query_audit_logs(self.ssh)"}],"source_content_type":"text/x-python","patch_set":21,"id":"809271f0_97a0ba28","line":159,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"},{"line_number":162,"context_line":"        denials \u003d self._query_audit_logs(self.ssh)"}],"source_content_type":"text/x-python","patch_set":21,"id":"35adf280_5dc7af14","line":159,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"},{"line_number":162,"context_line":"        denials \u003d self._query_audit_logs(self.ssh)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5eac4647_3ec446cf","line":159,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def test_no_kolla_svc_denials(self):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Main test: Any svc denials for kolla_ domain in time window?"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Query audit logs with configured time window"},{"line_number":162,"context_line":"        denials \u003d self._query_audit_logs(self.ssh)"}],"source_content_type":"text/x-python","patch_set":21,"id":"bda4f0f2_c2ad04a9","line":159,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            )"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"f8f59d63_76f7eb23","line":179,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            )"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"38d3eccb_a99de465","line":179,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        custom_minutes \u003d 60"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fba053a_188ee120","line":180,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        custom_minutes \u003d 60"}],"source_content_type":"text/x-python","patch_set":21,"id":"1653d06b_b75f1589","line":180,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        custom_minutes \u003d 60"},{"line_number":184,"context_line":"        denials \u003d self._query_audit_logs(self.ssh, custom_minutes)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1584bf74_fd05508c","line":181,"updated":"2026-08-21 01:06:09.000000000","message":"linters: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"080fdf734de9cb4e344999908860d038521bbfbd","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    def test_no_kolla_svc_denials_specific_time(self):"},{"line_number":179,"context_line":"        \"\"\"Alternative test with custom 60-minute time window."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Test with a specific time window (e.g., last 60 minutes)\"\"\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        custom_minutes \u003d 60"},{"line_number":184,"context_line":"        denials \u003d self._query_audit_logs(self.ssh, custom_minutes)"}],"source_content_type":"text/x-python","patch_set":21,"id":"de904a5e_4486293c","line":181,"updated":"2026-08-21 01:06:09.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"424d547eb0c3a602628a805d8fba7fca2dd6acad"}]}
