CYBER-0 initial concept ready
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user