)]}'
{"/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"}],"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"}]}
