Make ansible-test
show a nice log message on non-executable runme.sh
#84598
Open
Description
Summary
I saw ansible-test tracebacking with a PermissionError
when a runme.sh
committer forgets to chmod +x runme.sh
.
Let's process that exception and show a clear error message with instructions for the caller on fixing that mistake.
Issue Type
Bug Report
Component Name
ansible-test
Ansible Version
devel
Configuration
N/A
OS / Environment
Any CI / testing env.
Steps to Reproduce
Create a chmod -x runme.sh
and run ansible-test
against that integration target.
Expected Results
A log message (AnsibleError
ish?) instead of a traceback.
Actual Results
Traceback (most recent call last):
File "/root/ansible/bin/ansible-test", line 44, in <module>
main()
File "/root/ansible/bin/ansible-test", line 35, in main
cli_main(args)
File "/root/ansible/test/lib/ansible_test/_internal/__init__.py", line 65, in main
main_internal(cli_args)
File "/root/ansible/test/lib/ansible_test/_internal/__init__.py", line 91, in main_internal
args.func(config)
File "/root/ansible/test/lib/ansible_test/_internal/commands/integration/posix.py", line 48, in command_posix_integration
command_integration_filtered(args, host_state, internal_targets, all_targets, inventory_path, pre_target=pre_target, post_target=post_target)
File "/root/ansible/test/lib/ansible_test/_internal/commands/integration/__init__.py", line 510, in command_integration_filtered
command_integration_script(args, host_state, target, test_dir, inventory_path, coverage_manager)
File "/root/ansible/test/lib/ansible_test/_internal/commands/integration/__init__.py", line 631, in command_integration_script
cover_python(args, host_state.controller_profile.python, cmd, target.name, env, cwd=cwd, capture=False)
File "/root/ansible/test/lib/ansible_test/_internal/coverage_util.py", line 160, in cover_python
return intercept_python(args, python, cmd, env, capture, data, cwd)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/ansible/test/lib/ansible_test/_internal/util_common.py", line 467, in intercept_python
return run_command(args, cmd, capture=capture, env=env, data=data, cwd=cwd, always=always)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/ansible/test/lib/ansible_test/_internal/util_common.py", line 488, in run_command
return raw_command(
^^^^^^^^^^^^
File "/root/ansible/test/lib/ansible_test/_internal/util.py", line 517, in raw_command
process = subprocess.Popen(cmd_bytes, env=env_bytes, stdin=stdin, stdout=stdout, stderr=stderr, cwd=cwd) # pylint: disable=consider-using-with
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.12/subprocess.py", line 1026, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib64/python3.12/subprocess.py", line 1955, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
PermissionError: [Errno 13] Permission denied: b'./runme.sh'
Originally posted by @webknjaz in #80146 (comment)
Code of Conduct
- I agree to follow the Ansible Code of Conduct