You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
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)
|