aoh

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

commit d7a87b37fed078f370a7e8e5f26e6b4490ff8d89
parent aa63e565d20ad34ab98904d6b1367a55caaca405
Author: Asher Morgan <asher@ashermorgan.net>
Date:   Sun, 16 Aug 2026 19:09:04 -0700

Load playbook/config paths from a config.yml file

Currently, paths should be absolute.

Diffstat:
M.gitignore | 1+
Maoh/install.py | 3++-
Maoh/server.py | 14++++++++++----
Mrequirements.txt | 1+
4 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,3 +1,4 @@ .venv __pycache__ *.pyc +config.yml diff --git a/aoh/install.py b/aoh/install.py @@ -51,7 +51,8 @@ def fetch(args): def main(): res = requests.post(f'{API}/runners/', json={ - 'args': ' '.join(sys.argv[1:]), + 'playbook': sys.argv[1] if len(sys.argv) >= 2 else 'main', + 'args': ' '.join(sys.argv[2:]), }) if res.status_code != 201: print(res.json()['err']) diff --git a/aoh/server.py b/aoh/server.py @@ -1,12 +1,10 @@ import os +import yaml from flask import Flask, abort, make_response, render_template, request, session from .runner import AoHRunner -PLAYBOOK = os.path.abspath('./demo/playbook.yml') # TODO -CONFIG = os.path.abspath('./demo/ansible.cfg') # TODO - app = Flask(__name__, template_folder=os.path.dirname(__file__)) app.secret_key = os.urandom(16) @@ -64,7 +62,15 @@ def job_new(): if not _validate_args(request.json['args']): return { 'err': 'Bad or banned arguments passed.' }, 400 - runner = AoHRunner(CONFIG, PLAYBOOK, request.json['args']) + with open('config.yml', 'r') as f: + CONFIG = yaml.safe_load(f) + + playbook = CONFIG.get(request.json['playbook']) + if not playbook: + return { 'err': f"Playbook not found: {request.json['playbook']}" }, 400 + + runner = AoHRunner(playbook['config'], playbook['playbook'], + request.json['args']) _DATA[runner.id] = runner session['runner'] = runner.id diff --git a/requirements.txt b/requirements.txt @@ -1,4 +1,5 @@ ansible ansible_runner flask +pyyaml requests