50 lines
1.4 KiB
Bash
Executable File
50 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
red() { printf "\033[31m%s\033[0m\n" "$*"; }
|
|
grn() { printf "\033[32m%s\033[0m\n" "$*"; }
|
|
yel() { printf "\033[33m%s\033[0m\n" "$*"; }
|
|
|
|
ROOT_DIR=$(cd "$(dirname "$0")/../.." && pwd)
|
|
cd "$ROOT_DIR"
|
|
|
|
fail=0
|
|
|
|
# Validate YAML via docker stack config
|
|
while IFS= read -r -d '' file; do
|
|
yel "Validating: $file"
|
|
if docker stack config -c "$file" >/dev/null 2>&1; then
|
|
grn "OK: $file"
|
|
else
|
|
red "ERROR: docker stack config failed for $file"
|
|
fail=1
|
|
fi
|
|
|
|
# Check external networks referenced exist
|
|
nets=$(awk '/networks:/,/^$/' "$file" | awk '/external: true/{print prev}{prev=$1}' | sed 's/://g' | sed 's/^[[:space:]]*//g' | sort -u || true)
|
|
for n in $nets; do
|
|
if docker network inspect "$n" >/dev/null 2>&1; then
|
|
grn " network OK: $n"
|
|
else
|
|
yel " network MISSING: $n"
|
|
fi
|
|
done
|
|
|
|
# Check external secrets referenced exist
|
|
secs=$(awk '/secrets:/,/^$/' "$file" | awk '/external: true/{print prev}{prev=$1}' | sed 's/://g' | sed 's/^[[:space:]]*//g' | sort -u || true)
|
|
for s in $secs; do
|
|
if docker secret inspect "$s" >/dev/null 2>&1; then
|
|
grn " secret OK: $s"
|
|
else
|
|
yel " secret MISSING: $s"
|
|
fi
|
|
done
|
|
|
|
done < <(find stacks -type f -name "*.yml" -print0 | sort -z)
|
|
|
|
# List NFS volumes for operator verification
|
|
yel "NFS volumes referenced (verify exports exist on omv800.local):"
|
|
grep -R "device: :/export/" -n stacks || true
|
|
|
|
exit $fail
|