49 lines
1.8 KiB
Bash
49 lines
1.8 KiB
Bash
#!/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"
|