summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/ansible
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/targets/ansible')
-rw-r--r--test/integration/targets/ansible/adhoc-callback.stdout12
-rw-r--r--test/integration/targets/ansible/aliases2
-rw-r--r--test/integration/targets/ansible/ansible-testé.cfg3
-rw-r--r--test/integration/targets/ansible/callback_plugins/callback_debug.py24
-rw-r--r--test/integration/targets/ansible/callback_plugins/callback_meta.py23
-rwxr-xr-xtest/integration/targets/ansible/module_common_regex_regression.sh15
-rw-r--r--test/integration/targets/ansible/no-extension2
-rw-r--r--test/integration/targets/ansible/playbook.yml8
-rw-r--r--test/integration/targets/ansible/playbookdir_cfg.ini2
-rwxr-xr-xtest/integration/targets/ansible/runme.sh86
-rw-r--r--test/integration/targets/ansible/vars.yml1
11 files changed, 178 insertions, 0 deletions
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é.cfg b/test/integration/targets/ansible/ansible-testé.cfg
new file mode 100644
index 0000000..09af947
--- /dev/null
+++ b/test/integration/targets/ansible/ansible-testé.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