# STDOUT: ---v---v---v---v---v--- ansible-playbook 2.9.27 config file = /etc/ansible/ansible.cfg configured module search path = ['/home/jenkins/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /opt/ansible-2.9/lib/python3.9/site-packages/ansible executable location = /opt/ansible-2.9/bin/ansible-playbook python version = 3.9.18 (main, Sep 7 2023, 00:00:00) [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)] Using /etc/ansible/ansible.cfg as config file Skipping callback 'actionable', as we already have a stdout callback. Skipping callback 'counter_enabled', as we already have a stdout callback. Skipping callback 'debug', as we already have a stdout callback. Skipping callback 'dense', as we already have a stdout callback. Skipping callback 'dense', as we already have a stdout callback. Skipping callback 'full_skip', as we already have a stdout callback. Skipping callback 'json', as we already have a stdout callback. Skipping callback 'minimal', as we already have a stdout callback. Skipping callback 'null', as we already have a stdout callback. Skipping callback 'oneline', as we already have a stdout callback. Skipping callback 'selective', as we already have a stdout callback. Skipping callback 'skippy', as we already have a stdout callback. Skipping callback 'stderr', as we already have a stdout callback. Skipping callback 'unixy', as we already have a stdout callback. Skipping callback 'yaml', as we already have a stdout callback. PLAYBOOK: tests_global_config.yml ********************************************** 1 plays in /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml PLAY [Test we can write global config with default configuration] ************** TASK [Gathering Facts] ********************************************************* task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:2 Wednesday 24 July 2024 17:52:34 +0000 (0:00:00.012) 0:00:00.012 ******** ok: [sut] META: ran handlers TASK [Backup configuration files] ********************************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:11 Wednesday 24 July 2024 17:52:35 +0000 (0:00:00.682) 0:00:00.695 ******** included: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/backup.yml for sut TASK [Setup] ******************************************************************* task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/backup.yml:2 Wednesday 24 July 2024 17:52:35 +0000 (0:00:00.012) 0:00:00.707 ******** included: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/setup.yml for sut TASK [Ensure facts used by test] *********************************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/setup.yml:2 Wednesday 24 July 2024 17:52:35 +0000 (0:00:00.013) 0:00:00.721 ******** skipping: [sut] => { "changed": false, "skip_reason": "Conditional result was False" } TASK [Check if system is ostree] *********************************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/setup.yml:10 Wednesday 24 July 2024 17:52:35 +0000 (0:00:00.019) 0:00:00.740 ******** ok: [sut] => { "changed": false, "stat": { "exists": false } } TASK [Set flag to indicate system is ostree] *********************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/setup.yml:15 Wednesday 24 July 2024 17:52:35 +0000 (0:00:00.212) 0:00:00.953 ******** ok: [sut] => { "ansible_facts": { "__ssh_is_ostree": false }, "changed": false } TASK [Make sure openssh is installed before creating backup] ******************* task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/setup.yml:19 Wednesday 24 July 2024 17:52:35 +0000 (0:00:00.022) 0:00:00.975 ******** ok: [sut] => { "changed": false, "rc": 0, "results": [ "openssh-clients-7.4p1-23.el7_9.x86_64 providing openssh-clients is already installed" ] } TASK [Define common variables] ************************************************* task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/setup.yml:32 Wednesday 24 July 2024 17:52:35 +0000 (0:00:00.453) 0:00:01.429 ******** ok: [sut] => { "ansible_facts": { "main_ssh_config": "/etc/ssh/ssh_config", "main_ssh_config_name": "ssh_config", "main_ssh_config_path": "/etc/ssh/" }, "changed": false } TASK [Define specific variables] *********************************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/setup.yml:38 Wednesday 24 July 2024 17:52:35 +0000 (0:00:00.009) 0:00:01.438 ******** skipping: [sut] => { "changed": false, "skip_reason": "Conditional result was False" } TASK [Create a temporary directory for backup files] *************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/backup.yml:5 Wednesday 24 July 2024 17:52:36 +0000 (0:00:00.046) 0:00:01.484 ******** ok: [sut] => { "changed": false, "gid": 0, "group": "root", "mode": "0700", "owner": "root", "path": "/tmp/ansible.8O3xYZ", "secontext": "unconfined_u:object_r:user_tmp_t:s0", "size": 4096, "state": "directory", "uid": 0 } TASK [Backup files] ************************************************************ task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/backup.yml:13 Wednesday 24 July 2024 17:52:36 +0000 (0:00:00.177) 0:00:01.662 ******** ok: [sut] => (item=/etc/ssh/ssh_config.d/00-ansible.conf) => { "ansible_loop_var": "item", "changed": false, "cmd": "if test -f /etc/ssh/ssh_config.d/00-ansible.conf; then\n mkdir -p /tmp/ansible.8O3xYZ/$(dirname /etc/ssh/ssh_config.d/00-ansible.conf);\n cp -a /etc/ssh/ssh_config.d/00-ansible.conf /tmp/ansible.8O3xYZ/$(dirname /etc/ssh/ssh_config.d/00-ansible.conf)\nfi\n", "delta": "0:00:00.003276", "end": "2024-07-24 17:52:36.382840", "item": "/etc/ssh/ssh_config.d/00-ansible.conf", "rc": 0, "start": "2024-07-24 17:52:36.379564" } ok: [sut] => (item=/etc/ssh/ssh_config) => { "ansible_loop_var": "item", "changed": false, "cmd": "if test -f /etc/ssh/ssh_config; then\n mkdir -p /tmp/ansible.8O3xYZ/$(dirname /etc/ssh/ssh_config);\n cp -a /etc/ssh/ssh_config /tmp/ansible.8O3xYZ/$(dirname /etc/ssh/ssh_config)\nfi\n", "delta": "0:00:00.150241", "end": "2024-07-24 17:52:36.653067", "item": "/etc/ssh/ssh_config", "rc": 0, "start": "2024-07-24 17:52:36.502826" } TASK [Run role] **************************************************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:14 Wednesday 24 July 2024 17:52:36 +0000 (0:00:00.457) 0:00:02.119 ******** TASK [linux-system-roles.ssh : Set platform/version specific variables] ******** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/main.yml:2 Wednesday 24 July 2024 17:52:36 +0000 (0:00:00.016) 0:00:02.136 ******** included: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml for sut TASK [linux-system-roles.ssh : Ensure ansible_facts used by role] ************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml:2 Wednesday 24 July 2024 17:52:36 +0000 (0:00:00.013) 0:00:02.150 ******** skipping: [sut] => { "changed": false, "skip_reason": "Conditional result was False" } TASK [linux-system-roles.ssh : Check if system is ostree] ********************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml:11 Wednesday 24 July 2024 17:52:36 +0000 (0:00:00.020) 0:00:02.170 ******** skipping: [sut] => { "changed": false, "skip_reason": "Conditional result was False" } TASK [linux-system-roles.ssh : Set flag to indicate system is ostree] ********** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml:16 Wednesday 24 July 2024 17:52:36 +0000 (0:00:00.022) 0:00:02.193 ******** skipping: [sut] => { "changed": false, "skip_reason": "Conditional result was False" } TASK [linux-system-roles.ssh : Check if transactional-update exists in /sbin] *** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml:23 Wednesday 24 July 2024 17:52:36 +0000 (0:00:00.020) 0:00:02.213 ******** ok: [sut] => { "changed": false, "stat": { "exists": false } } TASK [linux-system-roles.ssh : Set flag if transactional-update exists] ******** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml:28 Wednesday 24 July 2024 17:52:36 +0000 (0:00:00.130) 0:00:02.344 ******** ok: [sut] => { "ansible_facts": { "__ssh_is_transactional": false }, "changed": false } TASK [linux-system-roles.ssh : Set platform/version specific variables] ******** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml:32 Wednesday 24 July 2024 17:52:36 +0000 (0:00:00.021) 0:00:02.366 ******** skipping: [sut] => (item=RedHat.yml) => { "ansible_loop_var": "item", "changed": false, "item": "RedHat.yml", "skip_reason": "Conditional result was False" } skipping: [sut] => (item=CentOS.yml) => { "ansible_loop_var": "item", "changed": false, "item": "CentOS.yml", "skip_reason": "Conditional result was False" } ok: [sut] => (item=CentOS_7.yml) => { "ansible_facts": { "__ssh_defaults": { "Host": { "Condition": "*", "ForwardX11Trusted": true, "GSSAPIAuthentication": true, "SendEnv": [ "LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES", "LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT", "LC_IDENTIFICATION LC_ALL LANGUAGE", "XMODIFIERS" ] } } }, "ansible_included_var_files": [ "/WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/vars/CentOS_7.yml" ], "ansible_loop_var": "item", "changed": false, "item": "CentOS_7.yml" } skipping: [sut] => (item=CentOS_7.9.yml) => { "ansible_loop_var": "item", "changed": false, "item": "CentOS_7.9.yml", "skip_reason": "Conditional result was False" } TASK [linux-system-roles.ssh : Ensure required packages are installed] ********* task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/main.yml:5 Wednesday 24 July 2024 17:52:36 +0000 (0:00:00.039) 0:00:02.405 ******** ok: [sut] => { "changed": false, "rc": 0, "results": [ "openssh-7.4p1-23.el7_9.x86_64 providing openssh is already installed", "openssh-clients-7.4p1-23.el7_9.x86_64 providing openssh-clients is already installed" ] } TASK [linux-system-roles.ssh : Notify user that reboot is needed to apply changes] *** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/main.yml:18 Wednesday 24 July 2024 17:52:37 +0000 (0:00:00.357) 0:00:02.762 ******** skipping: [sut] => {} TASK [linux-system-roles.ssh : Reboot transactional update systems] ************ task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/main.yml:23 Wednesday 24 July 2024 17:52:37 +0000 (0:00:00.019) 0:00:02.782 ******** skipping: [sut] => { "changed": false, "skip_reason": "Conditional result was False" } TASK [linux-system-roles.ssh : Fail if reboot is needed and not set] *********** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/main.yml:28 Wednesday 24 July 2024 17:52:37 +0000 (0:00:00.019) 0:00:02.801 ******** skipping: [sut] => { "changed": false, "skip_reason": "Conditional result was False" } TASK [linux-system-roles.ssh : Gather information about the user for user configuration] *** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/main.yml:36 Wednesday 24 July 2024 17:52:37 +0000 (0:00:00.018) 0:00:02.820 ******** skipping: [sut] => { "changed": false, "skip_reason": "Conditional result was False" } TASK [linux-system-roles.ssh : Make sure the ~/.ssh/ directory exists and has expected permissions] *** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/main.yml:43 Wednesday 24 July 2024 17:52:37 +0000 (0:00:00.018) 0:00:02.839 ******** skipping: [sut] => { "changed": false, "skip_reason": "Conditional result was False" } TASK [linux-system-roles.ssh : Generate the configuration file] **************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/main.yml:54 Wednesday 24 July 2024 17:52:37 +0000 (0:00:00.019) 0:00:02.858 ******** changed: [sut] => { "backup_file": "/etc/ssh/ssh_config.12907.2024-07-24@17:52:37~", "changed": true, "checksum": "e72ee863ad2cb903ff31aa1390f928653dcca09b", "dest": "/etc/ssh/ssh_config", "gid": 0, "group": "root", "md5sum": "d529a2ab50b3e0be9baacaca804cee83", "mode": "0644", "owner": "root", "secontext": "system_u:object_r:etc_t:s0", "size": 565, "src": "/root/.ansible/tmp/ansible-tmp-1721843557.4532678-2799-109307967489483/source", "state": "file", "uid": 0 } TASK [Download the global configuration file] ********************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:42 Wednesday 24 July 2024 17:52:38 +0000 (0:00:00.600) 0:00:03.459 ******** ok: [sut] => { "changed": false, "content": "IwojIEFuc2libGUgbWFuYWdlZAojCiMgc3lzdGVtX3JvbGU6c3NoCgpDb21wcmVzc2lvbiB5ZXMKQ29udHJvbE1hc3RlciBhdXRvCkNvbnRyb2xQYXRoIH4vLnNzaC8uY20lQwpGb3J3YXJkWDExIG5vCkdTU0FQSUF1dGhlbnRpY2F0aW9uIG5vCk1hdGNoIGFsbAogIEdTU0FQSUF1dGhlbnRpY2F0aW9uIHllcwpNYXRjaCBleGVjIHRydWUKICBVc2VyIG5vYm9keQpIb3N0IGV4YW1wbGUKICBIb3N0bmFtZSBleGFtcGxlLmNvbQogIFVzZXIgc29tZWJvZHkKSG9zdCAqCiAgRm9yd2FyZFgxMVRydXN0ZWQgeWVzCiAgR1NTQVBJQXV0aGVudGljYXRpb24geWVzCiAgU2VuZEVudiBMQU5HIExDX0NUWVBFIExDX05VTUVSSUMgTENfVElNRSBMQ19DT0xMQVRFIExDX01PTkVUQVJZIExDX01FU1NBR0VTCiAgU2VuZEVudiBMQ19QQVBFUiBMQ19OQU1FIExDX0FERFJFU1MgTENfVEVMRVBIT05FIExDX01FQVNVUkVNRU5UCiAgU2VuZEVudiBMQ19JREVOVElGSUNBVElPTiBMQ19BTEwgTEFOR1VBR0UKICBTZW5kRW52IFhNT0RJRklFUlMKSG9zdCBsb2NhbAogIEhvc3RuYW1lIGxvY2FsLmV4YW1wbGUuY29tCg==", "encoding": "base64", "source": "/etc/ssh/ssh_config" } TASK [Verify the options are in the file] ************************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:47 Wednesday 24 July 2024 17:52:38 +0000 (0:00:00.211) 0:00:03.670 ******** ok: [sut] => { "changed": false } MSG: All assertions passed TASK [Verify the defaults are not in the drop-in file] ************************* task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:66 Wednesday 24 July 2024 17:52:38 +0000 (0:00:00.035) 0:00:03.705 ******** skipping: [sut] => { "changed": false, "skip_reason": "Conditional result was False" } TASK [Check header for ansible_managed, fingerprint] *************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:74 Wednesday 24 July 2024 17:52:38 +0000 (0:00:00.022) 0:00:03.727 ******** included: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/check_header.yml for sut TASK [Get file] **************************************************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/check_header.yml:3 Wednesday 24 July 2024 17:52:38 +0000 (0:00:00.015) 0:00:03.743 ******** skipping: [sut] => { "changed": false, "skip_reason": "Conditional result was False" } TASK [Check for presence of ansible managed header, fingerprint] *************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/check_header.yml:9 Wednesday 24 July 2024 17:52:38 +0000 (0:00:00.020) 0:00:03.764 ******** ok: [sut] => { "changed": false } MSG: All assertions passed TASK [Restore configuration files] ********************************************* task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:80 Wednesday 24 July 2024 17:52:38 +0000 (0:00:00.030) 0:00:03.794 ******** included: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/restore.yml for sut TASK [Restore backed up files and remove what was not present] ***************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/restore.yml:2 Wednesday 24 July 2024 17:52:38 +0000 (0:00:00.010) 0:00:03.804 ******** ok: [sut] => (item=/etc/ssh/ssh_config.d/00-ansible.conf) => { "ansible_loop_var": "item", "changed": false, "cmd": "if test -f /tmp/ansible.8O3xYZ//etc/ssh/ssh_config.d/00-ansible.conf; then\n cp -a /tmp/ansible.8O3xYZ//etc/ssh/ssh_config.d/00-ansible.conf $(dirname /etc/ssh/ssh_config.d/00-ansible.conf)\nelif test -f /etc/ssh/ssh_config.d/00-ansible.conf; then\n rm /etc/ssh/ssh_config.d/00-ansible.conf\nfi\n", "delta": "0:00:00.003266", "end": "2024-07-24 17:52:38.477471", "item": "/etc/ssh/ssh_config.d/00-ansible.conf", "rc": 0, "start": "2024-07-24 17:52:38.474205" } ok: [sut] => (item=/etc/ssh/ssh_config) => { "ansible_loop_var": "item", "changed": false, "cmd": "if test -f /tmp/ansible.8O3xYZ//etc/ssh/ssh_config; then\n cp -a /tmp/ansible.8O3xYZ//etc/ssh/ssh_config $(dirname /etc/ssh/ssh_config)\nelif test -f /etc/ssh/ssh_config; then\n rm /etc/ssh/ssh_config\nfi\n", "delta": "0:00:00.005941", "end": "2024-07-24 17:52:38.596774", "item": "/etc/ssh/ssh_config", "rc": 0, "start": "2024-07-24 17:52:38.590833" } TASK [Remove temporary directory for backup files] ***************************** task path: /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/restore.yml:15 Wednesday 24 July 2024 17:52:38 +0000 (0:00:00.258) 0:00:04.063 ******** ok: [sut] => { "changed": false, "path": "/tmp/ansible.8O3xYZ", "state": "absent" } META: ran handlers META: ran handlers PLAY RECAP ********************************************************************* sut : ok=22 changed=1 unreachable=0 failed=0 skipped=12 rescued=0 ignored=0 Wednesday 24 July 2024 17:52:38 +0000 (0:00:00.213) 0:00:04.276 ******** =============================================================================== Gathering Facts --------------------------------------------------------- 0.68s /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:2 linux-system-roles.ssh : Generate the configuration file ---------------- 0.60s /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/main.yml:54 Backup files ------------------------------------------------------------ 0.46s /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/backup.yml:13 --- Make sure openssh is installed before creating backup ------------------- 0.45s /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/setup.yml:19 ---- linux-system-roles.ssh : Ensure required packages are installed --------- 0.36s /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/main.yml:5 Restore backed up files and remove what was not present ----------------- 0.26s /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/restore.yml:2 --- Remove temporary directory for backup files ----------------------------- 0.21s /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/restore.yml:15 -- Check if system is ostree ----------------------------------------------- 0.21s /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/setup.yml:10 ---- Download the global configuration file ---------------------------------- 0.21s /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:42 Create a temporary directory for backup files --------------------------- 0.18s /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/backup.yml:5 ---- linux-system-roles.ssh : Check if transactional-update exists in /sbin --- 0.13s /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml:23 Define specific variables ----------------------------------------------- 0.05s /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/setup.yml:38 ---- linux-system-roles.ssh : Set platform/version specific variables -------- 0.04s /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml:32 Verify the options are in the file -------------------------------------- 0.04s /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:47 Check for presence of ansible managed header, fingerprint --------------- 0.03s /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/check_header.yml:9 linux-system-roles.ssh : Check if system is ostree ---------------------- 0.02s /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml:11 Verify the defaults are not in the drop-in file ------------------------- 0.02s /WORKDIR/git-support_transactional_update1_23726u/tests/tests_global_config.yml:66 Set flag to indicate system is ostree ----------------------------------- 0.02s /WORKDIR/git-support_transactional_update1_23726u/tests/tasks/setup.yml:15 ---- linux-system-roles.ssh : Set flag if transactional-update exists -------- 0.02s /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml:28 linux-system-roles.ssh : Set flag to indicate system is ostree ---------- 0.02s /WORKDIR/git-support_transactional_update1_23726u/tests/roles/linux-system-roles.ssh/tasks/set_vars.yml:16 ---^---^---^---^---^--- # STDERR: ---v---v---v---v---v--- ---^---^---^---^---^---