)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"9cfcd76517910d646f099017a210562ac1ea1e15","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"71317c71_b3565d22","updated":"2026-03-26 05:25:40.000000000","message":"recheck new images","commit_id":"80444c847362f512f99dcfc5c4b38034083865ff"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"38640e41c7d864ae03b94e3ce87d8d38e64bb170","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":57,"id":"509f1a0e_1ebb1e84","updated":"2026-04-13 08:33:05.000000000","message":"thx for the update, just some minor comments","commit_id":"06699849e1e5b5e225905f2808a9165d889b2e56"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"a8718697fcdbb7f003b8fb6e45f0c18d135ca463","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":60,"id":"0943f756_b5580ff5","updated":"2026-04-14 08:08:50.000000000","message":"not sure about the backport, feel free to override if you think this could get backported","commit_id":"6a82fd00e6e0e030e3f77ed42dcf60d3a05636f3"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"677809df9dafa22c6a1f3205d5125cea9ce00a0d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":60,"id":"1e73207c_27e10860","in_reply_to":"0943f756_b5580ff5","updated":"2026-04-14 08:10:49.000000000","message":"We\u0027re not backporting the ansible-runner switch for kolla-toolbox - so makes no sense to backport this either","commit_id":"6a82fd00e6e0e030e3f77ed42dcf60d3a05636f3"}],"roles/kolla-ansible-check/defaults/main.yml":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"bd70e98101101f635e38e9ec0d27fbde3042b19b","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"kolla_ansible_check_passwords_file: /etc/kolla/passwords.yml"},{"line_number":3,"context_line":"kolla_ansible_check_ignore_keys:"},{"line_number":4,"context_line":"  - database_password"},{"line_number":5,"context_line":"  - heat_domain_admin_password"}],"source_content_type":"text/x-yaml","patch_set":54,"id":"79e1d450_8b1a325e","line":2,"updated":"2026-03-31 12:01:29.000000000","message":"this file only exists on the primary node (for good reason), is it enough to run the checks only on the primary for now?","commit_id":"4b732ec1c839d9b7b2684bb8ea761bbde25709ac"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"976a8eede8e3f8656c99df3e492bb1c22a2957a9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"kolla_ansible_check_passwords_file: /etc/kolla/passwords.yml"},{"line_number":3,"context_line":"kolla_ansible_check_ignore_keys:"},{"line_number":4,"context_line":"  - database_password"},{"line_number":5,"context_line":"  - heat_domain_admin_password"}],"source_content_type":"text/x-yaml","patch_set":54,"id":"41a89992_70e4d462","line":2,"in_reply_to":"79e1d450_8b1a325e","updated":"2026-03-31 12:08:45.000000000","message":"Done","commit_id":"4b732ec1c839d9b7b2684bb8ea761bbde25709ac"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"bd70e98101101f635e38e9ec0d27fbde3042b19b","unresolved":true,"context_lines":[{"line_number":5,"context_line":"  - heat_domain_admin_password"},{"line_number":6,"context_line":"  - keystone_admin_password"},{"line_number":7,"context_line":"  - nova_database_password"},{"line_number":8,"context_line":"  - rabbitmq_cluster_cookie"}],"source_content_type":"text/x-yaml","patch_set":54,"id":"8e0a3508_88f54877","line":8,"updated":"2026-03-31 12:01:29.000000000","message":"some comments about why these need to be ignored might be helpful?","commit_id":"4b732ec1c839d9b7b2684bb8ea761bbde25709ac"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"3ee7dad040f850a145ec37fe081da4a6e9e42095","unresolved":true,"context_lines":[{"line_number":5,"context_line":"  - heat_domain_admin_password"},{"line_number":6,"context_line":"  - keystone_admin_password"},{"line_number":7,"context_line":"  - nova_database_password"},{"line_number":8,"context_line":"  - rabbitmq_cluster_cookie"}],"source_content_type":"text/x-yaml","patch_set":54,"id":"73187955_520cfc65","line":8,"in_reply_to":"1265bf60_b979fde4","updated":"2026-04-13 10:52:09.000000000","message":"Yes, actually it would make sense to mark the code causing leaks as TODO in addition to that.","commit_id":"4b732ec1c839d9b7b2684bb8ea761bbde25709ac"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"a8718697fcdbb7f003b8fb6e45f0c18d135ca463","unresolved":false,"context_lines":[{"line_number":5,"context_line":"  - heat_domain_admin_password"},{"line_number":6,"context_line":"  - keystone_admin_password"},{"line_number":7,"context_line":"  - nova_database_password"},{"line_number":8,"context_line":"  - rabbitmq_cluster_cookie"}],"source_content_type":"text/x-yaml","patch_set":54,"id":"5fe6a079_59df3555","line":8,"in_reply_to":"4bdbec8b_a9d3fc01","updated":"2026-04-14 08:08:50.000000000","message":"I think this is fine, thx","commit_id":"4b732ec1c839d9b7b2684bb8ea761bbde25709ac"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"8c85c848c5ecef7925eb7b57f640eb1d7e9b2998","unresolved":true,"context_lines":[{"line_number":5,"context_line":"  - heat_domain_admin_password"},{"line_number":6,"context_line":"  - keystone_admin_password"},{"line_number":7,"context_line":"  - nova_database_password"},{"line_number":8,"context_line":"  - rabbitmq_cluster_cookie"}],"source_content_type":"text/x-yaml","patch_set":54,"id":"4bdbec8b_a9d3fc01","line":8,"in_reply_to":"73187955_520cfc65","updated":"2026-04-13 14:09:39.000000000","message":"Is that enough - or should I go and add these todos in relevant places?","commit_id":"4b732ec1c839d9b7b2684bb8ea761bbde25709ac"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"38640e41c7d864ae03b94e3ce87d8d38e64bb170","unresolved":true,"context_lines":[{"line_number":5,"context_line":"  - heat_domain_admin_password"},{"line_number":6,"context_line":"  - keystone_admin_password"},{"line_number":7,"context_line":"  - nova_database_password"},{"line_number":8,"context_line":"  - rabbitmq_cluster_cookie"}],"source_content_type":"text/x-yaml","patch_set":54,"id":"1265bf60_b979fde4","line":8,"in_reply_to":"86478cf3_64787966","updated":"2026-04-13 08:33:05.000000000","message":"I would have expected some verbal explanation instead of gitea links. Do I understand this correctly that you are pointing to locations where these secrets get used in a way that actually does leak them to logs? Does it make sense then to at least mark them as TODO items for further sanitation?","commit_id":"4b732ec1c839d9b7b2684bb8ea761bbde25709ac"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"d458e7e83ebf1388334d5144c1809a66af9669e5","unresolved":false,"context_lines":[{"line_number":5,"context_line":"  - heat_domain_admin_password"},{"line_number":6,"context_line":"  - keystone_admin_password"},{"line_number":7,"context_line":"  - nova_database_password"},{"line_number":8,"context_line":"  - rabbitmq_cluster_cookie"}],"source_content_type":"text/x-yaml","patch_set":54,"id":"86478cf3_64787966","line":8,"in_reply_to":"8e0a3508_88f54877","updated":"2026-03-31 12:16:51.000000000","message":"Done","commit_id":"4b732ec1c839d9b7b2684bb8ea761bbde25709ac"}],"roles/kolla-ansible-check/library/kolla_ansible_password_check.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"38640e41c7d864ae03b94e3ce87d8d38e64bb170","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# Copyright 2016 StackHPC Ltd."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":7,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":57,"id":"91c81645_6fe57b8f","line":4,"range":{"start_line":4,"start_character":12,"end_line":4,"end_character":16},"updated":"2026-04-13 08:33:05.000000000","message":"```suggestion\n# Copyright 2026 StackHPC Ltd.\n```\n?","commit_id":"06699849e1e5b5e225905f2808a9165d889b2e56"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"3ee7dad040f850a145ec37fe081da4a6e9e42095","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/python"},{"line_number":2,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# Copyright 2016 StackHPC Ltd."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":7,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":57,"id":"bd66f700_1901770d","line":4,"range":{"start_line":4,"start_character":12,"end_line":4,"end_character":16},"in_reply_to":"91c81645_6fe57b8f","updated":"2026-04-13 10:52:09.000000000","message":"Done","commit_id":"06699849e1e5b5e225905f2808a9165d889b2e56"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"38640e41c7d864ae03b94e3ce87d8d38e64bb170","unresolved":true,"context_lines":[{"line_number":15,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":16,"context_line":"# limitations under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from __future__ import absolute_import"},{"line_number":19,"context_line":"from __future__ import division"},{"line_number":20,"context_line":"from __future__ import print_function"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from ansible.module_utils.basic import AnsibleModule"},{"line_number":23,"context_line":"import atexit"}],"source_content_type":"text/x-python","patch_set":57,"id":"b2a3504e_f59c40af","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":37},"updated":"2026-04-13 08:33:05.000000000","message":"these look very outdated to me","commit_id":"06699849e1e5b5e225905f2808a9165d889b2e56"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"3ee7dad040f850a145ec37fe081da4a6e9e42095","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":16,"context_line":"# limitations under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from __future__ import absolute_import"},{"line_number":19,"context_line":"from __future__ import division"},{"line_number":20,"context_line":"from __future__ import print_function"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from ansible.module_utils.basic import AnsibleModule"},{"line_number":23,"context_line":"import atexit"}],"source_content_type":"text/x-python","patch_set":57,"id":"c973613f_c2aeacb0","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":37},"in_reply_to":"b2a3504e_f59c40af","updated":"2026-04-13 10:52:09.000000000","message":"Done","commit_id":"06699849e1e5b5e225905f2808a9165d889b2e56"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"38640e41c7d864ae03b94e3ce87d8d38e64bb170","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    output, logs, or return values — only variable names are ever surfaced."},{"line_number":41,"context_line":"version_added: \"1.0.0\""},{"line_number":42,"context_line":"author:"},{"line_number":43,"context_line":"  - Your Name (@yourhandle)"},{"line_number":44,"context_line":"options:"},{"line_number":45,"context_line":"  passwords_file:"},{"line_number":46,"context_line":"    description:"}],"source_content_type":"text/x-python","patch_set":57,"id":"4cf7f918_6f0a7b43","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":27},"updated":"2026-04-13 08:33:05.000000000","message":"?","commit_id":"06699849e1e5b5e225905f2808a9165d889b2e56"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"3ee7dad040f850a145ec37fe081da4a6e9e42095","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    output, logs, or return values — only variable names are ever surfaced."},{"line_number":41,"context_line":"version_added: \"1.0.0\""},{"line_number":42,"context_line":"author:"},{"line_number":43,"context_line":"  - Your Name (@yourhandle)"},{"line_number":44,"context_line":"options:"},{"line_number":45,"context_line":"  passwords_file:"},{"line_number":46,"context_line":"    description:"}],"source_content_type":"text/x-python","patch_set":57,"id":"0714c236_0f8dc2f2","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":27},"in_reply_to":"4cf7f918_6f0a7b43","updated":"2026-04-13 10:52:09.000000000","message":"Done","commit_id":"06699849e1e5b5e225905f2808a9165d889b2e56"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"38640e41c7d864ae03b94e3ce87d8d38e64bb170","unresolved":true,"context_lines":[{"line_number":381,"context_line":"        )"},{"line_number":382,"context_line":"    else:"},{"line_number":383,"context_line":"        summary \u003d \"\"\"No secrets found in journal."},{"line_number":384,"context_line":"                     Checked {} entries, skipped {}.\"\"\".format("},{"line_number":385,"context_line":"            checked_count, skipped_count"},{"line_number":386,"context_line":"        )"},{"line_number":387,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"1e1b69e7_92973df9","line":384,"range":{"start_line":384,"start_character":1,"end_line":384,"end_character":21},"updated":"2026-04-13 08:33:05.000000000","message":"nit: this bunch of spaces makes it verbatim into the output, maybe reformat a bit?","commit_id":"06699849e1e5b5e225905f2808a9165d889b2e56"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"3ee7dad040f850a145ec37fe081da4a6e9e42095","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        )"},{"line_number":382,"context_line":"    else:"},{"line_number":383,"context_line":"        summary \u003d \"\"\"No secrets found in journal."},{"line_number":384,"context_line":"                     Checked {} entries, skipped {}.\"\"\".format("},{"line_number":385,"context_line":"            checked_count, skipped_count"},{"line_number":386,"context_line":"        )"},{"line_number":387,"context_line":""}],"source_content_type":"text/x-python","patch_set":57,"id":"e7cccc05_fae22c02","line":384,"range":{"start_line":384,"start_character":1,"end_line":384,"end_character":21},"in_reply_to":"1e1b69e7_92973df9","updated":"2026-04-13 10:52:09.000000000","message":"Done","commit_id":"06699849e1e5b5e225905f2808a9165d889b2e56"}],"roles/kolla-ansible-check/tasks/passwords.yml":[{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"cde4a647c315ee90173b35f5af1f889753eabffa","unresolved":true,"context_lines":[{"line_number":17,"context_line":"  ansible.builtin.set_fact:"},{"line_number":18,"context_line":"    syslog_content: \"{{ syslog_raw.content | b64decode }}\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: Check each password value against syslog"},{"line_number":21,"context_line":"  ansible.builtin.set_fact:"},{"line_number":22,"context_line":"    leaked_keys: \u003e-"},{"line_number":23,"context_line":"      {{"},{"line_number":24,"context_line":"        leaked_keys | default([]) + [item.key]"},{"line_number":25,"context_line":"        if ("},{"line_number":26,"context_line":"          item.value is string"},{"line_number":27,"context_line":"          and item.value | length \u003e 0"},{"line_number":28,"context_line":"          and item.value in syslog_content"},{"line_number":29,"context_line":"        )"},{"line_number":30,"context_line":"        else leaked_keys | default([])"},{"line_number":31,"context_line":"      }}"},{"line_number":32,"context_line":"  loop: \"{{ passwords | dict2items }}\""},{"line_number":33,"context_line":"  loop_control:"},{"line_number":34,"context_line":"    label: \"{{ item.key }}\""},{"line_number":35,"context_line":"  no_log: true"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"- name: Assert no passwords are present in syslog"},{"line_number":38,"context_line":"  ansible.builtin.assert:"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"d668f549_faf476f5","line":35,"range":{"start_line":20,"start_character":0,"end_line":35,"end_character":14},"updated":"2026-03-18 16:30:20.000000000","message":"I have concerns about performance and memory usage. Looping through hundreds of passwords inside Ansible and using slurp on large syslog files will be extremely slow and may lead to RAM exhaustion of the ansible/python process.\n\nIt is much faster and more efficient to use a system-native approach with grep directly on the host. I suggest the following:\n\n- name: Check for password leaks in syslog\n  ansible.builtin.shell: |\n    # Create temp file with all password values\n    cat \u003c\u003cEOF \u003e /tmp/pwd_to_check\n    {% for value in passwords.values() %}\n    {% if value is string and value | length \u003e 0 %} \u003c- empty password?\n    {{ value }}\n    {% endif %}\n    {% endfor %}\n    EOF\n\n    # Fast search using grep, then cleanup\n    grep -F -f /tmp/pwd_to_check {{ kolla_ansible_check_syslog_file }}\n    EXIT_CODE\u003d$?\n    rm -f /tmp/pwd_to_check\n    exit $EXIT_CODE\n  register: grep_leak\n  failed_when: grep_leak.rc \u003d\u003d 0\n  changed_when: false\n  no_log: true","commit_id":"f5648ecd820f671a477f2e7d53a719f8eef5123c"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"2ff9d56445fb46495475fc05565c4a93ae685ac8","unresolved":true,"context_lines":[{"line_number":17,"context_line":"  ansible.builtin.set_fact:"},{"line_number":18,"context_line":"    syslog_content: \"{{ syslog_raw.content | b64decode }}\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: Check each password value against syslog"},{"line_number":21,"context_line":"  ansible.builtin.set_fact:"},{"line_number":22,"context_line":"    leaked_keys: \u003e-"},{"line_number":23,"context_line":"      {{"},{"line_number":24,"context_line":"        leaked_keys | default([]) + [item.key]"},{"line_number":25,"context_line":"        if ("},{"line_number":26,"context_line":"          item.value is string"},{"line_number":27,"context_line":"          and item.value | length \u003e 0"},{"line_number":28,"context_line":"          and item.value in syslog_content"},{"line_number":29,"context_line":"        )"},{"line_number":30,"context_line":"        else leaked_keys | default([])"},{"line_number":31,"context_line":"      }}"},{"line_number":32,"context_line":"  loop: \"{{ passwords | dict2items }}\""},{"line_number":33,"context_line":"  loop_control:"},{"line_number":34,"context_line":"    label: \"{{ item.key }}\""},{"line_number":35,"context_line":"  no_log: true"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"- name: Assert no passwords are present in syslog"},{"line_number":38,"context_line":"  ansible.builtin.assert:"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"f9d94e71_6927b909","line":35,"range":{"start_line":20,"start_character":0,"end_line":35,"end_character":14},"in_reply_to":"d668f549_faf476f5","updated":"2026-03-18 16:32:03.000000000","message":"https://paste.opendev.org/show/bQknhK5euxOxMgnNLrz0/","commit_id":"f5648ecd820f671a477f2e7d53a719f8eef5123c"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"eadfa02691bd109f07bf03461c113ff582f0f6ae","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  ansible.builtin.set_fact:"},{"line_number":18,"context_line":"    syslog_content: \"{{ syslog_raw.content | b64decode }}\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: Check each password value against syslog"},{"line_number":21,"context_line":"  ansible.builtin.set_fact:"},{"line_number":22,"context_line":"    leaked_keys: \u003e-"},{"line_number":23,"context_line":"      {{"},{"line_number":24,"context_line":"        leaked_keys | default([]) + [item.key]"},{"line_number":25,"context_line":"        if ("},{"line_number":26,"context_line":"          item.value is string"},{"line_number":27,"context_line":"          and item.value | length \u003e 0"},{"line_number":28,"context_line":"          and item.value in syslog_content"},{"line_number":29,"context_line":"        )"},{"line_number":30,"context_line":"        else leaked_keys | default([])"},{"line_number":31,"context_line":"      }}"},{"line_number":32,"context_line":"  loop: \"{{ passwords | dict2items }}\""},{"line_number":33,"context_line":"  loop_control:"},{"line_number":34,"context_line":"    label: \"{{ item.key }}\""},{"line_number":35,"context_line":"  no_log: true"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"- name: Assert no passwords are present in syslog"},{"line_number":38,"context_line":"  ansible.builtin.assert:"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"92f4f767_37a097de","line":35,"range":{"start_line":20,"start_character":0,"end_line":35,"end_character":14},"in_reply_to":"f9d94e71_6927b909","updated":"2026-03-25 16:19:36.000000000","message":"Acknowledged","commit_id":"f5648ecd820f671a477f2e7d53a719f8eef5123c"}]}
