25 lines
2.8 KiB
Markdown
25 lines
2.8 KiB
Markdown
# План внедрения: явная передача префиксов приватных сетей
|
|||
|
|
|
||
|
|
Дата: 2026-09-03
|
||
|
|
|
||
|
|
## Проблема
|
||
|
|
|
||
|
|
Приватные подсети роутеров нарезались автоматически (`private_supernet` + `private_subnet_prefix_length` + `private_interface_count` → `cidrsubnet()`). Администратор должен явно передавать все адресные префиксы — по одному CIDR на каждую приватную сеть, к которой подключаются маршрутизаторы. Автоматической нарезки быть не должно.
|
||
|
|
|
||
|
|
Модель меняется: вместо N×router_count изолированных микроподсетей — N **общих** приватных сетей (по числу переданных префиксов), в каждой свой порт/IP на роутер (аналогично исходной `lan_net`/`lan_port1/2`, но обобщено на произвольное число сетей и роутеров).
|
||
|
|
|
||
|
|
## Шаги
|
||
|
|
|
||
|
|
1. `terraform/variables.tf`: удалить `private_supernet`, `private_subnet_prefix_length`, `private_interface_count`; добавить обязательную `private_network_cidrs` (list(string), без default, 3 validation-блока: непустой список, валидные CIDR, уникальность).
|
||
|
|
2. `terraform/main.tf`: `router_priv_net`/`router_priv_subnet` — `for_each` по ролям (одна сеть на роль); `router_priv_port` — `for_each` по (роутер×роль), `fixed_ip = cidrhost(role_cidr, router_index + 2)`. `templatefile()` берёт CIDR из `local.private_network_cidr[role]`.
|
||
|
|
3. `terraform/scripts/network-init.sh.tpl` — без изменений (сопоставление по CIDR-принадлежности не зависит от того, общий CIDR или уникальный).
|
||
|
|
4. `terraform.tfvars` — рабочий пример `private_network_cidrs` вместо удалённых переменных.
|
||
|
|
5. `terraform/tests/test_terraform_delivery.py` — обновить тесты под новую переменную/локали, убрать carving-коллизии, добавить проверку непересечения и вместимости CIDR.
|
||
|
|
6. `README.md`/`docs/QUICKSTART.md` — обновить описание.
|
||
|
|
7. Summary-документ по завершении.
|
||
|
|
|
||
|
|
## Верификация
|
||
|
|
|
||
|
|
- `terraform fmt -check -recursive`.
|
||
|
|
- Реальные `terraform init`/`validate` (локальный filesystem-mirror провайдера) на нескольких сочетаниях `router_count`/`private_network_cidrs`.
|
||
|
|
- `venv/bin/pytest terraform/tests -v`.
|