aoh

A tool for running Ansible playbooks with `curl <url> | python` commands
git clone https://git.ashermorgan.net/aoh/
Log | Files | Refs | README

commit 949158f81d380fef8e077dcf335f4c17dea65719
Author: Asher Morgan <asher@ashermorgan.net>
Date:   Fri, 14 Aug 2026 18:31:34 -0700

Add basic flask app that calls ansible-runner

Diffstat:
A.gitignore | 3+++
Ademo/playbook.yml | 4++++
Amain.py | 34++++++++++++++++++++++++++++++++++
Arequirements.txt | 2++
4 files changed, 43 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -0,0 +1,3 @@ +.venv +private +!private/.gitkeep diff --git a/demo/playbook.yml b/demo/playbook.yml @@ -0,0 +1,4 @@ +- name: My play + hosts: localhost + tasks: + - ping: diff --git a/main.py b/main.py @@ -0,0 +1,34 @@ +import os + +import ansible_runner +from flask import Flask, abort, redirect, session + + +DATA = {} +PLAYBOOK = os.path.abspath('./demo/playbook.yml') # TODO + +app = Flask(__name__) +app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' # TODO + + +@app.route('/runners/new') +def job_new(): + _, r = ansible_runner.run_async(private_data_dir='private', + playbook=PLAYBOOK) + id = r.config.ident + DATA[id] = r + session['runner'] = id + + return redirect(f'/runners/{id}') + + +@app.route('/runners/<id>') +def job_status(id): + if id != session.get('runner'): + abort(401) + + return DATA[id].status + + +if __name__ == '__main__': + app.run(debug=True) diff --git a/requirements.txt b/requirements.txt @@ -0,0 +1,2 @@ +ansible_runner +flask