From 8a754e0858d922e955e71b253c139e071ecec432 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 18:04:21 +0200 Subject: Adding upstream version 2.14.3. Signed-off-by: Daniel Baumann --- .../targets/ansible/adhoc-callback.stdout | 12 +++ test/integration/targets/ansible/aliases | 2 + .../targets/ansible/ansible-test\303\251.cfg" | 3 + .../ansible/callback_plugins/callback_debug.py | 24 ++++++ .../ansible/callback_plugins/callback_meta.py | 23 ++++++ .../ansible/module_common_regex_regression.sh | 15 ++++ test/integration/targets/ansible/no-extension | 2 + test/integration/targets/ansible/playbook.yml | 8 ++ .../targets/ansible/playbookdir_cfg.ini | 2 + test/integration/targets/ansible/runme.sh | 86 ++++++++++++++++++++++ test/integration/targets/ansible/vars.yml | 1 + 11 files changed, 178 insertions(+) create mode 100644 test/integration/targets/ansible/adhoc-callback.stdout create mode 100644 test/integration/targets/ansible/aliases create mode 100644 "test/integration/targets/ansible/ansible-test\303\251.cfg" create mode 100644 test/integration/targets/ansible/callback_plugins/callback_debug.py create mode 100644 test/integration/targets/ansible/callback_plugins/callback_meta.py create mode 100755 test/integration/targets/ansible/module_common_regex_regression.sh create mode 100644 test/integration/targets/ansible/no-extension create mode 100644 test/integration/targets/ansible/playbook.yml create mode 100644 test/integration/targets/ansible/playbookdir_cfg.ini create mode 100755 test/integration/targets/ansible/runme.sh create mode 100644 test/integration/targets/ansible/vars.yml (limited to 'test/integration/targets/ansible') diff --git a/test/integration/targets/ansible/adhoc-callback.stdout b/test/integration/targets/ansible/adhoc-callback.stdout new file mode 100644 index 0000000..05a93dd --- /dev/null +++ b/test/integration/targets/ansible/adhoc-callback.stdout @@ -0,0 +1,12 @@ +v2_playbook_on_start +v2_on_any +v2_playbook_on_play_start +v2_on_any +v2_playbook_on_task_start +v2_on_any +v2_runner_on_start +v2_on_any +v2_runner_on_ok +v2_on_any +v2_playbook_on_stats +v2_on_any diff --git a/test/integration/targets/ansible/aliases b/test/integration/targets/ansible/aliases new file mode 100644 index 0000000..8278ec8 --- /dev/null +++ b/test/integration/targets/ansible/aliases @@ -0,0 +1,2 @@ +shippable/posix/group3 +context/controller diff --git "a/test/integration/targets/ansible/ansible-test\303\251.cfg" "b/test/integration/targets/ansible/ansible-test\303\251.cfg" new file mode 100644 index 0000000..09af947 --- /dev/null +++ "b/test/integration/targets/ansible/ansible-test\303\251.cfg" @@ -0,0 +1,3 @@ +[defaults] +remote_user = admin +collections_paths = /tmp/collections diff --git a/test/integration/targets/ansible/callback_plugins/callback_debug.py b/test/integration/targets/ansible/callback_plugins/callback_debug.py new file mode 100644 index 0000000..2462c1f --- /dev/null +++ b/test/integration/targets/ansible/callback_plugins/callback_debug.py @@ -0,0 +1,24 @@ +# (c) 2020 Ansible Project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +from ansible.plugins.callback import CallbackBase + + +class CallbackModule(CallbackBase): + CALLBACK_VERSION = 2.0 + CALLBACK_TYPE = 'stdout' + CALLBACK_NAME = 'callback_debug' + + def __init__(self, *args, **kwargs): + super(CallbackModule, self).__init__(*args, **kwargs) + self._display.display('__init__') + + for cb in [x for x in dir(CallbackBase) if x.startswith('v2_')]: + delattr(CallbackBase, cb) + + def __getattr__(self, name): + if name.startswith('v2_'): + return lambda *args, **kwargs: self._display.display(name) diff --git a/test/integration/targets/ansible/callback_plugins/callback_meta.py b/test/integration/targets/ansible/callback_plugins/callback_meta.py new file mode 100644 index 0000000..e19c80f --- /dev/null +++ b/test/integration/targets/ansible/callback_plugins/callback_meta.py @@ -0,0 +1,23 @@ +# (c) 2020 Ansible Project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +from ansible.plugins.callback import CallbackBase +import os + + +class CallbackModule(CallbackBase): + CALLBACK_VERSION = 2.0 + CALLBACK_TYPE = 'stdout' + CALLBACK_NAME = 'callback_meta' + + def __init__(self, *args, **kwargs): + super(CallbackModule, self).__init__(*args, **kwargs) + self.wants_implicit_tasks = os.environ.get('CB_WANTS_IMPLICIT', False) + + def v2_playbook_on_task_start(self, task, is_conditional): + if task.implicit: + self._display.display('saw implicit task') + self._display.display(task.get_name()) diff --git a/test/integration/targets/ansible/module_common_regex_regression.sh b/test/integration/targets/ansible/module_common_regex_regression.sh new file mode 100755 index 0000000..4869f4f --- /dev/null +++ b/test/integration/targets/ansible/module_common_regex_regression.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +# #74270 -- ensure we escape directory names before passing to re.compile() +# particularly in module_common. + +set -eux + +lib_path=$(python -c 'import os, ansible; print(os.path.dirname(os.path.dirname(ansible.__file__)))') +bad_dir="${OUTPUT_DIR}/ansi[ble" + +mkdir "${bad_dir}" +cp -a "${lib_path}" "${bad_dir}" + +PYTHONPATH="${bad_dir}/lib" ansible -m ping localhost -i ../../inventory "$@" +rm -rf "${bad_dir}" diff --git a/test/integration/targets/ansible/no-extension b/test/integration/targets/ansible/no-extension new file mode 100644 index 0000000..61a99f4 --- /dev/null +++ b/test/integration/targets/ansible/no-extension @@ -0,0 +1,2 @@ +[defaults] +remote_user = admin diff --git a/test/integration/targets/ansible/playbook.yml b/test/integration/targets/ansible/playbook.yml new file mode 100644 index 0000000..69c9b2b --- /dev/null +++ b/test/integration/targets/ansible/playbook.yml @@ -0,0 +1,8 @@ +- hosts: all + gather_facts: false + tasks: + - debug: + msg: "{{ username }}" + + - name: explicitly refresh inventory + meta: refresh_inventory diff --git a/test/integration/targets/ansible/playbookdir_cfg.ini b/test/integration/targets/ansible/playbookdir_cfg.ini new file mode 100644 index 0000000..16670c5 --- /dev/null +++ b/test/integration/targets/ansible/playbookdir_cfg.ini @@ -0,0 +1,2 @@ +[defaults] +playbook_dir = /doesnotexist/tmp diff --git a/test/integration/targets/ansible/runme.sh b/test/integration/targets/ansible/runme.sh new file mode 100755 index 0000000..e9e72a9 --- /dev/null +++ b/test/integration/targets/ansible/runme.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +set -eux -o pipefail + +ansible --version +ansible --help + +ansible testhost -i ../../inventory -m ping "$@" +ansible testhost -i ../../inventory -m setup "$@" + +ansible-config view -c ./ansible-testé.cfg | grep 'remote_user = admin' +ansible-config dump -c ./ansible-testé.cfg | grep 'DEFAULT_REMOTE_USER([^)]*) = admin\>' +ANSIBLE_REMOTE_USER=administrator ansible-config dump| grep 'DEFAULT_REMOTE_USER([^)]*) = administrator\>' +ansible-config list | grep 'DEFAULT_REMOTE_USER' + +# Collection +ansible-config view -c ./ansible-testé.cfg | grep 'collections_paths = /tmp/collections' +ansible-config dump -c ./ansible-testé.cfg | grep 'COLLECTIONS_PATHS([^)]*) =' +ANSIBLE_COLLECTIONS_PATHS=/tmp/collections ansible-config dump| grep 'COLLECTIONS_PATHS([^)]*) =' +ansible-config list | grep 'COLLECTIONS_PATHS' + +# 'view' command must fail when config file is missing or has an invalid file extension +ansible-config view -c ./ansible-non-existent.cfg 2> err1.txt || grep -Eq 'ERROR! The provided configuration file is missing or not accessible:' err1.txt || (cat err*.txt; rm -f err1.txt; exit 1) +ansible-config view -c ./no-extension 2> err2.txt || grep -q 'Unsupported configuration file extension' err2.txt || (cat err2.txt; rm -f err*.txt; exit 1) +rm -f err*.txt + +# test setting playbook_dir via envvar +ANSIBLE_PLAYBOOK_DIR=/doesnotexist/tmp ansible localhost -m debug -a var=playbook_dir | grep '"playbook_dir": "/doesnotexist/tmp"' + +# test setting playbook_dir via cmdline +ansible localhost -m debug -a var=playbook_dir --playbook-dir=/doesnotexist/tmp | grep '"playbook_dir": "/doesnotexist/tmp"' + +# test setting playbook dir via ansible.cfg +env -u ANSIBLE_PLAYBOOK_DIR ANSIBLE_CONFIG=./playbookdir_cfg.ini ansible localhost -m debug -a var=playbook_dir | grep '"playbook_dir": "/doesnotexist/tmp"' + +# test adhoc callback triggers +ANSIBLE_STDOUT_CALLBACK=callback_debug ANSIBLE_LOAD_CALLBACK_PLUGINS=1 ansible --playbook-dir . testhost -i ../../inventory -m ping | grep -E '^v2_' | diff -u adhoc-callback.stdout - + +# CB_WANTS_IMPLICIT isn't anything in Ansible itself. +# Our test cb plugin just accepts it. It lets us avoid copypasting the whole +# plugin just for two tests. +CB_WANTS_IMPLICIT=1 ANSIBLE_STDOUT_CALLBACK=callback_meta ANSIBLE_LOAD_CALLBACK_PLUGINS=1 ansible-playbook -i ../../inventory --extra-vars @./vars.yml playbook.yml | grep 'saw implicit task' + +set +e +if ANSIBLE_STDOUT_CALLBACK=callback_meta ANSIBLE_LOAD_CALLBACK_PLUGINS=1 ansible-playbook -i ../../inventory --extra-vars @./vars.yml playbook.yml | grep 'saw implicit task'; then + echo "Callback got implicit task and should not have" + exit 1 +fi +set -e + +# Test that no tmp dirs are left behind when running ansible-config +TMP_DIR=~/.ansible/tmptest +if [[ -d "$TMP_DIR" ]]; then + rm -rf "$TMP_DIR" +fi +ANSIBLE_LOCAL_TEMP="$TMP_DIR" ansible-config list > /dev/null +ANSIBLE_LOCAL_TEMP="$TMP_DIR" ansible-config dump > /dev/null +ANSIBLE_LOCAL_TEMP="$TMP_DIR" ansible-config view > /dev/null + +# wc on macOS is dumb and returns leading spaces +file_count=$(find "$TMP_DIR" -type d -maxdepth 1 | wc -l | sed 's/^ *//') +if [[ $file_count -ne 1 ]]; then + echo "$file_count temporary files were left behind by ansible-config" + if [[ -d "$TMP_DIR" ]]; then + rm -rf "$TMP_DIR" + fi + exit 1 +fi + +# Ensure extra vars filename is prepended with '@' sign +if ansible-playbook -i ../../inventory --extra-vars /tmp/non-existing-file playbook.yml; then + echo "extra_vars filename without '@' sign should cause failure" + exit 1 +fi + +# Ensure extra vars filename is prepended with '@' sign +if ansible-playbook -i ../../inventory --extra-vars ./vars.yml playbook.yml; then + echo "extra_vars filename without '@' sign should cause failure" + exit 1 +fi + +ansible-playbook -i ../../inventory --extra-vars @./vars.yml playbook.yml + +# #74270 -- ensure we escape directory names before passing to re.compile() +# particularly in module_common. +bash module_common_regex_regression.sh diff --git a/test/integration/targets/ansible/vars.yml b/test/integration/targets/ansible/vars.yml new file mode 100644 index 0000000..a19e454 --- /dev/null +++ b/test/integration/targets/ansible/vars.yml @@ -0,0 +1 @@ +username: ansiboy -- cgit v1.2.3