)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"7735746f362c41b3ea17bfa301ddeb44bc8ec160","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"b0d15f80_078e91e0","updated":"2026-03-17 20:13:17.000000000","message":"recheck ubuntu upgrade race condition - kolla toolbox not up","commit_id":"0f3f066187d3f79512b9b3f634b0d7b9639d4bed"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"f0e6fb086296226c0a4f8cac44840597409a8930","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"539c2139_7aba8593","updated":"2026-03-18 18:40:26.000000000","message":"recheck retry_limit","commit_id":"b9caa30262f1d23bcc11342a75ec66ed775d12ec"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"f3df1b407cf3f67dd194c435ad5c7decb1560858","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":36,"id":"3a100d79_ddbf46f1","updated":"2026-03-20 10:51:26.000000000","message":"tested that in my AIO vm, and it seems that ansible-runner logs were not cleaned up - permissions issue?\n\n(kolla-toolbox)[root@test-bbezak-r10 ansible]# ls -al\ntotal 240\ndrwxr-xr-x. 1 ansible ansible 4096 Mar 20 10:46 .\ndrwxr-xr-x. 1 root    root    4096 Mar 20 10:14 ..\ndrwxr-xr-x. 3 ansible ansible 4096 Mar 20 10:14 .ansible\n-rw-------. 1 ansible ansible  947 Mar 20 10:37 .bash_history\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:42 .cache\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.2wBtNz01oEw\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:44 kolla_runner.3elcBXeNQEE\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:46 kolla_runner.3hrE3D77ppU\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.3t4YBrFIGpA\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.4qQsJe6WRmE\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.525Cu52cEmw\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:42 kolla_runner.5hOv3G6nn7I\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.60Tm8EJM4VE\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.6Fy-TrnZq3U\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:44 kolla_runner.7pRUbm3D9Rc\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:42 kolla_runner.88GWUSrrXzQ\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:42 kolla_runner.8ugUpQ-mbec\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.9igEVd8e14g\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:38 kolla_runner._d1nQtVqMYc\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:46 kolla_runner.-dDqV69ZjZQ\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.-DsZb-tCIw0\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.EYfPibRoU_Q\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:42 kolla_runner.GZjFreqlv88\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:46 kolla_runner.hkc0TzGvEe4\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:44 kolla_runner.IP5UiKWI80s\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.iV-sA-25qWQ\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:40 kolla_runner.j_J09z05Im0\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.km8TRUZmHdc\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:40 kolla_runner.Nvdv7G9y8oE\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:40 kolla_runner.P0huPokkeY4\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:41 kolla_runner.p2cV9T6jgI0\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.p8fON_5p3_4\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:42 kolla_runner.pHx46z3ttPE\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:46 kolla_runner.PtNIp4WrwlI\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.q5rxtX8YaS4\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:42 kolla_runner.qLulAd3qVRk\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.qRdw8zXJXk4\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.qY8WlD-8VsY\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.rWhekVb0gec\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.RZ__ppamKHA\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.S31lxkYmSlo\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.sV9AtdSCUYM\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:40 kolla_runner.TfRPLcbvuK0\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.tJvZfXb0E48\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.Tq0JsUxnTIc\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:42 kolla_runner.TsgSK7ah2XE\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.V6oN7kTuns4\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.VCOKt2GaRZQ\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.VyGgW5Lp-JM\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:44 kolla_runner._W9tjnO3Dr4\ndrwxr-xr-x. 6 root    root    4096 Mar 20 10:45 kolla_runner.xgGM0SqsJmI\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.XNA6FhL9OC4\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:43 kolla_runner.Z49CjoPTy5E\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:40 kolla_runner.ZFqEtZ3SuXs\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:42 kolla_runner.zPZAd0ma8sk\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:41 kolla_runner.ZSoHCPpDlZI\ndrwxr-xr-x. 4 ansible ansible 4096 Mar 20 10:21 .local\n-rw-r--r--. 1 root    root     293 Jan  1  1970 requirements.yml\n\\\n(kolla-toolbox)[root@test-bbezak-r10 ansible]# pwd\n/var/lib/ansible","commit_id":"df8772e4e7fa3cc1db00b57c862ca0d4fcc035c3"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"5adbba3caf75852aecdb04475d9fe9ced6faf063","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"5ec86c56_bd5a5eb8","in_reply_to":"3a100d79_ddbf46f1","updated":"2026-03-20 11:37:20.000000000","message":"removal was being done with root user, added user root:\n\n        finally:\n            _exec_run(\n                kolla_toolbox,\n                [_PYTHON, \u0027-c\u0027,\n                 \u0027import shutil; shutil.rmtree(%r)\u0027 % pdd],\n                user\u003d\u0027root\u0027,\n            )","commit_id":"df8772e4e7fa3cc1db00b57c862ca0d4fcc035c3"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"5fa080c2ee9c85c4a92165266c44ee7b105a9312","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":38,"id":"3789ac18_d5ad75e8","updated":"2026-03-20 12:19:29.000000000","message":"looks like it is breaking check diff mode:\n\n\nUsing module file /home/cloud-user/kolla-venv/share/kolla-ansible/ansible/library/kolla_toolbox.py\nPipelining is enabled.\n\u003clocalhost\u003e EXEC /bin/sh -c \u0027sudo -H -S -n  -u root /bin/sh -c \u0027\"\u0027\"\u0027echo BECOME-SUCCESS-skeaeylggobamilpdxsmkoyzpivetkcq ; /home/cloud-user/kolla-venv/bin/python3.12\u0027\"\u0027\"\u0027 \u0026\u0026 sleep 0\u0027\nFAILED - RETRYING: [localhost]: Wait for MariaDB service to be ready through VIP (5 retries left).Result was: {\n    \"attempts\": 2,\n    \"changed\": false,\n    \"invocation\": {\n        \"module_args\": {\n            \"api_version\": \"auto\",\n            \"container_engine\": \"docker\",\n            \"module_args\": {\n                \"login_host\": \"172.16.0.183\",\n                \"login_password\": \"VALUE_SPECIFIED_IN_NO_LOG_PARAMETER\",\n                \"login_user\": \"root_shard_0\",\n                \"query\": \"SHOW DATABASES;\"\n            },\n            \"module_extra_vars\": {},\n            \"module_name\": \"mysql_query\",\n            \"timeout\": 180,\n            \"user\": null\n        }\n    },\n    \"msg\": \"Failed to read ansible-runner result (exit 1): {\\\"failed\\\": true, \\\"msg\\\": \\\"no terminal event found\\\"}\\r\\n\",\n    \"retries\": 7\n}","commit_id":"2d37b99312a476a6de91d64aec5cf21a8d32f5d5"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"fae446ff0876ba69b147ae906681e156f172fbf5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":38,"id":"833c88f9_ff5e7353","in_reply_to":"3789ac18_d5ad75e8","updated":"2026-03-20 13:12:22.000000000","message":"it is working on current master","commit_id":"2d37b99312a476a6de91d64aec5cf21a8d32f5d5"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b2d125e0102d39fb3070224b7a2663fcaa9d1b10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"2ca162d6_1eec7811","in_reply_to":"833c88f9_ff5e7353","updated":"2026-03-23 07:58:53.000000000","message":"Done","commit_id":"2d37b99312a476a6de91d64aec5cf21a8d32f5d5"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"6a98c3797011e21b2d5d96cbd994088e9e309d21","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":47,"id":"5e084851_c6a371bd","updated":"2026-03-30 10:06:59.000000000","message":"Merging given previous +2 from blanson","commit_id":"976d2d85c3d3bc77366bf4c90c03eaa4fa5921fe"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"77f2b56c582093874019d5f5cd25f89e0efaab01","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":47,"id":"3c4df1b5_94f57816","updated":"2026-03-26 05:25:27.000000000","message":"recheck new images","commit_id":"976d2d85c3d3bc77366bf4c90c03eaa4fa5921fe"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"9461ffc24236c18f0b4334efdbde678436c28849","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":47,"id":"93629df9_42370eb6","updated":"2026-03-30 07:39:24.000000000","message":"recheck slurp upgrades should be fine now","commit_id":"976d2d85c3d3bc77366bf4c90c03eaa4fa5921fe"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"8276498cc34c452eb08d50b266d2977e55b3c2aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":47,"id":"969cc8c1_66dda14c","updated":"2026-03-27 09:03:52.000000000","message":"recheck upgrade jobs should be fine now (new images)","commit_id":"976d2d85c3d3bc77366bf4c90c03eaa4fa5921fe"}],"ansible/library/kolla_toolbox.py":[{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"c6222c6332424c68489b9c313cd95b46f83d47ed","unresolved":true,"context_lines":[{"line_number":112,"context_line":"_PDD_BASEDIR \u003d \u0027/var/lib/ansible\u0027"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"# NOTE(mnasiadka): ansible-runner event types that carry the final result"},{"line_number":115,"context_line":"_TERMINAL_EVENTS \u003d frozenset({"},{"line_number":116,"context_line":"    \u0027runner_on_ok\u0027,"},{"line_number":117,"context_line":"    \u0027runner_on_failed\u0027,"},{"line_number":118,"context_line":"    \u0027runner_on_unreachable\u0027,"}],"source_content_type":"text/x-python","patch_set":28,"id":"fe1c290c_7e0051e2","line":115,"range":{"start_line":115,"start_character":0,"end_line":115,"end_character":16},"updated":"2026-03-18 10:15:02.000000000","message":"This is never used ? _PARSE_SCRIPT uses a hardcoded set rather thasn this.","commit_id":"94a756dfe2e4994fb0a0472b0f5973bacc0562ed"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"dd7090777f75df4c6ab469658ddfc3112b4c3d5d","unresolved":false,"context_lines":[{"line_number":112,"context_line":"_PDD_BASEDIR \u003d \u0027/var/lib/ansible\u0027"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"# NOTE(mnasiadka): ansible-runner event types that carry the final result"},{"line_number":115,"context_line":"_TERMINAL_EVENTS \u003d frozenset({"},{"line_number":116,"context_line":"    \u0027runner_on_ok\u0027,"},{"line_number":117,"context_line":"    \u0027runner_on_failed\u0027,"},{"line_number":118,"context_line":"    \u0027runner_on_unreachable\u0027,"}],"source_content_type":"text/x-python","patch_set":28,"id":"57ab16d8_c95cd0ea","line":115,"range":{"start_line":115,"start_character":0,"end_line":115,"end_character":16},"in_reply_to":"fe1c290c_7e0051e2","updated":"2026-03-18 10:43:49.000000000","message":"Done","commit_id":"94a756dfe2e4994fb0a0472b0f5973bacc0562ed"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"c6222c6332424c68489b9c313cd95b46f83d47ed","unresolved":false,"context_lines":[{"line_number":120,"context_line":"})"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"# NOTE(mnasiadka): Script run inside kolla_toolbox to extract the terminal"},{"line_number":123,"context_line":"#                  ansible-runner vent from job_events and print it as JSON"},{"line_number":124,"context_line":"_PARSE_SCRIPT \u003d ("},{"line_number":125,"context_line":"    \u0027import json, os, sys\\n\u0027"},{"line_number":126,"context_line":"    \u0027pdd \u003d %r\\n\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"e22d4c83_775a6336","line":123,"range":{"start_line":123,"start_character":34,"end_line":123,"end_character":38},"updated":"2026-03-18 10:15:02.000000000","message":"nit, event ? (:","commit_id":"94a756dfe2e4994fb0a0472b0f5973bacc0562ed"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"b1e3e358840b8777f3b760fbd573cd96a280277e","unresolved":true,"context_lines":[{"line_number":360,"context_line":"        \"\"\""},{"line_number":361,"context_line":"        kolla_toolbox \u003d self._get_toolbox_container()"},{"line_number":362,"context_line":"        user \u003d self.module.params.get(\u0027user\u0027)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        # NOTE(mnasiadka): Redact known sensitive module_args keys"},{"line_number":365,"context_line":"        # from Ansible\u0027s invocation log to prevent secrets appearing"},{"line_number":366,"context_line":"        # in syslog via the standard \"Invoked with ...\" message on exit."}],"source_content_type":"text/x-python","patch_set":28,"id":"e3effcae_089df522","line":363,"updated":"2026-03-18 09:22:43.000000000","message":"check_runner \u003d _exec_run(\n            kolla_toolbox, [\u0027test\u0027, \u0027-x\u0027, \u0027/opt/ansible/bin/ansible-runner\u0027])\n        if check_runner.exit_code !\u003d 0:\n            self.module.fail_json(\n                msg\u003d\"The \u0027ansible-runner\u0027 binary was not found in the \"\n                    \"kolla_toolbox container. Please ensure the container \"\n                    \"image is up to date and includes ansible-runner.\"\n            )\n\nmaybe such a simple protection?","commit_id":"94a756dfe2e4994fb0a0472b0f5973bacc0562ed"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"c87f0813f616ce3301b13364098c5cd8cc892f75","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        \"\"\""},{"line_number":361,"context_line":"        kolla_toolbox \u003d self._get_toolbox_container()"},{"line_number":362,"context_line":"        user \u003d self.module.params.get(\u0027user\u0027)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        # NOTE(mnasiadka): Redact known sensitive module_args keys"},{"line_number":365,"context_line":"        # from Ansible\u0027s invocation log to prevent secrets appearing"},{"line_number":366,"context_line":"        # in syslog via the standard \"Invoked with ...\" message on exit."}],"source_content_type":"text/x-python","patch_set":28,"id":"bbc9ee85_033b47a8","line":363,"in_reply_to":"e3effcae_089df522","updated":"2026-03-18 09:46:16.000000000","message":"Done","commit_id":"94a756dfe2e4994fb0a0472b0f5973bacc0562ed"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"3d5bec04e5beb04cded919efea4c603435afdb1e","unresolved":true,"context_lines":[{"line_number":364,"context_line":"        # NOTE(mnasiadka): Redact known sensitive module_args keys"},{"line_number":365,"context_line":"        # from Ansible\u0027s invocation log to prevent secrets appearing"},{"line_number":366,"context_line":"        # in syslog via the standard \"Invoked with ...\" message on exit."},{"line_number":367,"context_line":"        _NO_LOG_KEYS \u003d frozenset({\u0027password\u0027, \u0027login_password\u0027})"},{"line_number":368,"context_line":"        module_args \u003d self.module.params.get(\u0027module_args\u0027) or {}"},{"line_number":369,"context_line":"        for key, value in module_args.items():"},{"line_number":370,"context_line":"            if key in _NO_LOG_KEYS and value is not None:"}],"source_content_type":"text/x-python","patch_set":28,"id":"8e6e4551_d4695b2a","line":367,"range":{"start_line":367,"start_character":7,"end_line":367,"end_character":64},"updated":"2026-03-18 09:19:48.000000000","message":"_NO_LOG_KEYS \u003d frozenset({\n            \u0027password\u0027, \u0027login_password\u0027, \u0027auth\u0027, \n            \u0027application_credential_secret\u0027, \u0027token\u0027, \u0027secret\u0027\n}) \n\n?","commit_id":"94a756dfe2e4994fb0a0472b0f5973bacc0562ed"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"c87f0813f616ce3301b13364098c5cd8cc892f75","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        # NOTE(mnasiadka): Redact known sensitive module_args keys"},{"line_number":365,"context_line":"        # from Ansible\u0027s invocation log to prevent secrets appearing"},{"line_number":366,"context_line":"        # in syslog via the standard \"Invoked with ...\" message on exit."},{"line_number":367,"context_line":"        _NO_LOG_KEYS \u003d frozenset({\u0027password\u0027, \u0027login_password\u0027})"},{"line_number":368,"context_line":"        module_args \u003d self.module.params.get(\u0027module_args\u0027) or {}"},{"line_number":369,"context_line":"        for key, value in module_args.items():"},{"line_number":370,"context_line":"            if key in _NO_LOG_KEYS and value is not None:"}],"source_content_type":"text/x-python","patch_set":28,"id":"98c76f12_438bcbff","line":367,"range":{"start_line":367,"start_character":7,"end_line":367,"end_character":64},"in_reply_to":"2e70e1e5_5d7bc881","updated":"2026-03-18 09:46:16.000000000","message":"Done","commit_id":"94a756dfe2e4994fb0a0472b0f5973bacc0562ed"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"3bf1feba98e1a1aca0a159c0de3647a51e85f908","unresolved":true,"context_lines":[{"line_number":364,"context_line":"        # NOTE(mnasiadka): Redact known sensitive module_args keys"},{"line_number":365,"context_line":"        # from Ansible\u0027s invocation log to prevent secrets appearing"},{"line_number":366,"context_line":"        # in syslog via the standard \"Invoked with ...\" message on exit."},{"line_number":367,"context_line":"        _NO_LOG_KEYS \u003d frozenset({\u0027password\u0027, \u0027login_password\u0027})"},{"line_number":368,"context_line":"        module_args \u003d self.module.params.get(\u0027module_args\u0027) or {}"},{"line_number":369,"context_line":"        for key, value in module_args.items():"},{"line_number":370,"context_line":"            if key in _NO_LOG_KEYS and value is not None:"}],"source_content_type":"text/x-python","patch_set":28,"id":"2e70e1e5_5d7bc881","line":367,"range":{"start_line":367,"start_character":7,"end_line":367,"end_character":64},"in_reply_to":"8e6e4551_d4695b2a","updated":"2026-03-18 09:37:19.000000000","message":"auth yes, I don\u0027t see application_credential_secret, token or secret in kolla_toolbox invocations, and the followup change will check if any passwords are leaked to syslog","commit_id":"94a756dfe2e4994fb0a0472b0f5973bacc0562ed"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"c6222c6332424c68489b9c313cd95b46f83d47ed","unresolved":true,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        # NOTE(mnasiadka): Generate a unique pdd name without creating"},{"line_number":374,"context_line":"        #                  anything locally."},{"line_number":375,"context_line":"        import secrets"},{"line_number":376,"context_line":"        pdd \u003d _PDD_BASEDIR + \u0027/kolla_runner.\u0027 + secrets.token_urlsafe(8)"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":28,"id":"7b0c44d4_b5c84f8d","line":375,"range":{"start_line":375,"start_character":8,"end_line":375,"end_character":22},"updated":"2026-03-18 10:15:02.000000000","message":"shouldn\u0027t this be move to the top, rather than be imported per execution ?","commit_id":"94a756dfe2e4994fb0a0472b0f5973bacc0562ed"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"dd7090777f75df4c6ab469658ddfc3112b4c3d5d","unresolved":false,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        # NOTE(mnasiadka): Generate a unique pdd name without creating"},{"line_number":374,"context_line":"        #                  anything locally."},{"line_number":375,"context_line":"        import secrets"},{"line_number":376,"context_line":"        pdd \u003d _PDD_BASEDIR + \u0027/kolla_runner.\u0027 + secrets.token_urlsafe(8)"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":28,"id":"9fa47d40_54aa76f5","line":375,"range":{"start_line":375,"start_character":8,"end_line":375,"end_character":22},"in_reply_to":"7b0c44d4_b5c84f8d","updated":"2026-03-18 10:43:49.000000000","message":"Done","commit_id":"94a756dfe2e4994fb0a0472b0f5973bacc0562ed"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"387bd4331f9696a34de1a647157bd9889d21d3e8","unresolved":true,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"# NOTE(mnasiadka): Script run inside kolla_toolbox to extract the terminal"},{"line_number":123,"context_line":"#                  ansible-runner vent from job_events and print it as JSON"},{"line_number":124,"context_line":"_PARSE_SCRIPT \u003d ("},{"line_number":125,"context_line":"    \u0027import json, os, sys\\n\u0027"},{"line_number":126,"context_line":"    \u0027pdd \u003d %r\\n\u0027"},{"line_number":127,"context_line":"    \u0027events_dir \u003d None\\n\u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"6a1b60e4_9a629ec0","line":124,"updated":"2026-03-18 10:00:29.000000000","message":"To further secure the communication channel, we are introducing a marker-based isolation for the JSON output returned from the container. This ensures that the Python parser on the host is not confused by any diagnostic messages or TTY artifacts generated during the execution of the ansible-runner check.\n\nfor example, something like this?\nhttps://paste.opendev.org/show/b5Q9LEoYFsu6dw370wvL/\nnot tested","commit_id":"96f0d81f604f9600afdbea4802fdb92ea5c83b5f"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"f48534093d8f85bae8c4947aa9ba5d38e57d9028","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"# NOTE(mnasiadka): Script run inside kolla_toolbox to extract the terminal"},{"line_number":123,"context_line":"#                  ansible-runner vent from job_events and print it as JSON"},{"line_number":124,"context_line":"_PARSE_SCRIPT \u003d ("},{"line_number":125,"context_line":"    \u0027import json, os, sys\\n\u0027"},{"line_number":126,"context_line":"    \u0027pdd \u003d %r\\n\u0027"},{"line_number":127,"context_line":"    \u0027events_dir \u003d None\\n\u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"bf8b3cd9_89c7ceef","line":124,"in_reply_to":"6a1b60e4_9a629ec0","updated":"2026-03-18 14:31:29.000000000","message":"If it\u0027s not tested I wouldn\u0027t like to spend more CI cycles (and my cycles) on that patch - but a followup is welcome (I\u0027ll try to find some time to test that in coming weeks).","commit_id":"96f0d81f604f9600afdbea4802fdb92ea5c83b5f"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"387bd4331f9696a34de1a647157bd9889d21d3e8","unresolved":true,"context_lines":[{"line_number":380,"context_line":"                       )"},{"line_number":381,"context_line":"        module_args \u003d self.module.params.get(\u0027module_args\u0027) or {}"},{"line_number":382,"context_line":"        for key, value in module_args.items():"},{"line_number":383,"context_line":"            if key in _NO_LOG_KEYS and value is not None:"},{"line_number":384,"context_line":"                self.module.no_log_values.add(str(value))"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        # NOTE(mnasiadka): Generate a unique pdd name without creating"},{"line_number":387,"context_line":"        #                  anything locally."}],"source_content_type":"text/x-python","patch_set":29,"id":"b0806c06_ce45df06","line":384,"range":{"start_line":383,"start_character":12,"end_line":384,"end_character":57},"updated":"2026-03-18 10:00:29.000000000","message":"if value is not None and any(k in key.lower() for k in _NO_LOG_KEYS):\n                self.module.no_log_values.add(str(value))\n\nmeybe, we use .lower() and check if the key fragment matches the lock list ?","commit_id":"96f0d81f604f9600afdbea4802fdb92ea5c83b5f"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"f2836fdbb2dd76b850808f44f6ea9da7407de911","unresolved":false,"context_lines":[{"line_number":380,"context_line":"                       )"},{"line_number":381,"context_line":"        module_args \u003d self.module.params.get(\u0027module_args\u0027) or {}"},{"line_number":382,"context_line":"        for key, value in module_args.items():"},{"line_number":383,"context_line":"            if key in _NO_LOG_KEYS and value is not None:"},{"line_number":384,"context_line":"                self.module.no_log_values.add(str(value))"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        # NOTE(mnasiadka): Generate a unique pdd name without creating"},{"line_number":387,"context_line":"        #                  anything locally."}],"source_content_type":"text/x-python","patch_set":29,"id":"3abb13c4_c7c7bd3f","line":384,"range":{"start_line":383,"start_character":12,"end_line":384,"end_character":57},"in_reply_to":"b0806c06_ce45df06","updated":"2026-03-18 10:59:09.000000000","message":"I\u0027m fine with having a strict list and a task in check-logs that checks if we leak passwords to syslog, no need to do crazy fragment matches.","commit_id":"96f0d81f604f9600afdbea4802fdb92ea5c83b5f"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"409dc074668bd88232771523ceab7b4af024e0e2","unresolved":true,"context_lines":[{"line_number":27,"context_line":"short_description: \u003e"},{"line_number":28,"context_line":"  Module for invoking ansible module in kolla_toolbox container."},{"line_number":29,"context_line":"description:"},{"line_number":30,"context_line":"  - A module targerting at invoking ansible module in kolla_toolbox"},{"line_number":31,"context_line":"    container as used by Kolla project."},{"line_number":32,"context_line":"options:"},{"line_number":33,"context_line":"  container_engine:"}],"source_content_type":"text/x-python","patch_set":31,"id":"eb95eacd_601d2107","line":30,"updated":"2026-03-18 14:12:02.000000000","message":"targeting - trivial","commit_id":"2e1fb168f45c759e97b4f7a70eebf391ea394951"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"f48534093d8f85bae8c4947aa9ba5d38e57d9028","unresolved":false,"context_lines":[{"line_number":27,"context_line":"short_description: \u003e"},{"line_number":28,"context_line":"  Module for invoking ansible module in kolla_toolbox container."},{"line_number":29,"context_line":"description:"},{"line_number":30,"context_line":"  - A module targerting at invoking ansible module in kolla_toolbox"},{"line_number":31,"context_line":"    container as used by Kolla project."},{"line_number":32,"context_line":"options:"},{"line_number":33,"context_line":"  container_engine:"}],"source_content_type":"text/x-python","patch_set":31,"id":"19a6de93_b865bec5","line":30,"in_reply_to":"eb95eacd_601d2107","updated":"2026-03-18 14:31:29.000000000","message":"Done","commit_id":"2e1fb168f45c759e97b4f7a70eebf391ea394951"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"409dc074668bd88232771523ceab7b4af024e0e2","unresolved":true,"context_lines":[{"line_number":478,"context_line":"        module.exit_json(**ktbw.result)"},{"line_number":479,"context_line":"    except Exception:"},{"line_number":480,"context_line":"        module.fail_json(changed\u003dTrue,"},{"line_number":481,"context_line":"                         msg\u003drepr(traceback.format_exc()))"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":31,"id":"59785395_0379052e","line":481,"range":{"start_line":481,"start_character":0,"end_line":481,"end_character":58},"updated":"2026-03-18 14:12:02.000000000","message":"One more. I thnk\n\ntraceback.format_exc() already returns a string. Calling repr() on it will add unnecessary quotes and escapes (\\n), making the Ansible log extremely unreadable.\nIt shouldn\u0027t just be:\nmsg\u003dtraceback.format_exc()","commit_id":"2e1fb168f45c759e97b4f7a70eebf391ea394951"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"f48534093d8f85bae8c4947aa9ba5d38e57d9028","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        module.exit_json(**ktbw.result)"},{"line_number":479,"context_line":"    except Exception:"},{"line_number":480,"context_line":"        module.fail_json(changed\u003dTrue,"},{"line_number":481,"context_line":"                         msg\u003drepr(traceback.format_exc()))"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":31,"id":"b40a332d_a127d226","line":481,"range":{"start_line":481,"start_character":0,"end_line":481,"end_character":58},"in_reply_to":"59785395_0379052e","updated":"2026-03-18 14:31:29.000000000","message":"You\u0027re right, thanks!","commit_id":"2e1fb168f45c759e97b4f7a70eebf391ea394951"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"aef18375bb46ddd931f0e236bcde27d9b754820c","unresolved":true,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"def _exec_run(container, cmd, **kwargs):"},{"line_number":205,"context_line":"    \"\"\"\"Normalise exec_run return value across Docker and Podman SDKs."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    Docker SDK returns an ExecResult namedtuple with .exit_code and"},{"line_number":208,"context_line":"    .output attributes. Podman SDK returns a plain (exit_code, output)"}],"source_content_type":"text/x-python","patch_set":33,"id":"e3d2f54c_10362648","line":205,"range":{"start_line":205,"start_character":4,"end_line":205,"end_character":5},"updated":"2026-03-18 18:55:41.000000000","message":"nit, too many \"","commit_id":"b9caa30262f1d23bcc11342a75ec66ed775d12ec"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"0e267914db34eb21cc8943646f7300bd82f6e185","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"def _exec_run(container, cmd, **kwargs):"},{"line_number":205,"context_line":"    \"\"\"\"Normalise exec_run return value across Docker and Podman SDKs."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    Docker SDK returns an ExecResult namedtuple with .exit_code and"},{"line_number":208,"context_line":"    .output attributes. Podman SDK returns a plain (exit_code, output)"}],"source_content_type":"text/x-python","patch_set":33,"id":"8a54920b_0eaa2860","line":205,"range":{"start_line":205,"start_character":4,"end_line":205,"end_character":5},"in_reply_to":"e3d2f54c_10362648","updated":"2026-03-19 10:32:02.000000000","message":"Done","commit_id":"b9caa30262f1d23bcc11342a75ec66ed775d12ec"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"25d6d2d7b3aa7b253db3c17757c98f5c9f135c4e","unresolved":true,"context_lines":[{"line_number":201,"context_line":"    return buf"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"def _exec_run(container, cmd, **kwargs):"},{"line_number":205,"context_line":"    \"\"\"Normalise exec_run return value across Docker and Podman SDKs."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    Docker SDK returns an ExecResult namedtuple with .exit_code and"}],"source_content_type":"text/x-python","patch_set":36,"id":"38b26c7b_fc2afafa","line":204,"range":{"start_line":204,"start_character":0,"end_line":204,"end_character":40},"updated":"2026-03-20 10:02:44.000000000","message":"Since youre already digging around in here might be worth adding some proper error handling while you\u0027re at it\n\ndef _exec_run(self, container, cmd, **kwargs):\n        \"\"\"Normalise exec_run return value across Docker and Podman SDKs.\"\"\"\n        kwargs[\u0027tty\u0027] \u003d True\n        try:\n            result \u003d container.exec_run(cmd, **kwargs)\n            if isinstance(result, tuple):\n                return _ExecResult(*result)\n            return _ExecResult(result.exit_code, result.output)\n        except Exception as e:\n            self.module.fail_json(\n                msg\u003d\"Container engine communication error while executing command: %s\" % str(e),\n                cmd\u003dcmd\n            )","commit_id":"df8772e4e7fa3cc1db00b57c862ca0d4fcc035c3"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b2d125e0102d39fb3070224b7a2663fcaa9d1b10","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    return buf"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"def _exec_run(container, cmd, **kwargs):"},{"line_number":205,"context_line":"    \"\"\"Normalise exec_run return value across Docker and Podman SDKs."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    Docker SDK returns an ExecResult namedtuple with .exit_code and"}],"source_content_type":"text/x-python","patch_set":36,"id":"6743e163_57c419ee","line":204,"range":{"start_line":204,"start_character":0,"end_line":204,"end_character":40},"in_reply_to":"38b26c7b_fc2afafa","updated":"2026-03-23 07:58:53.000000000","message":"Acknowledged","commit_id":"df8772e4e7fa3cc1db00b57c862ca0d4fcc035c3"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"88dcc4fa5af9b3ba09b33e1cde74bc684fd9a396","unresolved":true,"context_lines":[{"line_number":457,"context_line":"                if key in self._NO_LOG_KEYS and value is not None:"},{"line_number":458,"context_line":"                    self.no_log_values.add(str(value))"},{"line_number":459,"context_line":"        super()._log_invocation()"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"def create_ansible_module() -\u003e KollaAnsibleModule:"},{"line_number":463,"context_line":"    argument_spec \u003d dict("}],"source_content_type":"text/x-python","patch_set":36,"id":"995b9fcf_f0f495fe","line":460,"updated":"2026-03-20 09:57:53.000000000","message":"def fail_json(self, **kwargs):\n        # If the error message (msg) contains any of the no_log values, \n        # Ansible will automatically redact it because we added it to \n        # self.no_log_values during _log_invocation.\n        super().fail_json(**kwargs)\n\n\n?","commit_id":"df8772e4e7fa3cc1db00b57c862ca0d4fcc035c3"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b2d125e0102d39fb3070224b7a2663fcaa9d1b10","unresolved":false,"context_lines":[{"line_number":457,"context_line":"                if key in self._NO_LOG_KEYS and value is not None:"},{"line_number":458,"context_line":"                    self.no_log_values.add(str(value))"},{"line_number":459,"context_line":"        super()._log_invocation()"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"def create_ansible_module() -\u003e KollaAnsibleModule:"},{"line_number":463,"context_line":"    argument_spec \u003d dict("}],"source_content_type":"text/x-python","patch_set":36,"id":"c3b645a0_81e16836","line":460,"in_reply_to":"995b9fcf_f0f495fe","updated":"2026-03-23 07:58:53.000000000","message":"Acknowledged","commit_id":"df8772e4e7fa3cc1db00b57c862ca0d4fcc035c3"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"38c72e4d3f1dc0d08bbadfe84f53852237ac6758","unresolved":true,"context_lines":[{"line_number":393,"context_line":"            _exec_run("},{"line_number":394,"context_line":"                kolla_toolbox,"},{"line_number":395,"context_line":"                [_PYTHON, \u0027-c\u0027,"},{"line_number":396,"context_line":"                 \u0027import shutil; shutil.rmtree(%r)\u0027 % pdd],"},{"line_number":397,"context_line":"                user\u003d\u0027root\u0027,"},{"line_number":398,"context_line":"            )"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"51b6fc05_d35c4c3b","line":396,"range":{"start_line":396,"start_character":17,"end_line":396,"end_character":59},"updated":"2026-03-20 11:44:28.000000000","message":"shutil.rmtree(%r) will raise an error inside the finally block if the pdd directory was not created... error inside _get_toolbox_container\n\nbetter: \u0027import shutil; shutil.rmtree(%r, ignore_errors\u003dTrue)\u0027 % pdd],","commit_id":"08a003c0ab459c81cdd2b59c9a66cb3328f33f8d"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"f5bd333f763e90c6ef56e8f1e4606625b1ce2032","unresolved":false,"context_lines":[{"line_number":393,"context_line":"            _exec_run("},{"line_number":394,"context_line":"                kolla_toolbox,"},{"line_number":395,"context_line":"                [_PYTHON, \u0027-c\u0027,"},{"line_number":396,"context_line":"                 \u0027import shutil; shutil.rmtree(%r)\u0027 % pdd],"},{"line_number":397,"context_line":"                user\u003d\u0027root\u0027,"},{"line_number":398,"context_line":"            )"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"8c16f7c0_13c45be2","line":396,"range":{"start_line":396,"start_character":17,"end_line":396,"end_character":59},"in_reply_to":"51b6fc05_d35c4c3b","updated":"2026-03-20 11:50:18.000000000","message":"it was there in previous patchset, I removed it for testing - we\u0027re not catching this exit code anyway","commit_id":"08a003c0ab459c81cdd2b59c9a66cb3328f33f8d"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"d4e4f9c83b8c2e633e747da2701b0ede6b716fc9","unresolved":true,"context_lines":[{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    _NO_LOG_KEYS \u003d frozenset({\u0027auth\u0027, \u0027login_password\u0027, \u0027password\u0027})"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def _log_invocation(self):"},{"line_number":473,"context_line":"        for param in (\u0027module_args\u0027, \u0027module_extra_vars\u0027):"},{"line_number":474,"context_line":"            for key, value in (self.params.get(param) or {}).items():"},{"line_number":475,"context_line":"                if key in self._NO_LOG_KEYS and value is not None:"}],"source_content_type":"text/x-python","patch_set":47,"id":"fdc957f2_3b20a259","line":472,"updated":"2026-03-30 09:57:39.000000000","message":"it looks like we\u0027re just going over those top level keys(from _NO_LOG_KEYS), and for example module_extra_vars.openstack_keystone_auth.password will still leak password. maybe we should do some recursion","commit_id":"976d2d85c3d3bc77366bf4c90c03eaa4fa5921fe"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"4791e04f8a5e8817f1385fec73cabb9dbdde230e","unresolved":false,"context_lines":[{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    _NO_LOG_KEYS \u003d frozenset({\u0027auth\u0027, \u0027login_password\u0027, \u0027password\u0027})"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def _log_invocation(self):"},{"line_number":473,"context_line":"        for param in (\u0027module_args\u0027, \u0027module_extra_vars\u0027):"},{"line_number":474,"context_line":"            for key, value in (self.params.get(param) or {}).items():"},{"line_number":475,"context_line":"                if key in self._NO_LOG_KEYS and value is not None:"}],"source_content_type":"text/x-python","patch_set":47,"id":"2f41db47_9d9ea872","line":472,"in_reply_to":"4ea0efe1_1aab29f6","updated":"2026-03-30 10:04:59.000000000","message":"Acknowledged","commit_id":"976d2d85c3d3bc77366bf4c90c03eaa4fa5921fe"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"c408a41287fb0cf06569e70de90b813acdc06118","unresolved":true,"context_lines":[{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    _NO_LOG_KEYS \u003d frozenset({\u0027auth\u0027, \u0027login_password\u0027, \u0027password\u0027})"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def _log_invocation(self):"},{"line_number":473,"context_line":"        for param in (\u0027module_args\u0027, \u0027module_extra_vars\u0027):"},{"line_number":474,"context_line":"            for key, value in (self.params.get(param) or {}).items():"},{"line_number":475,"context_line":"                if key in self._NO_LOG_KEYS and value is not None:"}],"source_content_type":"text/x-python","patch_set":47,"id":"4ea0efe1_1aab29f6","line":472,"in_reply_to":"fdc957f2_3b20a259","updated":"2026-03-30 10:01:56.000000000","message":"Happy to add auth.password as a followup to _NO_LOG_KEYS, would prefer this to finally get merged.","commit_id":"976d2d85c3d3bc77366bf4c90c03eaa4fa5921fe"}],"tests/test_kolla_toolbox.py":[{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"aef18375bb46ddd931f0e236bcde27d9b754820c","unresolved":true,"context_lines":[{"line_number":584,"context_line":"        last_cmd \u003d last_call[0][0]"},{"line_number":585,"context_line":"        self.assertIn(\u0027shutil\u0027, last_cmd[-1])"},{"line_number":586,"context_line":"        self.assertIn(\u0027rmtree\u0027, last_cmd[-1])"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"    def test_cleanup_called_on_failure(self):"},{"line_number":589,"context_line":"        \"\"\"finally block must run cleanup even when ansible-runner fails.\"\"\""},{"line_number":590,"context_line":"        self.mock_container.exec_run.side_effect \u003d ["},{"line_number":591,"context_line":"            _make_exec_result(0, b\u0027\u0027),   # makedirs"},{"line_number":592,"context_line":"            _make_exec_result(1, b\u0027runner crashed\u0027),  # ansible-runner"},{"line_number":593,"context_line":"            _make_exec_result(0, b\u0027\u0027),   # cleanup"},{"line_number":594,"context_line":"        ]"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"        self.assertRaises(AnsibleFailJson, self.fake_ktbw.main)"},{"line_number":597,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"ca5316c7_548ecc7e","line":594,"range":{"start_line":587,"start_character":1,"end_line":594,"end_character":9},"updated":"2026-03-18 18:55:41.000000000","message":"I don\u0027t understand this test.\n\nWith only 3 entries, entry 1 is consumed by check_runner, entry 2 by makedirs (which exits with code 1 and triggers fail_json before we ever reach ansible-runner), and entry 3 by cleanup ? \n\nI think the test passes because the finally block still runs, but it\u0027s testing makedirs failure, not ansible-runner failure ? \n\nOr I haven\u0027t understood the test very well","commit_id":"b9caa30262f1d23bcc11342a75ec66ed775d12ec"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"21c03bed668c85bee9a6a4b6dd79e7f9dc9e34b9","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        last_cmd \u003d last_call[0][0]"},{"line_number":585,"context_line":"        self.assertIn(\u0027shutil\u0027, last_cmd[-1])"},{"line_number":586,"context_line":"        self.assertIn(\u0027rmtree\u0027, last_cmd[-1])"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"    def test_cleanup_called_on_failure(self):"},{"line_number":589,"context_line":"        \"\"\"finally block must run cleanup even when ansible-runner fails.\"\"\""},{"line_number":590,"context_line":"        self.mock_container.exec_run.side_effect \u003d ["},{"line_number":591,"context_line":"            _make_exec_result(0, b\u0027\u0027),   # makedirs"},{"line_number":592,"context_line":"            _make_exec_result(1, b\u0027runner crashed\u0027),  # ansible-runner"},{"line_number":593,"context_line":"            _make_exec_result(0, b\u0027\u0027),   # cleanup"},{"line_number":594,"context_line":"        ]"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"        self.assertRaises(AnsibleFailJson, self.fake_ktbw.main)"},{"line_number":597,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"0b38f3a9_b43ae258","line":594,"range":{"start_line":587,"start_character":1,"end_line":594,"end_character":9},"in_reply_to":"57bab6c9_69a14900","updated":"2026-03-19 15:34:04.000000000","message":"Yes, thanks !","commit_id":"b9caa30262f1d23bcc11342a75ec66ed775d12ec"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"0e267914db34eb21cc8943646f7300bd82f6e185","unresolved":true,"context_lines":[{"line_number":584,"context_line":"        last_cmd \u003d last_call[0][0]"},{"line_number":585,"context_line":"        self.assertIn(\u0027shutil\u0027, last_cmd[-1])"},{"line_number":586,"context_line":"        self.assertIn(\u0027rmtree\u0027, last_cmd[-1])"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"    def test_cleanup_called_on_failure(self):"},{"line_number":589,"context_line":"        \"\"\"finally block must run cleanup even when ansible-runner fails.\"\"\""},{"line_number":590,"context_line":"        self.mock_container.exec_run.side_effect \u003d ["},{"line_number":591,"context_line":"            _make_exec_result(0, b\u0027\u0027),   # makedirs"},{"line_number":592,"context_line":"            _make_exec_result(1, b\u0027runner crashed\u0027),  # ansible-runner"},{"line_number":593,"context_line":"            _make_exec_result(0, b\u0027\u0027),   # cleanup"},{"line_number":594,"context_line":"        ]"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"        self.assertRaises(AnsibleFailJson, self.fake_ktbw.main)"},{"line_number":597,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"57bab6c9_69a14900","line":594,"range":{"start_line":587,"start_character":1,"end_line":594,"end_character":9},"in_reply_to":"ca5316c7_548ecc7e","updated":"2026-03-19 10:32:02.000000000","message":"I added comments to all exec_runs - does it help?","commit_id":"b9caa30262f1d23bcc11342a75ec66ed775d12ec"}]}
