#!/usr/bin/env bash # Run the Ansible executor locally through the common artifact pipeline. # # Environment: # INVENTORY inventory path (default: ./assets.yml) # LIMIT Ansible host pattern (default: all) # ARTIFACT_ROOT output root (default: ./artifacts) set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" REPOSITORY_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)" INVENTORY="${INVENTORY:-$REPOSITORY_DIR/assets.yml}" PLAYBOOK="${PLAYBOOK:-$SCRIPT_DIR/playbooks/site.yml}" LIMIT="${LIMIT:-all}" ARTIFACT_ROOT="${ARTIFACT_ROOT:-$REPOSITORY_DIR/artifacts}" RAW_DIR="$ARTIFACT_ROOT/raw/ansible" NORMALIZED_DIR="$ARTIFACT_ROOT/normalized" RENDERED_DIR="$ARTIFACT_ROOT/rendered" mkdir -p "$RAW_DIR" "$NORMALIZED_DIR" "$RENDERED_DIR" ANSIBLE_ARGS=( -i "$INVENTORY" "$PLAYBOOK" --limit "$LIMIT" --extra-vars "report_dir=$RAW_DIR" ) if [ -n "${ANSIBLE_VARS_FILE:-}" ]; then if [ ! -f "$ANSIBLE_VARS_FILE" ]; then echo "ANSIBLE_VARS_FILE does not point to a readable file" >&2 exit 1 fi ANSIBLE_ARGS+=(--extra-vars "@$ANSIBLE_VARS_FILE") fi if [ -n "${ANSIBLE_PRIVATE_KEY_FILE:-}" ]; then if [ ! -f "$ANSIBLE_PRIVATE_KEY_FILE" ]; then echo "ANSIBLE_PRIVATE_KEY_FILE does not point to a readable file" >&2 exit 1 fi ANSIBLE_ARGS+=(--private-key "$ANSIBLE_PRIVATE_KEY_FILE") fi echo "[1/3] Running Ansible tests" ansible-playbook "${ANSIBLE_ARGS[@]}" "$@" LATEST_JSON=$(find "$RAW_DIR" -maxdepth 1 -type f -name '*.json' -printf '%T@ %p\n' \ | sort -nr \ | head -n 1 \ | cut -d' ' -f2-) if [ -z "$LATEST_JSON" ]; then echo "No Ansible JSON report was generated" >&2 exit 1 fi TARGET_NAME="$(basename "$LATEST_JSON" .json)" NORMALIZED_JSON="$NORMALIZED_DIR/ansible-$TARGET_NAME.json" echo "[2/3] Normalizing $(basename "$LATEST_JSON")" python3 "$SCRIPT_DIR/scripts/normalize.py" \ "$LATEST_JSON" \ "$NORMALIZED_JSON" \ --schema "$REPOSITORY_DIR/schemas/test-report.schema.json" echo "[3/3] Rendering reports" python3 "$REPOSITORY_DIR/scripts/render-normalized.py" \ "$NORMALIZED_JSON" \ --output-dir "$RENDERED_DIR" echo "Artifacts written to $ARTIFACT_ROOT"