Files
poc-frr-anycast/ansible/tests/render-check.sh
T

49 lines
1.8 KiB
Bash
Raw Normal View History

#!/bin/sh
# Офлайн-проверка шаблонов роли frr_anycast: рендерит frr.conf/daemons для
# a1/a2/a3 (только control node, реальные ВМ не нужны) и сравнивает с уже
# проверенными в Docker-лабе golden-файлами frr/a{1,2,3}/{frr.conf,daemons}.
set -e
cd "$(dirname "$0")/.." # -> ansible/
ENV_FILE="${SITE_A_ENV_FILE:-site-a.env}"
if [ ! -f "$ENV_FILE" ]; then
echo "Не найден файл переменных окружения: $ENV_FILE" >&2
exit 1
fi
set -a
# shellcheck disable=SC1090
. "./$ENV_FILE"
set +a
OUT_DIR="$(mktemp -d)"
trap 'rm -rf "$OUT_DIR"' EXIT
ansible-playbook -i inventory/site-a.yml tests/render-test.yml -e "render_out_dir=$OUT_DIR" 2>&1 | cat
STATUS=0
for n in a1 a2 a3; do
for f in frr.conf daemons; do
golden="../frr/$n/$f"
rendered="$OUT_DIR/$n/$f"
# frr.conf в Docker-лабе включает "interface dummy0 / ip address ...":
# там его назначает zebra. В VM-варианте тот же адрес назначается через
# netplan (dummy0.netplan.yml.j2), поэтому в frr.conf.j2 блока нет —
# это осознанное расхождение (см. Context плана), исключаем его перед diff.
if [ "$f" = "frr.conf" ]; then
golden_cmp="$OUT_DIR/.golden-$n-$f"
sed '/^interface dummy0$/,/^!$/d' "$golden" > "$golden_cmp"
else
golden_cmp="$golden"
fi
if diff -u "$golden_cmp" "$rendered" >/tmp/render-check.diff 2>&1; then
echo "OK $n/$f совпадает с $golden (за вычетом дизайн-отличия dummy0, см. выше)"
else
echo "FAIL $n/$f отличается от $golden:"
cat /tmp/render-check.diff
STATUS=1
fi
done
done
exit "$STATUS"