По 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
38 lines
1.8 KiB
YAML
38 lines
1.8 KiB
YAML
---
|
||
# Рендерит шаблоны роли frr_anycast для окружения site_cloud локально (без
|
||
# SSH и без реальных ВМ) — используется render-check-cloud.sh.
|
||
- name: "Render-only test шаблонов frr_anycast (site_cloud)"
|
||
hosts: site_cloud
|
||
connection: local
|
||
gather_facts: false
|
||
become: false
|
||
tasks:
|
||
# group_vars/host_vars авто-подгружаются относительно каталога playbook'а
|
||
# или inventory; render-test-cloud.yml лежит в tests/, поэтому подключаем явно.
|
||
- name: Подключить site-wide переменные (group_vars/site_cloud.yml)
|
||
ansible.builtin.include_vars: "{{ playbook_dir }}/../group_vars/site_cloud.yml"
|
||
|
||
- name: Подключить per-node переменные (host_vars/{{ inventory_hostname }}.yml)
|
||
ansible.builtin.include_vars: "{{ playbook_dir }}/../host_vars/{{ inventory_hostname }}.yml"
|
||
|
||
- name: Создать выходную директорию для хоста
|
||
ansible.builtin.file:
|
||
path: "{{ render_out_dir }}/{{ inventory_hostname }}"
|
||
state: directory
|
||
mode: "0755"
|
||
|
||
- name: Рендер frr.conf
|
||
ansible.builtin.template:
|
||
src: "{{ playbook_dir }}/../roles/frr_anycast/templates/frr.conf.j2"
|
||
dest: "{{ render_out_dir }}/{{ inventory_hostname }}/frr.conf"
|
||
|
||
- name: Рендер daemons
|
||
ansible.builtin.template:
|
||
src: "{{ playbook_dir }}/../roles/frr_anycast/templates/daemons.j2"
|
||
dest: "{{ render_out_dir }}/{{ inventory_hostname }}/daemons"
|
||
|
||
- name: Рендер nftables.conf
|
||
ansible.builtin.template:
|
||
src: "{{ playbook_dir }}/../roles/frr_anycast/templates/nftables.conf.j2"
|
||
dest: "{{ render_out_dir }}/{{ inventory_hostname }}/nftables.conf"
|