По updated_dia.png: новое окружение "Облачная площадка" (vr01-vr04, AS 65200, anycast 172.31.255.10/32) с двумя внешними BGP-каналами — основным (ASN 65104, без as-path prepend) и резервным (ASN 65103, с prepend на всех узлах) — плюс sNAT (nftables masquerade) на внешнем интерфейсе. Роль frr_anycast обобщена под это: вместо двух жёстко именованных соседей — список bgp_neighbors произвольной длины с флагом prepend; sNAT/ip_forward — опциональный блок (enable_snat). Площадка A мигрирована на новый формат host_vars/group_vars без изменения site-a.env и без изменения рендера — render-check.sh (golden-diff) по-прежнему проходит 6/6. Для site-cloud (окружение новое, ВМ не подняты) добавлен render-check-cloud.sh с grep-инвариантами: 4 соседа на узел, prepend только на резервном канале, nftables masquerade на внешнем интерфейсе — 56/56 проверок пройдено. run.sh обобщён на несколько окружений: инвентарь по имени playbook'а, env-файл через SITE_ENV_FILE (алиас SITE_A_ENV_FILE сохранён). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bc3HkMiDwooSyLBLoMKNyF
39 lines
1.4 KiB
Bash
Executable File
39 lines
1.4 KiB
Bash
Executable File
#!/bin/sh
|
|
# Загружает env-файл окружения в environment и вызывает ansible-playbook.
|
|
# Использование: ./run.sh <playbook.yml> [доп. аргументы ansible-playbook]
|
|
# SITE_ENV_FILE=site-cloud.env ./run.sh site-cloud.yml
|
|
# ./run.sh site-a.yml # SITE_ENV_FILE по умолчанию site-a.env
|
|
# Инвентарь берётся по имени плейбука: playbook X.yml -> inventory/X.yml
|
|
# (соглашение имён между *.yml playbook'ами и inventory/*.yml в этом репозитории).
|
|
set -e
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
# SITE_A_ENV_FILE — устаревший алиас, сохранён для обратной совместимости.
|
|
ENV_FILE="${SITE_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
|
|
|
|
PLAYBOOK="${1:-site-a.yml}"
|
|
shift 2>/dev/null || true
|
|
|
|
INVENTORY="inventory/$PLAYBOOK"
|
|
if [ ! -f "$INVENTORY" ]; then
|
|
echo "Не найден инвентарь: $INVENTORY (ожидается рядом с playbook'ом, то же имя)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
ANSIBLE_PLAYBOOK_BIN="ansible-playbook"
|
|
if [ -x "../venv/bin/ansible-playbook" ]; then
|
|
ANSIBLE_PLAYBOOK_BIN="../venv/bin/ansible-playbook"
|
|
fi
|
|
|
|
exec "$ANSIBLE_PLAYBOOK_BIN" -i "$INVENTORY" "$PLAYBOOK" "$@"
|