Consolidate the Technitium DNS CLI into tooling-cli/dns/ with a
containerized bash CLI (src/dns_cli.sh), Dockerfile (alpine +
curl/python3/bind-tools/bash), README, AGENTS.md, validate.sh, and
.env.example. Env vars aligned to the centralized ~/.creds/technitium.env
store (TECHNITIUM_URL, TECHNITIUM_DNS_TOKEN, TECHNITIUM_DNS_ZONE).
Image built and pushed to the registry as
git.knownelement.com/reachableceo/dns-cli:latest. Verified live:
zones, list, and search all return data.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
82 lines
2.5 KiB
Bash
Executable File
82 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# dns-cli validation script.
|
|
# Runs a live read-only cycle against the configured Technitium instance.
|
|
#
|
|
# Usage: ./validate.sh
|
|
# Exit codes: 0 = all checks passed, 1 = one or more checks failed
|
|
set -eu
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
ENV_FILE="${TECHNITIUM_ENV_FILE:-$HOME/.creds/technitium.env}"
|
|
|
|
if [ ! -f "$ENV_FILE" ]; then
|
|
echo "FAIL: env file not found: $ENV_FILE"
|
|
echo " Set TECHNITIUM_ENV_FILE or create it in ~/.creds/technitium.env"
|
|
exit 1
|
|
fi
|
|
|
|
IMAGE="${DNS_CLI_IMAGE:-git.knownelement.com/reachableceo/dns-cli:latest}"
|
|
PASS=0
|
|
FAIL=0
|
|
TOTAL=0
|
|
|
|
ok() { TOTAL=$((TOTAL+1)); echo "PASS: $1"; PASS=$((PASS+1)); }
|
|
fail() { TOTAL=$((TOTAL+1)); echo "FAIL: $1"; FAIL=$((FAIL+1)); }
|
|
|
|
echo "============================================"
|
|
echo " dns-cli validation"
|
|
echo " image: ${IMAGE}"
|
|
echo "============================================"
|
|
echo ""
|
|
|
|
# ---------------------------------------------------------------- #
|
|
# 1. zones (live read)
|
|
# ---------------------------------------------------------------- #
|
|
echo "--- [1] zones ---"
|
|
OUT=$(docker run --rm --env-file "$ENV_FILE" "${IMAGE}" zones 2>&1) || true
|
|
if echo "$OUT" | grep -qE '\.'; then
|
|
ok "zones returned data"
|
|
echo "$OUT" | head -5
|
|
else
|
|
fail "zones did not return expected output"
|
|
echo " $OUT" | head -5
|
|
fi
|
|
echo ""
|
|
|
|
# ---------------------------------------------------------------- #
|
|
# 2. list (live read)
|
|
# ---------------------------------------------------------------- #
|
|
echo "--- [2] list ---"
|
|
OUT=$(docker run --rm --env-file "$ENV_FILE" "${IMAGE}" list 2>&1) || true
|
|
if echo "$OUT" | grep -qE 'A\s'; then
|
|
ok "list returned records"
|
|
echo "$OUT" | head -5
|
|
else
|
|
fail "list did not return expected output"
|
|
echo " $OUT" | head -5
|
|
fi
|
|
echo ""
|
|
|
|
# ---------------------------------------------------------------- #
|
|
# 3. search (live read)
|
|
# ---------------------------------------------------------------- #
|
|
echo "--- [3] search ---"
|
|
OUT=$(docker run --rm --env-file "$ENV_FILE" "${IMAGE}" search "ns" 2>&1) || true
|
|
if [ -n "$OUT" ]; then
|
|
ok "search returned results"
|
|
echo "$OUT" | head -3
|
|
else
|
|
fail "search returned no results"
|
|
fi
|
|
echo ""
|
|
|
|
# ---------------------------------------------------------------- #
|
|
# Results
|
|
# ---------------------------------------------------------------- #
|
|
echo "============================================"
|
|
echo " RESULTS: ${PASS}/${TOTAL} passed, ${FAIL} failed"
|
|
echo "============================================"
|
|
[ "$FAIL" -eq 0 ]
|