Skip to content
Snippets Groups Projects
Verified Commit 6367818b authored by Karel van Klink's avatar Karel van Klink :smiley_cat:
Browse files

Add initial bash script for running ansible in a single-use venv

parent 041bd191
No related branches found
No related tags found
1 merge request!7Add a skeleton test that creates and destroys a venv
......@@ -5,10 +5,6 @@ from fastapi import APIRouter
from fastapi.responses import JSONResponse
from pydantic import BaseModel
import ansible_runner
import venv
import tempfile
from larp import config
router = APIRouter()
......@@ -48,7 +44,7 @@ async def add_playbook(new_playbook: Playbook) -> Playbook:
@router.get('/run/{playbook_name}')
async def run_playbook(playbook_name: str) -> JSONResponse | PlaybookRun:
async def run_playbook(playbook_name: str) -> PlaybookRun:
# TODO: implement
params = config.load()
playbook_list = os.listdir(params['playbook-dir'])
......@@ -57,16 +53,6 @@ async def run_playbook(playbook_name: str) -> JSONResponse | PlaybookRun:
except ValueError:
return JSONResponse(status_code=404, content=f'Playbook with name {playbook_name} not found.')
# Build a temp venv
venv_path = tempfile.mkdtemp(prefix='workflow-', suffix='-venv')
builder = venv.EnvBuilder(with_pip=True, system_site_packages=True)
builder.create(venv_path)
# Get collection from Ansible Galaxy
# ansible_collections
# Run playbook asynchronously
ansible_runner.run_async()
# Run playbook asynchronously with run_playbook.sh
return PlaybookRun(result_code=1)
#!/bin/sh
usage() {
echo "Usage: $0 <larp_collection_uri> <playbook-name> <remote-host> (<extra-vars> ...)" 1>&2;
exit 2
}
if [ $# -lt 2 ]; then
echo "Illegal number of parameters"
usage
fi
VENV_PATH=$(mktemp -d -t larp-venv-)
if [[ ! -d "$VENV_PATH" ]]; then
echo "Unable to create temp directory for venv"
exit 1
fi
cleanup() {
rm -rf "$VENV_PATH"
echo "Deleted venv in $VENV_PATH"
}
# Always delete old venv upon exit
trap cleanup EXIT
###
echo "Creating venv in $VENV_PATH"
python3 -m venv "$VENV_PATH"
source "$VENV_PATH/bin/activate"
pip install -r ../requirements.txt # FIXME
pip install ansible ansible_runner
ansible-galaxy collection install "$1"
ansible-playbook "$2" -i "$3", --connection=local # TODO: Add support for extra vars
# FIXME: remove --conection=local from command above
......@@ -11,5 +11,7 @@ setup(
install_requires=[
'jsonschema',
'requests',
'fastapi',
'pydantic'
]
)
- name: test-playbook
hosts: all
roles:
- kvklink.echo.echo_uptime
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment