summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/ansible-runner
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/targets/ansible-runner')
-rw-r--r--test/integration/targets/ansible-runner/aliases6
-rw-r--r--test/integration/targets/ansible-runner/files/adhoc_example1.py26
-rw-r--r--test/integration/targets/ansible-runner/files/constraints.txt5
-rw-r--r--test/integration/targets/ansible-runner/files/playbook_example1.py38
-rw-r--r--test/integration/targets/ansible-runner/filter_plugins/parse.py17
-rw-r--r--test/integration/targets/ansible-runner/inventory1
-rwxr-xr-xtest/integration/targets/ansible-runner/runme.sh5
-rw-r--r--test/integration/targets/ansible-runner/tasks/adhoc_example1.yml16
-rw-r--r--test/integration/targets/ansible-runner/tasks/main.yml5
-rw-r--r--test/integration/targets/ansible-runner/tasks/playbook_example1.yml16
-rw-r--r--test/integration/targets/ansible-runner/tasks/setup.yml19
-rw-r--r--test/integration/targets/ansible-runner/test.yml3
12 files changed, 157 insertions, 0 deletions
diff --git a/test/integration/targets/ansible-runner/aliases b/test/integration/targets/ansible-runner/aliases
new file mode 100644
index 00000000..ec9eb3af
--- /dev/null
+++ b/test/integration/targets/ansible-runner/aliases
@@ -0,0 +1,6 @@
+shippable/posix/group3
+skip/python3
+skip/aix
+skip/osx
+skip/macos
+skip/freebsd
diff --git a/test/integration/targets/ansible-runner/files/adhoc_example1.py b/test/integration/targets/ansible-runner/files/adhoc_example1.py
new file mode 100644
index 00000000..3e0d8414
--- /dev/null
+++ b/test/integration/targets/ansible-runner/files/adhoc_example1.py
@@ -0,0 +1,26 @@
+import json
+import os
+import sys
+import ansible_runner
+
+# the first positional arg should be where the artifacts live
+output_dir = sys.argv[1]
+
+# this calls a single module directly, aka "adhoc" mode
+r = ansible_runner.run(
+ private_data_dir=output_dir,
+ host_pattern='localhost',
+ module='shell',
+ module_args='whoami'
+)
+
+data = {
+ 'rc': r.rc,
+ 'status': r.status,
+ 'events': [x['event'] for x in r.events],
+ 'stats': r.stats
+}
+
+# insert this header for the flask controller
+print('#STARTJSON')
+json.dump(data, sys.stdout)
diff --git a/test/integration/targets/ansible-runner/files/constraints.txt b/test/integration/targets/ansible-runner/files/constraints.txt
new file mode 100644
index 00000000..c3e39402
--- /dev/null
+++ b/test/integration/targets/ansible-runner/files/constraints.txt
@@ -0,0 +1,5 @@
+psutil < 5.7.0 # Greater than this version breaks on older pip
+pexpect >= 4.5, <= 4.8.0
+python-daemon <= 2.2.4
+pyyaml < 5.1 ; python_version < '2.7' # pyyaml 5.1 and later require python 2.7 or later
+six <= 1.14.0
diff --git a/test/integration/targets/ansible-runner/files/playbook_example1.py b/test/integration/targets/ansible-runner/files/playbook_example1.py
new file mode 100644
index 00000000..83cb19ff
--- /dev/null
+++ b/test/integration/targets/ansible-runner/files/playbook_example1.py
@@ -0,0 +1,38 @@
+import json
+import os
+import sys
+import ansible_runner
+
+
+PLAYBOOK = '''
+- hosts: localhost
+ gather_facts: False
+ tasks:
+ - set_fact:
+ foo: bar
+'''
+
+# the first positional arg should be where the artifacts live
+output_dir = sys.argv[1]
+
+invdir = os.path.join(output_dir, 'inventory')
+if not os.path.isdir(invdir):
+ os.makedirs(invdir)
+with open(os.path.join(invdir, 'hosts'), 'w') as f:
+ f.write('localhost\n')
+pbfile = os.path.join(output_dir, 'test.yml')
+with open(pbfile, 'w') as f:
+ f.write(PLAYBOOK)
+
+r = ansible_runner.run(private_data_dir=output_dir, playbook='test.yml')
+
+data = {
+ 'rc': r.rc,
+ 'status': r.status,
+ 'events': [x['event'] for x in r.events],
+ 'stats': r.stats
+}
+
+# insert this header for the flask controller
+print('#STARTJSON')
+json.dump(data, sys.stdout)
diff --git a/test/integration/targets/ansible-runner/filter_plugins/parse.py b/test/integration/targets/ansible-runner/filter_plugins/parse.py
new file mode 100644
index 00000000..7842f6c6
--- /dev/null
+++ b/test/integration/targets/ansible-runner/filter_plugins/parse.py
@@ -0,0 +1,17 @@
+from __future__ import (absolute_import, division, print_function)
+
+__metaclass__ = type
+
+import re
+import json
+
+
+def parse_json(value):
+ return json.dumps(json.loads(re.sub('^.*\n#STARTJSON\n', '', value, flags=re.DOTALL)), indent=4, sort_keys=True)
+
+
+class FilterModule(object):
+ def filters(self):
+ return {
+ 'parse_json': parse_json,
+ }
diff --git a/test/integration/targets/ansible-runner/inventory b/test/integration/targets/ansible-runner/inventory
new file mode 100644
index 00000000..009f6c33
--- /dev/null
+++ b/test/integration/targets/ansible-runner/inventory
@@ -0,0 +1 @@
+# no hosts required, test only requires implicit localhost
diff --git a/test/integration/targets/ansible-runner/runme.sh b/test/integration/targets/ansible-runner/runme.sh
new file mode 100755
index 00000000..384de80f
--- /dev/null
+++ b/test/integration/targets/ansible-runner/runme.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+set -eux
+
+ANSIBLE_ROLES_PATH=../ ansible-playbook test.yml -i inventory "$@"
diff --git a/test/integration/targets/ansible-runner/tasks/adhoc_example1.yml b/test/integration/targets/ansible-runner/tasks/adhoc_example1.yml
new file mode 100644
index 00000000..c6fdf03f
--- /dev/null
+++ b/test/integration/targets/ansible-runner/tasks/adhoc_example1.yml
@@ -0,0 +1,16 @@
+- name: execute the script
+ command: "'{{ ansible_python_interpreter }}' '{{ role_path }}/files/adhoc_example1.py' '{{ lookup('env', 'OUTPUT_DIR') }}'"
+ environment:
+ AWX_LIB_DIRECTORY: "{{ callback_path }}"
+ register: script
+
+- name: parse script output
+ # work around for ansible-runner showing ansible warnings on stdout
+ set_fact:
+ adexec1_json: "{{ script.stdout | parse_json }}"
+
+- assert:
+ that:
+ - "adexec1_json.rc == 0"
+ - "adexec1_json.events|length == 4"
+ - "'localhost' in adexec1_json.stats.ok"
diff --git a/test/integration/targets/ansible-runner/tasks/main.yml b/test/integration/targets/ansible-runner/tasks/main.yml
new file mode 100644
index 00000000..5608786b
--- /dev/null
+++ b/test/integration/targets/ansible-runner/tasks/main.yml
@@ -0,0 +1,5 @@
+- block:
+ - include_tasks: setup.yml
+ - include_tasks: adhoc_example1.yml
+ - include_tasks: playbook_example1.yml
+ when: ansible_distribution in ('RedHat', 'CentOS') and ansible_distribution_major_version == '7'
diff --git a/test/integration/targets/ansible-runner/tasks/playbook_example1.yml b/test/integration/targets/ansible-runner/tasks/playbook_example1.yml
new file mode 100644
index 00000000..ec1f7cda
--- /dev/null
+++ b/test/integration/targets/ansible-runner/tasks/playbook_example1.yml
@@ -0,0 +1,16 @@
+- name: execute the script
+ command: "'{{ ansible_python_interpreter }}' '{{ role_path }}/files/playbook_example1.py' '{{ lookup('env', 'OUTPUT_DIR') }}'"
+ environment:
+ AWX_LIB_DIRECTORY: "{{ callback_path }}"
+ register: script
+
+- name: parse script output
+ # work around for ansible-runner showing ansible warnings on stdout
+ set_fact:
+ pbexec_json: "{{ script.stdout | parse_json }}"
+
+- assert:
+ that:
+ - "pbexec_json.rc == 0"
+ - "pbexec_json.events|length == 7"
+ - "'localhost' in pbexec_json.stats.ok"
diff --git a/test/integration/targets/ansible-runner/tasks/setup.yml b/test/integration/targets/ansible-runner/tasks/setup.yml
new file mode 100644
index 00000000..ea24ced5
--- /dev/null
+++ b/test/integration/targets/ansible-runner/tasks/setup.yml
@@ -0,0 +1,19 @@
+- name: Install docutils
+ pip:
+ name: docutils
+
+- name: Install ansible-runner
+ pip:
+ name: ansible-runner
+ version: 1.2.0
+ extra_args:
+ -c {{ role_path }}/files/constraints.txt
+
+- name: Find location of ansible-runner installation
+ command: "'{{ ansible_python_interpreter }}' -c 'import os, ansible_runner; print(os.path.dirname(ansible_runner.__file__))'"
+ register: ansible_runner_path
+
+# work around for https://github.com/ansible/ansible-runner/issues/132
+- name: Set callback path to work around ansible-runner bug
+ set_fact:
+ callback_path: ":{{ ansible_runner_path.stdout }}/callbacks"
diff --git a/test/integration/targets/ansible-runner/test.yml b/test/integration/targets/ansible-runner/test.yml
new file mode 100644
index 00000000..113f8e7c
--- /dev/null
+++ b/test/integration/targets/ansible-runner/test.yml
@@ -0,0 +1,3 @@
+- hosts: localhost
+ roles:
+ - ansible-runner