73 lines
2.1 KiB
Bash
73 lines
2.1 KiB
Bash
#!/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"
|