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/aliases5
-rw-r--r--test/integration/targets/ansible-runner/files/adhoc_example1.py29
-rw-r--r--test/integration/targets/ansible-runner/files/playbook_example1.py41
-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.sh7
-rw-r--r--test/integration/targets/ansible-runner/tasks/adhoc_example1.yml14
-rw-r--r--test/integration/targets/ansible-runner/tasks/main.yml4
-rw-r--r--test/integration/targets/ansible-runner/tasks/playbook_example1.yml21
-rw-r--r--test/integration/targets/ansible-runner/tasks/setup.yml4
-rw-r--r--test/integration/targets/ansible-runner/test.yml3
11 files changed, 146 insertions, 0 deletions
diff --git a/test/integration/targets/ansible-runner/aliases b/test/integration/targets/ansible-runner/aliases
new file mode 100644
index 0000000..13e7d78
--- /dev/null
+++ b/test/integration/targets/ansible-runner/aliases
@@ -0,0 +1,5 @@
+shippable/posix/group5
+context/controller
+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 0000000..ab24bca
--- /dev/null
+++ b/test/integration/targets/ansible-runner/files/adhoc_example1.py
@@ -0,0 +1,29 @@
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+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/playbook_example1.py b/test/integration/targets/ansible-runner/files/playbook_example1.py
new file mode 100644
index 0000000..550c185
--- /dev/null
+++ b/test/integration/targets/ansible-runner/files/playbook_example1.py
@@ -0,0 +1,41 @@
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+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 0000000..7842f6c
--- /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 0000000..009f6c3
--- /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 0000000..97e6f4d
--- /dev/null
+++ b/test/integration/targets/ansible-runner/runme.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+set -eux
+
+source virtualenv.sh
+
+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 0000000..ce174f1
--- /dev/null
+++ b/test/integration/targets/ansible-runner/tasks/adhoc_example1.yml
@@ -0,0 +1,14 @@
+- name: execute the script
+ command: "'{{ ansible_python_interpreter }}' '{{ role_path }}/files/adhoc_example1.py' '{{ lookup('env', 'OUTPUT_DIR') }}'"
+ 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 0000000..ba6a3a2
--- /dev/null
+++ b/test/integration/targets/ansible-runner/tasks/main.yml
@@ -0,0 +1,4 @@
+- block:
+ - include_tasks: setup.yml
+ - include_tasks: adhoc_example1.yml
+ - include_tasks: playbook_example1.yml
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 0000000..1fedb53
--- /dev/null
+++ b/test/integration/targets/ansible-runner/tasks/playbook_example1.yml
@@ -0,0 +1,21 @@
+- name: execute the script
+ command: "'{{ ansible_python_interpreter }}' '{{ role_path }}/files/playbook_example1.py' '{{ lookup('env', 'OUTPUT_DIR') }}'"
+ register: script
+
+- name: parse script output
+ # work around for ansible-runner showing ansible warnings on stdout
+ set_fact:
+ pbexec_json: "{{ script.stdout | parse_json }}"
+ expected_events:
+ - playbook_on_start
+ - playbook_on_play_start
+ - playbook_on_task_start
+ - runner_on_start
+ - runner_on_ok
+ - playbook_on_stats
+
+- assert:
+ that:
+ - "pbexec_json.rc == 0"
+ - "pbexec_json.events == expected_events"
+ - "'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 0000000..7ee66b2
--- /dev/null
+++ b/test/integration/targets/ansible-runner/tasks/setup.yml
@@ -0,0 +1,4 @@
+- name: Install ansible-runner
+ pip:
+ name: ansible-runner
+ version: 2.2.0
diff --git a/test/integration/targets/ansible-runner/test.yml b/test/integration/targets/ansible-runner/test.yml
new file mode 100644
index 0000000..113f8e7
--- /dev/null
+++ b/test/integration/targets/ansible-runner/test.yml
@@ -0,0 +1,3 @@
+- hosts: localhost
+ roles:
+ - ansible-runner