From 09b4cae4fb1d3f8ddf6effd8f3841f1e4ed48114 Mon Sep 17 00:00:00 2001 From: Sloane Hertel <19572925+s-hertel@users.noreply.github.com> Date: Wed, 24 May 2023 11:56:37 -0400 Subject: [PATCH] unarchive - ensure src is an absolute path before picking handler (#80738) --- changelogs/fragments/80738-abs-unarachive-src.yml | 2 ++ lib/ansible/modules/unarchive.py | 3 +++ test/integration/targets/unarchive/runme.sh | 8 ++++++++ test/integration/targets/unarchive/runme.yml | 4 ++++ .../targets/unarchive/test_relative_tmp_dir.yml | 10 ++++++++++ 5 files changed, 27 insertions(+) create mode 100644 changelogs/fragments/80738-abs-unarachive-src.yml create mode 100755 test/integration/targets/unarchive/runme.sh create mode 100644 test/integration/targets/unarchive/runme.yml create mode 100644 test/integration/targets/unarchive/test_relative_tmp_dir.yml diff --git a/changelogs/fragments/80738-abs-unarachive-src.yml b/changelogs/fragments/80738-abs-unarachive-src.yml new file mode 100644 index 00000000000..f90c0356738 --- /dev/null +++ b/changelogs/fragments/80738-abs-unarachive-src.yml @@ -0,0 +1,2 @@ +bugfixes: + - unarchive - fix unarchiving sources that are copied to the remote node using a relative temporory directory path (https://github.com/ansible/ansible/issues/80710). diff --git a/lib/ansible/modules/unarchive.py b/lib/ansible/modules/unarchive.py index 3bb6b834cf7..d811a5c8ed6 100644 --- a/lib/ansible/modules/unarchive.py +++ b/lib/ansible/modules/unarchive.py @@ -1054,6 +1054,9 @@ def main(): if not os.access(src, os.R_OK): module.fail_json(msg="Source '%s' not readable" % src) + # ensure src is an absolute path before picking handlers + src = os.path.abspath(src) + # skip working with 0 size archives try: if os.path.getsize(src) == 0: diff --git a/test/integration/targets/unarchive/runme.sh b/test/integration/targets/unarchive/runme.sh new file mode 100755 index 00000000000..5351a0c2455 --- /dev/null +++ b/test/integration/targets/unarchive/runme.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -eux + +ansible-playbook -i ../../inventory runme.yml -v "$@" + +# https://github.com/ansible/ansible/issues/80710 +ANSIBLE_REMOTE_TMP=./ansible ansible-playbook -i ../../inventory test_relative_tmp_dir.yml -v "$@" diff --git a/test/integration/targets/unarchive/runme.yml b/test/integration/targets/unarchive/runme.yml new file mode 100644 index 00000000000..ddcd6095ebb --- /dev/null +++ b/test/integration/targets/unarchive/runme.yml @@ -0,0 +1,4 @@ +- hosts: all + gather_facts: no + roles: + - { role: ../unarchive } diff --git a/test/integration/targets/unarchive/test_relative_tmp_dir.yml b/test/integration/targets/unarchive/test_relative_tmp_dir.yml new file mode 100644 index 00000000000..f368f7a6806 --- /dev/null +++ b/test/integration/targets/unarchive/test_relative_tmp_dir.yml @@ -0,0 +1,10 @@ +- hosts: all + gather_facts: no + tasks: + - include_role: + name: ../setup_remote_tmp_dir + - include_role: + name: ../setup_gnutar + - include_tasks: tasks/prepare_tests.yml + + - include_tasks: tasks/test_tar.yml