По 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
30 lines
1.5 KiB
YAML
30 lines
1.5 KiB
YAML
# Site-wide переменные окружения "Облачная площадка" — тонкий адаптер над
|
|
# ansible/site-cloud.env. Ничего site-специфичного не хардкодится: только
|
|
# имена ключей env-файла.
|
|
local_asn: "{{ lookup('env', 'LOCAL_ASN') }}"
|
|
anycast_prefix: "{{ lookup('env', 'ANYCAST_PREFIX') }}"
|
|
dummy_iface: "{{ lookup('env', 'DUMMY_IFACE') | default('dummy0', true) }}"
|
|
priv1_iface: "{{ lookup('env', 'PRIV_MAIN_IFACE') }}"
|
|
priv2_iface: "{{ lookup('env', 'PRIV_BACKUP_IFACE') }}"
|
|
ext_iface: "{{ lookup('env', 'EXT_IFACE') }}"
|
|
frr_apt_series: "{{ lookup('env', 'FRR_APT_SERIES') | default('frr-stable', true) }}"
|
|
|
|
enable_snat: true
|
|
as_path_prepend_count: "{{ lookup('env', 'AS_PATH_PREPEND_COUNT') }}"
|
|
|
|
# M1/M2/B1/B2 сидят на общих для всех 4 узлов L2-сегментах, поэтому список
|
|
# соседей — один на всё окружение, а не per-node (см. host_vars/vr0N.yml).
|
|
bgp_neighbors:
|
|
- ip: "{{ lookup('env', 'MAIN1_NEIGHBOR_IP') }}"
|
|
asn: "{{ lookup('env', 'MAIN_ASN') }}"
|
|
prepend: false
|
|
- ip: "{{ lookup('env', 'MAIN2_NEIGHBOR_IP') }}"
|
|
asn: "{{ lookup('env', 'MAIN_ASN') }}"
|
|
prepend: false
|
|
- ip: "{{ lookup('env', 'BACKUP1_NEIGHBOR_IP') }}"
|
|
asn: "{{ lookup('env', 'BACKUP_ASN') }}"
|
|
prepend: true
|
|
- ip: "{{ lookup('env', 'BACKUP2_NEIGHBOR_IP') }}"
|
|
asn: "{{ lookup('env', 'BACKUP_ASN') }}"
|
|
prepend: true
|