Files
ansible-testing/methodologies/ansible/run.sh
T

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"