Files
ayurishchevandClaude Sonnet 5 98f9f502ce Add Ansible playbook for Site A FRR configuration on VMs
Разворачивает FRR на a1/a2/a3 (площадка A) через Ansible вместо
Docker-лабы, для реальных ВМ. Provisioning ВМ (3 NIC: внешний +
2 приватных) — Terraform, вне рамок этой задачи; playbook создаёт
только dummy0 (netplan) и конфигурирует FRR.

- ansible/site-a.env — единственный источник site-A-специфичных
  значений (ASN, anycast-префикс, router-id/BGP-соседи по узлам,
  имена интерфейсов); роль frr_anycast полностью параметризована
- ansible/roles/frr_anycast — задачи, handlers (netplan apply перед
  restart frr), шаблоны frr.conf.j2/daemons.j2/dummy0.netplan.yml.j2
- ansible/tests/render-check.sh — офлайн golden-diff проверка
  рендера конфигов против уже провалидированных в Docker-лабе
  frr/a{1,2,3}/ (ВМ ещё не подняты, функциональный тест недоступен)
- README.md — раздел «Развёртывание площадки A на ВМ (Ansible)»
- docs/ — план и summary изменения

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bc3HkMiDwooSyLBLoMKNyF
2026-09-03 14:14:04 +03:00

50 lines
1.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"