Skip to content

Make ansible-test show a nice log message on non-executable runme.sh #84598

Open
@webknjaz

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 (AnsibleErrorish?) 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

Metadata

Assignees

Labels

bugThis issue/PR relates to a bug.

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions