)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"66e7882ca50c25e6aa40bddea1dad0340bff9841","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"65d51e04_3589ebdc","updated":"2022-02-15 00:53:21.000000000","message":"recheck","commit_id":"9b2c0d440953ffc86f0d548ba8d7429e1e8c36c3"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"e17d9351aee23c2c4ebad712d5c96441490ef315","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"a846df19_7b510fab","updated":"2022-02-15 01:52:27.000000000","message":"recheck","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"f88ffbbc7b508ffcf715a2e57be470fd0122f47d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"e759636c_d74e89c9","updated":"2022-02-16 03:32:47.000000000","message":"recheck","commit_id":"0e461ddd21ed0275aa02fbfea75030bca3e63750"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"b2ee870c3c28c0786c544937cd507448b684fd4b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":36,"id":"329c9231_f5cabbf1","updated":"2022-02-17 21:01:17.000000000","message":"\u003e Can you clarify the reason for having hybrid bash+python for the script rather than pure python? Was that in order to avoid needing libraries from outside the stdlib?\n\nIt certainly could all be in python, however it\u0027s reworked from [1].\n\nI think there was two things going on there, partly just simplicity -- python was the job for parsing json but for making directories, making and downloading files, etc. it is more straight forward in bash.  the second thing is the more familiar \"curl ...download-logs.sh | bash\" model that you can use to run it.\n\n[1] https://opendev.org/zuul/zuul-jobs/src/branch/master/roles/local-log-download/templates/download-logs.sh.j2","commit_id":"ccf00b7673db04a01c6f8591db6c04e8f060b26f"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"61322ec10c3a5fd5fe1fe5e6d7c8b8159c1b6bb5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"3127754b_a8ecdec6","updated":"2022-02-20 21:23:50.000000000","message":"will monitor","commit_id":"ccf00b7673db04a01c6f8591db6c04e8f060b26f"}],"playbooks/service-bridge.yaml":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"b84242c65fa9a997efc4ed5eb8db42c6c86dfa78","unresolved":true,"context_lines":[{"line_number":38,"context_line":"        path: \u0027/var/log/ansible\u0027"},{"line_number":39,"context_line":"        state: directory"},{"line_number":40,"context_line":"        owner: root"},{"line_number":41,"context_line":"        mode: 0755"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"f3b588bf_0617944c","line":41,"range":{"start_line":41,"start_character":14,"end_line":41,"end_character":18},"updated":"2022-02-16 00:38:08.000000000","message":"This is currently 775 on the server. I don\u0027t think that matters though.","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"2333fc0101252dbd2a2b458c6126b9e3374816be","unresolved":true,"context_lines":[{"line_number":38,"context_line":"        path: \u0027/var/log/ansible\u0027"},{"line_number":39,"context_line":"        state: directory"},{"line_number":40,"context_line":"        owner: root"},{"line_number":41,"context_line":"        mode: 0755"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"9ecf7940_89d2361e","line":41,"range":{"start_line":41,"start_character":14,"end_line":41,"end_character":18},"in_reply_to":"f3b588bf_0617944c","updated":"2022-02-16 00:53:08.000000000","message":"not sure what\u0027s more right.  this feels right for the CI side, anyway","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"}],"playbooks/zuul/roles/encrypt-logs/tasks/main.yaml":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"b84242c65fa9a997efc4ed5eb8db42c6c86dfa78","unresolved":true,"context_lines":[{"line_number":22,"context_line":"          - name: Encrypted logs"},{"line_number":23,"context_line":"            url: \u0027{{ encrypt_logs_artifact_path }}\u0027"},{"line_number":24,"context_line":"            metadata:"},{"line_number":25,"context_line":"              logfiles: \"{{ encrypt_logs_files | map(\u0027basename\u0027) | map(\u0027regex_replace\u0027, \u0027^(.*)$\u0027, \u0027\\\\1.gpg\u0027) | list }}\""}],"source_content_type":"text/x-yaml","patch_set":34,"id":"9df325a0_c06d3a76","line":25,"updated":"2022-02-16 00:38:08.000000000","message":"Might be worth a comment here indicating logfiles is the metadata that the download script looks up to know what files are available to download.","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"2333fc0101252dbd2a2b458c6126b9e3374816be","unresolved":false,"context_lines":[{"line_number":22,"context_line":"          - name: Encrypted logs"},{"line_number":23,"context_line":"            url: \u0027{{ encrypt_logs_artifact_path }}\u0027"},{"line_number":24,"context_line":"            metadata:"},{"line_number":25,"context_line":"              logfiles: \"{{ encrypt_logs_files | map(\u0027basename\u0027) | map(\u0027regex_replace\u0027, \u0027^(.*)$\u0027, \u0027\\\\1.gpg\u0027) | list }}\""}],"source_content_type":"text/x-yaml","patch_set":34,"id":"a35f5a03_a932c738","line":25,"in_reply_to":"9df325a0_c06d3a76","updated":"2022-02-16 00:53:08.000000000","message":"Done","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"}],"playbooks/zuul/roles/encrypt-logs/templates/download-logs.sh.j2":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"b84242c65fa9a997efc4ed5eb8db42c6c86dfa78","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    local exit_code\u003d0"},{"line_number":51,"context_line":"    local xtra_args\u003d\"--compressed\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"       if [[ \"${file}\" \u003d\u003d *.xz ]]; then"},{"line_number":54,"context_line":"        xtra_args\u003d\"\""},{"line_number":55,"context_line":"    fi"},{"line_number":56,"context_line":"    curl -s ${xtra_args} -o $(basename \"${file}\") \"${file}\" || exit_code\u003d$?"}],"source_content_type":"text/x-jinja2","patch_set":34,"id":"de941e78_a63f2c0f","line":53,"updated":"2022-02-16 00:38:08.000000000","message":"Nit the indentation here and in a couple places in this function is inconsistent.\n\nAlso do we need to worry about .xz files? they should all be .gpg aiui.","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"b84242c65fa9a997efc4ed5eb8db42c6c86dfa78","unresolved":true,"context_lines":[{"line_number":57,"context_line":"    if [[ $exit_code -ne 0 ]]; then"},{"line_number":58,"context_line":"        log \"Failed to download ${base_url}${file}; skipping\""},{"line_number":59,"context_line":"    fi"},{"line_number":60,"context_line":"       if [[ \"${file}\" \u003d\u003d *.gz ]]; then"},{"line_number":61,"context_line":"        local type\u003d$(file \"${file}\")"},{"line_number":62,"context_line":"        if [[ \"${type}\" \u003d~ \"ASCII text\" ]] || [[ \"${type}\" \u003d~ \"Unicode text\" ]]; then"},{"line_number":63,"context_line":"            local new_name\u003d${file%.gz}"}],"source_content_type":"text/x-jinja2","patch_set":34,"id":"644d0d82_a2a805d9","line":60,"updated":"2022-02-16 00:38:08.000000000","message":"See above.","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"2333fc0101252dbd2a2b458c6126b9e3374816be","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    if [[ $exit_code -ne 0 ]]; then"},{"line_number":58,"context_line":"        log \"Failed to download ${base_url}${file}; skipping\""},{"line_number":59,"context_line":"    fi"},{"line_number":60,"context_line":"       if [[ \"${file}\" \u003d\u003d *.gz ]]; then"},{"line_number":61,"context_line":"        local type\u003d$(file \"${file}\")"},{"line_number":62,"context_line":"        if [[ \"${type}\" \u003d~ \"ASCII text\" ]] || [[ \"${type}\" \u003d~ \"Unicode text\" ]]; then"},{"line_number":63,"context_line":"            local new_name\u003d${file%.gz}"}],"source_content_type":"text/x-jinja2","patch_set":34,"id":"3c6e0471_2be47584","line":60,"in_reply_to":"644d0d82_a2a805d9","updated":"2022-02-16 00:53:08.000000000","message":"Done","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"b84242c65fa9a997efc4ed5eb8db42c6c86dfa78","unresolved":true,"context_lines":[{"line_number":91,"context_line":"for f in ${DOWNLOAD_DIR}/*.gpg; do"},{"line_number":92,"context_line":"    log \"Decrypting $(basename $f)\""},{"line_number":93,"context_line":"    gpg --output ${f/.gpg/} --decrypt ${f}"},{"line_number":94,"context_line":"    rm ${f}"},{"line_number":95,"context_line":"done"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"popd \u003e/dev/null"}],"source_content_type":"text/x-jinja2","patch_set":34,"id":"53ac630c_f9df8e73","line":94,"updated":"2022-02-16 00:38:08.000000000","message":"A flag to keep the encrypted files may be useful. Maybe not though. Definitely not needed on the first iteration.","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"2333fc0101252dbd2a2b458c6126b9e3374816be","unresolved":false,"context_lines":[{"line_number":91,"context_line":"for f in ${DOWNLOAD_DIR}/*.gpg; do"},{"line_number":92,"context_line":"    log \"Decrypting $(basename $f)\""},{"line_number":93,"context_line":"    gpg --output ${f/.gpg/} --decrypt ${f}"},{"line_number":94,"context_line":"    rm ${f}"},{"line_number":95,"context_line":"done"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"popd \u003e/dev/null"}],"source_content_type":"text/x-jinja2","patch_set":34,"id":"9f086289_603ea390","line":94,"in_reply_to":"53ac630c_f9df8e73","updated":"2022-02-16 00:53:08.000000000","message":"to KISS maybe leave it like this for now; you can grab the files directly from the UI","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"}],"playbooks/zuul/run-base.yaml":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"b84242c65fa9a997efc4ed5eb8db42c6c86dfa78","unresolved":true,"context_lines":[{"line_number":92,"context_line":"    - name: Display group membership"},{"line_number":93,"context_line":"      command: ansible localhost -m debug -a \u0027var\u003dgroups\u0027"},{"line_number":94,"context_line":"    - name: Run base.yaml"},{"line_number":95,"context_line":"      shell: \u0027ansible-playbook -f 50 -v /home/zuul/src/opendev.org/opendev/system-config/playbooks/base.yaml \u003e /var/log/ansible/base.yaml.log 2\u003e\u00261\u0027"},{"line_number":96,"context_line":"    - name: Run bridge service playbook"},{"line_number":97,"context_line":"      shell: \u0027ansible-playbook -v /home/zuul/src/opendev.org/opendev/system-config/playbooks/service-bridge.yaml \u003e /var/log/ansible/service-bridge.yaml.log 2\u003e\u00261\u0027"},{"line_number":98,"context_line":"    - name: Run dstat logger playbook"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"46ca6109_7852dfa6","line":95,"updated":"2022-02-16 00:38:08.000000000","message":"Can we tee all of these files instaed so that they continue to go to the console log? We are in the system-config-run context here so that should be safe.","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"2333fc0101252dbd2a2b458c6126b9e3374816be","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    - name: Display group membership"},{"line_number":93,"context_line":"      command: ansible localhost -m debug -a \u0027var\u003dgroups\u0027"},{"line_number":94,"context_line":"    - name: Run base.yaml"},{"line_number":95,"context_line":"      shell: \u0027ansible-playbook -f 50 -v /home/zuul/src/opendev.org/opendev/system-config/playbooks/base.yaml \u003e /var/log/ansible/base.yaml.log 2\u003e\u00261\u0027"},{"line_number":96,"context_line":"    - name: Run bridge service playbook"},{"line_number":97,"context_line":"      shell: \u0027ansible-playbook -v /home/zuul/src/opendev.org/opendev/system-config/playbooks/service-bridge.yaml \u003e /var/log/ansible/service-bridge.yaml.log 2\u003e\u00261\u0027"},{"line_number":98,"context_line":"    - name: Run dstat logger playbook"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"923431ce_3fbaf294","line":95,"in_reply_to":"46ca6109_7852dfa6","updated":"2022-02-16 00:53:08.000000000","message":"This was a concious choice because I don\u0027t think the logs are that well formatted in the console output.  But as it changes the status-quo, it\u0027s probably better as a separate follow-on which i can propose, and put this back to a \"tee\" model","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"ac52b14483a6584b08fa9c07bd345d9b9ae46808","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    - name: Display group membership"},{"line_number":93,"context_line":"      command: ansible localhost -m debug -a \u0027var\u003dgroups\u0027"},{"line_number":94,"context_line":"    - name: Run base.yaml"},{"line_number":95,"context_line":"      shell: \u0027ansible-playbook -f 50 -v /home/zuul/src/opendev.org/opendev/system-config/playbooks/base.yaml \u003e /var/log/ansible/base.yaml.log 2\u003e\u00261\u0027"},{"line_number":96,"context_line":"    - name: Run bridge service playbook"},{"line_number":97,"context_line":"      shell: \u0027ansible-playbook -v /home/zuul/src/opendev.org/opendev/system-config/playbooks/service-bridge.yaml \u003e /var/log/ansible/service-bridge.yaml.log 2\u003e\u00261\u0027"},{"line_number":98,"context_line":"    - name: Run dstat logger playbook"}],"source_content_type":"text/x-yaml","patch_set":34,"id":"4d686593_6e528e5f","line":95,"in_reply_to":"923431ce_3fbaf294","updated":"2022-02-16 00:58:48.000000000","message":"I\u0027m happy to keep this as is if others prefer keeping the streaming output cleaner.","commit_id":"da13d8dbc4592c792e060cb18bdc388363f0cf26"}]}
