#!/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"