diff options
Diffstat (limited to '')
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 |