2026-03-25 08:53:38.754380 | Job console starting 2026-03-25 08:53:38.776871 | Updating git repos 2026-03-25 08:53:38.827716 | Cloning repos into workspace 2026-03-25 08:53:38.912423 | Restoring repo states 2026-03-25 08:53:38.925390 | Merging changes 2026-03-25 08:53:39.321600 | Checking out repos 2026-03-25 08:53:39.416113 | Preparing playbooks 2026-03-25 08:53:40.696919 | Running Ansible setup 2026-03-25 08:53:45.112492 | PRE-RUN START: [trusted : github.com/vexxhost/zuul-config/playbooks/base/pre.yaml@main] 2026-03-25 08:53:45.735814 | 2026-03-25 08:53:45.735981 | PLAY [localhost] 2026-03-25 08:53:45.744288 | 2026-03-25 08:53:45.744415 | TASK [Gathering Facts] 2026-03-25 08:53:46.630980 | localhost | ok 2026-03-25 08:53:46.648759 | 2026-03-25 08:53:46.649028 | TASK [Setup log path fact] 2026-03-25 08:53:46.676810 | localhost | ok 2026-03-25 08:53:46.710411 | 2026-03-25 08:53:46.710622 | TASK [set-zuul-log-path-fact : Set log path for a build] 2026-03-25 08:53:46.741933 | localhost | ok 2026-03-25 08:53:46.760563 | 2026-03-25 08:53:46.760732 | TASK [emit-job-header : Print job information] 2026-03-25 08:53:46.803688 | # Job Information 2026-03-25 08:53:46.803885 | Ansible Version: 2.16.16 2026-03-25 08:53:46.804105 | Job: pre-commit 2026-03-25 08:53:46.804160 | Pipeline: check 2026-03-25 08:53:46.804192 | Executor: 0a8996d2b663 2026-03-25 08:53:46.804221 | Triggered by: https://github.com/vexxhost/ansible-collection-kubernetes/pull/243 2026-03-25 08:53:46.804253 | Event ID: fb3c88c0-2827-11f1-9dbc-0dc8c89972c1 2026-03-25 08:53:46.809863 | 2026-03-25 08:53:46.809961 | LOOP [emit-job-header : Print node information] 2026-03-25 08:53:46.911586 | localhost | ok: 2026-03-25 08:53:46.912280 | localhost | # Node Information 2026-03-25 08:53:46.912325 | localhost | Inventory Hostname: ubuntu-noble 2026-03-25 08:53:46.912351 | localhost | Hostname: np0000160487 2026-03-25 08:53:46.912372 | localhost | Username: zuul 2026-03-25 08:53:46.912394 | localhost | Distro: Ubuntu 24.04 2026-03-25 08:53:46.912414 | localhost | Provider: yul1 2026-03-25 08:53:46.912433 | localhost | Region: ca-ymq-1 2026-03-25 08:53:46.912452 | localhost | Label: ubuntu-noble 2026-03-25 08:53:46.912470 | localhost | Product Name: OpenStack Nova 2026-03-25 08:53:46.912487 | localhost | Interface IP: 199.204.45.57 2026-03-25 08:53:46.935483 | 2026-03-25 08:53:46.935770 | TASK [log-inventory : Ensure Zuul Ansible directory exists] 2026-03-25 08:53:47.337258 | localhost -> localhost | changed 2026-03-25 08:53:47.342450 | 2026-03-25 08:53:47.342542 | TASK [log-inventory : Copy ansible inventory to logs dir] 2026-03-25 08:53:48.270444 | localhost -> localhost | changed 2026-03-25 08:53:48.278909 | 2026-03-25 08:53:48.278991 | PLAY [all] 2026-03-25 08:53:48.288266 | 2026-03-25 08:53:48.288337 | TASK [add-build-sshkey : Check to see if ssh key was already created for this build] 2026-03-25 08:53:48.517412 | ubuntu-noble -> localhost | ok 2026-03-25 08:53:48.529417 | 2026-03-25 08:53:48.529532 | TASK [add-build-sshkey : Create a new key in workspace based on build UUID] 2026-03-25 08:53:48.565151 | ubuntu-noble | ok 2026-03-25 08:53:48.579988 | ubuntu-noble | included: /var/lib/zuul/builds/12da12e29564475696bf92342a63b424/trusted/project_1/opendev.org/zuul/zuul-jobs/roles/add-build-sshkey/tasks/create-key-and-replace.yaml 2026-03-25 08:53:48.586211 | 2026-03-25 08:53:48.586274 | TASK [add-build-sshkey : Create Temp SSH key] 2026-03-25 08:53:49.897646 | ubuntu-noble -> localhost | Generating public/private rsa key pair. 2026-03-25 08:53:49.897895 | ubuntu-noble -> localhost | Your identification has been saved in /var/lib/zuul/builds/12da12e29564475696bf92342a63b424/work/12da12e29564475696bf92342a63b424_id_rsa 2026-03-25 08:53:49.897940 | ubuntu-noble -> localhost | Your public key has been saved in /var/lib/zuul/builds/12da12e29564475696bf92342a63b424/work/12da12e29564475696bf92342a63b424_id_rsa.pub 2026-03-25 08:53:49.897973 | ubuntu-noble -> localhost | The key fingerprint is: 2026-03-25 08:53:49.898003 | ubuntu-noble -> localhost | SHA256:fw4Ja0Ua6EJf3tUzcDDoXLCrXcj5P1zTt8sgxTnjYM4 zuul-build-sshkey 2026-03-25 08:53:49.898052 | ubuntu-noble -> localhost | The key's randomart image is: 2026-03-25 08:53:49.898082 | ubuntu-noble -> localhost | +---[RSA 3072]----+ 2026-03-25 08:53:49.898119 | ubuntu-noble -> localhost | | .o+.. | 2026-03-25 08:53:49.898150 | ubuntu-noble -> localhost | | . ...= | 2026-03-25 08:53:49.898179 | ubuntu-noble -> localhost | | . . ooo.. + | 2026-03-25 08:53:49.898207 | ubuntu-noble -> localhost | | . o o *o=. .o | 2026-03-25 08:53:49.898234 | ubuntu-noble -> localhost | | . o S Bo.* .| 2026-03-25 08:53:49.898262 | ubuntu-noble -> localhost | | . B+++ o.+| 2026-03-25 08:53:49.898289 | ubuntu-noble -> localhost | | + =Eo+ .+| 2026-03-25 08:53:49.898316 | ubuntu-noble -> localhost | | . +..=. | 2026-03-25 08:53:49.898347 | ubuntu-noble -> localhost | | . .+.| 2026-03-25 08:53:49.898375 | ubuntu-noble -> localhost | +----[SHA256]-----+ 2026-03-25 08:53:49.898438 | ubuntu-noble -> localhost | ok: Runtime: 0:00:00.822818 2026-03-25 08:53:49.905780 | 2026-03-25 08:53:49.905852 | TASK [add-build-sshkey : Remote setup ssh keys (linux)] 2026-03-25 08:53:49.940842 | ubuntu-noble | ok 2026-03-25 08:53:49.950744 | ubuntu-noble | included: /var/lib/zuul/builds/12da12e29564475696bf92342a63b424/trusted/project_1/opendev.org/zuul/zuul-jobs/roles/add-build-sshkey/tasks/remote-linux.yaml 2026-03-25 08:53:49.958559 | 2026-03-25 08:53:49.958621 | TASK [add-build-sshkey : Remove previously added zuul-build-sshkey] 2026-03-25 08:53:49.983695 | ubuntu-noble | skipping: Conditional result was False 2026-03-25 08:53:49.993930 | 2026-03-25 08:53:49.993993 | TASK [add-build-sshkey : Enable access via build key on all nodes] 2026-03-25 08:53:50.742954 | ubuntu-noble | changed 2026-03-25 08:53:50.749910 | 2026-03-25 08:53:50.750024 | TASK [add-build-sshkey : Make sure user has a .ssh] 2026-03-25 08:53:50.985291 | ubuntu-noble | ok 2026-03-25 08:53:50.992949 | 2026-03-25 08:53:50.993069 | TASK [add-build-sshkey : Install build private key as SSH key on all nodes] 2026-03-25 08:53:51.651359 | ubuntu-noble | changed 2026-03-25 08:53:51.672230 | 2026-03-25 08:53:51.672387 | TASK [add-build-sshkey : Install build public key as SSH key on all nodes] 2026-03-25 08:53:52.251474 | ubuntu-noble | changed 2026-03-25 08:53:52.667994 | 2026-03-25 08:53:52.668142 | TASK [add-build-sshkey : Remote setup ssh keys (windows)] 2026-03-25 08:53:52.693406 | ubuntu-noble | skipping: Conditional result was False 2026-03-25 08:53:52.707256 | 2026-03-25 08:53:52.707391 | TASK [remove-zuul-sshkey : Remove master key from local agent] 2026-03-25 08:53:53.067093 | ubuntu-noble -> localhost | changed 2026-03-25 08:53:53.082242 | 2026-03-25 08:53:53.082325 | TASK [add-build-sshkey : Add back temp key] 2026-03-25 08:53:53.351336 | ubuntu-noble -> localhost | Identity added: /var/lib/zuul/builds/12da12e29564475696bf92342a63b424/work/12da12e29564475696bf92342a63b424_id_rsa (zuul-build-sshkey) 2026-03-25 08:53:53.351576 | ubuntu-noble -> localhost | ok: Runtime: 0:00:00.013205 2026-03-25 08:53:53.357150 | 2026-03-25 08:53:53.357213 | TASK [add-build-sshkey : Verify we can still SSH to all nodes] 2026-03-25 08:53:53.704046 | ubuntu-noble | ok 2026-03-25 08:53:53.709815 | 2026-03-25 08:53:53.709881 | TASK [add-build-sshkey : Verify we can still SSH to all nodes (windows)] 2026-03-25 08:53:53.734444 | ubuntu-noble | skipping: Conditional result was False 2026-03-25 08:53:53.764314 | 2026-03-25 08:53:53.764472 | TASK [prepare-workspace : Start zuul_console daemon.] 2026-03-25 08:53:54.138247 | ubuntu-noble | ok 2026-03-25 08:53:54.147952 | 2026-03-25 08:53:54.148124 | TASK [prepare-workspace : Synchronize src repos to workspace directory.] 2026-03-25 08:53:55.374570 | ubuntu-noble | Output suppressed because no_log was given 2026-03-25 08:53:55.492004 | 2026-03-25 08:53:55.492187 | LOOP [ensure-output-dirs : Empty Zuul Output directories by removing them] 2026-03-25 08:53:55.740995 | ubuntu-noble | ok: "logs" 2026-03-25 08:53:55.812696 | ubuntu-noble | ok: All items complete 2026-03-25 08:53:55.812885 | 2026-03-25 08:53:55.943302 | ubuntu-noble | ok: "artifacts" 2026-03-25 08:53:56.137507 | ubuntu-noble | ok: "docs" 2026-03-25 08:53:56.148373 | 2026-03-25 08:53:56.148528 | LOOP [ensure-output-dirs : Ensure Zuul Output directories exist] 2026-03-25 08:53:56.384268 | ubuntu-noble | changed: "logs" 2026-03-25 08:53:56.581049 | ubuntu-noble | changed: "artifacts" 2026-03-25 08:53:56.805606 | ubuntu-noble | changed: "docs" 2026-03-25 08:53:56.814765 | 2026-03-25 08:53:56.814871 | PLAY RECAP 2026-03-25 08:53:56.814918 | localhost | ok: 6 changed: 2 unreachable: 0 failed: 0 skipped: 0 rescued: 0 ignored: 0 2026-03-25 08:53:56.814949 | ubuntu-noble | ok: 15 changed: 8 unreachable: 0 failed: 0 skipped: 3 rescued: 0 ignored: 0 2026-03-25 08:53:56.814971 | 2026-03-25 08:53:56.989669 | PRE-RUN END RESULT_NORMAL: [trusted : github.com/vexxhost/zuul-config/playbooks/base/pre.yaml@main] 2026-03-25 08:53:57.017610 | PRE-RUN START: [untrusted : github.com/vexxhost/zuul-jobs/playbooks/pre-commit/pre.yaml@main] 2026-03-25 08:53:57.594527 | 2026-03-25 08:53:57.594662 | PLAY [all] 2026-03-25 08:53:57.607108 | 2026-03-25 08:53:57.607187 | TASK [setup-uv : Extract archive] 2026-03-25 08:54:00.381298 | ubuntu-noble | changed 2026-03-25 08:54:00.387916 | 2026-03-25 08:54:00.388015 | TASK [setup-uv : Print version] 2026-03-25 08:54:00.657905 | ubuntu-noble | uv 0.8.13 2026-03-25 08:54:00.917477 | ubuntu-noble | ok: Runtime: 0:00:00.015277 2026-03-25 08:54:00.925770 | 2026-03-25 08:54:00.925853 | PLAY RECAP 2026-03-25 08:54:00.925912 | ubuntu-noble | ok: 2 changed: 2 unreachable: 0 failed: 0 skipped: 0 rescued: 0 ignored: 0 2026-03-25 08:54:00.925943 | 2026-03-25 08:54:01.056111 | PRE-RUN END RESULT_NORMAL: [untrusted : github.com/vexxhost/zuul-jobs/playbooks/pre-commit/pre.yaml@main] 2026-03-25 08:54:01.058870 | RUN START: [untrusted : github.com/vexxhost/zuul-jobs/playbooks/pre-commit/run.yaml@main] 2026-03-25 08:54:01.691725 | 2026-03-25 08:54:01.692168 | PLAY [all] 2026-03-25 08:54:01.703226 | 2026-03-25 08:54:01.703309 | TASK [Run "pre-commit"] 2026-03-25 08:54:02.174541 | ubuntu-noble | Downloading virtualenv (5.6MiB) 2026-03-25 08:54:02.259505 | ubuntu-noble | Downloading virtualenv 2026-03-25 08:54:02.274041 | ubuntu-noble | Installed 10 packages in 14ms 2026-03-25 08:54:03.777347 | ubuntu-noble | [INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks. 2026-03-25 08:54:05.137069 | ubuntu-noble | [WARNING] repo `https://github.com/pre-commit/pre-commit-hooks` uses deprecated stage names (commit, push) which will be removed in a future version. Hint: often `pre-commit autoupdate --repo https://github.com/pre-commit/pre-commit-hooks` will fix this. if it does not -- consider reporting an issue to that repo. 2026-03-25 08:54:05.142836 | ubuntu-noble | [INFO] Initializing environment for https://github.com/psf/black. 2026-03-25 08:54:07.572799 | ubuntu-noble | [INFO] Initializing environment for https://github.com/pycqa/flake8. 2026-03-25 08:54:08.855834 | ubuntu-noble | [INFO] Initializing environment for https://github.com/pycqa/isort. 2026-03-25 08:54:10.603576 | ubuntu-noble | [WARNING] repo `https://github.com/pycqa/isort` uses deprecated stage names (commit, merge-commit, push) which will be removed in a future version. Hint: often `pre-commit autoupdate --repo https://github.com/pycqa/isort` will fix this. if it does not -- consider reporting an issue to that repo. 2026-03-25 08:54:10.605439 | ubuntu-noble | [INFO] Initializing environment for https://github.com/adrienverge/yamllint.git. 2026-03-25 08:54:11.094161 | ubuntu-noble | [INFO] Initializing environment for https://github.com/ansible/ansible-lint.git. 2026-03-25 08:54:11.983977 | ubuntu-noble | [INFO] Initializing environment for https://github.com/ansible/ansible-lint.git:ansible-core>=2.16.0. 2026-03-25 08:54:12.915996 | ubuntu-noble | [INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks. 2026-03-25 08:54:12.916072 | ubuntu-noble | [INFO] Once installed this environment will be reused. 2026-03-25 08:54:12.916088 | ubuntu-noble | [INFO] This may take a few minutes... 2026-03-25 08:54:18.635288 | ubuntu-noble | [INFO] Installing environment for https://github.com/psf/black. 2026-03-25 08:54:18.635370 | ubuntu-noble | [INFO] Once installed this environment will be reused. 2026-03-25 08:54:18.635375 | ubuntu-noble | [INFO] This may take a few minutes... 2026-03-25 08:54:23.801041 | ubuntu-noble | [INFO] Installing environment for https://github.com/pycqa/flake8. 2026-03-25 08:54:23.801108 | ubuntu-noble | [INFO] Once installed this environment will be reused. 2026-03-25 08:54:23.801115 | ubuntu-noble | [INFO] This may take a few minutes... 2026-03-25 08:54:28.943765 | ubuntu-noble | [INFO] Installing environment for https://github.com/pycqa/isort. 2026-03-25 08:54:28.943839 | ubuntu-noble | [INFO] Once installed this environment will be reused. 2026-03-25 08:54:28.943846 | ubuntu-noble | [INFO] This may take a few minutes... 2026-03-25 08:54:32.549795 | ubuntu-noble | [INFO] Installing environment for https://github.com/adrienverge/yamllint.git. 2026-03-25 08:54:32.549898 | ubuntu-noble | [INFO] Once installed this environment will be reused. 2026-03-25 08:54:32.549915 | ubuntu-noble | [INFO] This may take a few minutes... 2026-03-25 08:54:37.893439 | ubuntu-noble | [INFO] Installing environment for https://github.com/ansible/ansible-lint.git. 2026-03-25 08:54:37.893528 | ubuntu-noble | [INFO] Once installed this environment will be reused. 2026-03-25 08:54:37.893542 | ubuntu-noble | [INFO] This may take a few minutes... 2026-03-25 08:54:53.573875 | ubuntu-noble | fix end of files.........................................................Passed 2026-03-25 08:54:53.643728 | ubuntu-noble | trim trailing whitespace.................................................Passed 2026-03-25 08:54:54.070172 | ubuntu-noble | black....................................................................Passed 2026-03-25 08:54:54.427635 | ubuntu-noble | flake8...................................................................Passed 2026-03-25 08:54:54.568294 | ubuntu-noble | isort....................................................................Passed 2026-03-25 08:54:54.897823 | ubuntu-noble | yamllint.................................................................Passed 2026-03-25 08:56:02.205340 | ubuntu-noble | Ansible-lint.............................................................Passed 2026-03-25 08:56:02.380188 | ubuntu-noble | ok: Runtime: 0:02:00.264106 2026-03-25 08:56:02.383447 | 2026-03-25 08:56:02.383535 | PLAY RECAP 2026-03-25 08:56:02.383621 | ubuntu-noble | ok: 1 changed: 1 unreachable: 0 failed: 0 skipped: 0 rescued: 0 ignored: 0 2026-03-25 08:56:02.383669 | 2026-03-25 08:56:02.513866 | RUN END RESULT_NORMAL: [untrusted : github.com/vexxhost/zuul-jobs/playbooks/pre-commit/run.yaml@main] 2026-03-25 08:56:02.526860 | POST-RUN START: [trusted : github.com/vexxhost/zuul-config/playbooks/base/post.yaml@main] 2026-03-25 08:56:03.105638 | 2026-03-25 08:56:03.105764 | PLAY [all] 2026-03-25 08:56:03.117194 | 2026-03-25 08:56:03.117274 | TASK [fetch-output : Set log path for multiple nodes] 2026-03-25 08:56:03.161824 | ubuntu-noble | skipping: Conditional result was False 2026-03-25 08:56:03.172991 | 2026-03-25 08:56:03.173073 | TASK [fetch-output : Set log path for single node] 2026-03-25 08:56:03.218824 | ubuntu-noble | ok 2026-03-25 08:56:03.225700 | 2026-03-25 08:56:03.225793 | LOOP [fetch-output : Ensure local output dirs] 2026-03-25 08:56:03.639330 | ubuntu-noble -> localhost | ok: "/var/lib/zuul/builds/12da12e29564475696bf92342a63b424/work/logs" 2026-03-25 08:56:03.884579 | ubuntu-noble -> localhost | changed: "/var/lib/zuul/builds/12da12e29564475696bf92342a63b424/work/artifacts" 2026-03-25 08:56:04.100578 | ubuntu-noble -> localhost | changed: "/var/lib/zuul/builds/12da12e29564475696bf92342a63b424/work/docs" 2026-03-25 08:56:04.116833 | 2026-03-25 08:56:04.117019 | LOOP [fetch-output : Collect logs, artifacts and docs] 2026-03-25 08:56:04.810836 | ubuntu-noble | ok 2026-03-25 08:56:04.811115 | ubuntu-noble | changed: All items complete 2026-03-25 08:56:04.811146 | 2026-03-25 08:56:05.297827 | ubuntu-noble | changed: .d..t...... ./ 2026-03-25 08:56:05.775348 | ubuntu-noble | changed: .d..t...... ./ 2026-03-25 08:56:05.794662 | 2026-03-25 08:56:05.794841 | LOOP [merge-output-to-logs : Move artifacts and docs to logs dir] 2026-03-25 08:56:06.221156 | ubuntu-noble -> localhost | ok: Item: artifacts Runtime: 0:00:00.009486 2026-03-25 08:56:06.450083 | ubuntu-noble -> localhost | ok: Item: docs Runtime: 0:00:00.007452 2026-03-25 08:56:06.473919 | 2026-03-25 08:56:06.474207 | PLAY [all] 2026-03-25 08:56:06.481328 | 2026-03-25 08:56:06.481410 | TASK [remove-build-sshkey : Remove the build SSH key from all nodes] 2026-03-25 08:56:06.951041 | ubuntu-noble | changed 2026-03-25 08:56:06.959048 | 2026-03-25 08:56:06.959100 | PLAY RECAP 2026-03-25 08:56:06.959145 | ubuntu-noble | ok: 5 changed: 4 unreachable: 0 failed: 0 skipped: 1 rescued: 0 ignored: 0 2026-03-25 08:56:06.959167 | 2026-03-25 08:56:07.096758 | POST-RUN END RESULT_NORMAL: [trusted : github.com/vexxhost/zuul-config/playbooks/base/post.yaml@main] 2026-03-25 08:56:07.100072 | POST-RUN START: [trusted : github.com/vexxhost/zuul-config/playbooks/base/post-logs.yaml@main] 2026-03-25 08:56:07.694700 | 2026-03-25 08:56:07.694891 | PLAY [localhost] 2026-03-25 08:56:07.705947 | 2026-03-25 08:56:07.706073 | TASK [Generate Zuul manifest] 2026-03-25 08:56:07.729677 | localhost | ok 2026-03-25 08:56:07.746951 | 2026-03-25 08:56:07.747135 | TASK [generate-zuul-manifest : Generate Zuul manifest] 2026-03-25 08:56:08.074736 | localhost | changed 2026-03-25 08:56:08.089146 | 2026-03-25 08:56:08.089296 | TASK [generate-zuul-manifest : Return Zuul manifest URL to Zuul] 2026-03-25 08:56:08.121607 | localhost | ok 2026-03-25 08:56:08.131829 | 2026-03-25 08:56:08.131943 | TASK [Upload logs] 2026-03-25 08:56:08.165012 | localhost | ok 2026-03-25 08:56:08.229081 | 2026-03-25 08:56:08.229229 | TASK [Set zuul-log-path fact] 2026-03-25 08:56:08.249966 | localhost | ok 2026-03-25 08:56:08.265188 | 2026-03-25 08:56:08.265321 | TASK [set-zuul-log-path-fact : Set log path for a build] 2026-03-25 08:56:08.298210 | localhost | ok 2026-03-25 08:56:08.307594 | 2026-03-25 08:56:08.307695 | TASK [upload-logs : Create log directories] 2026-03-25 08:56:08.701792 | localhost | changed 2026-03-25 08:56:08.706457 | 2026-03-25 08:56:08.706529 | TASK [upload-logs : Ensure logs are readable before uploading] 2026-03-25 08:56:09.161482 | localhost -> localhost | ok: Runtime: 0:00:00.004996 2026-03-25 08:56:09.168025 | 2026-03-25 08:56:09.168097 | TASK [upload-logs : Upload logs to log server] 2026-03-25 08:56:09.631294 | localhost | Output suppressed because no_log was given 2026-03-25 08:56:09.635163 | 2026-03-25 08:56:09.635244 | LOOP [upload-logs : Compress console log and json output] 2026-03-25 08:56:09.678319 | localhost | skipping: Conditional result was False 2026-03-25 08:56:09.685337 | localhost | skipping: Conditional result was False 2026-03-25 08:56:09.700196 | 2026-03-25 08:56:09.700415 | LOOP [upload-logs : Upload compressed console log and json output] 2026-03-25 08:56:09.742466 | localhost | skipping: Conditional result was False 2026-03-25 08:56:09.742786 | 2026-03-25 08:56:09.747083 | localhost | skipping: Conditional result was False 2026-03-25 08:56:09.763131 | 2026-03-25 08:56:09.763323 | LOOP [upload-logs : Upload console log and json output]