Files

28 lines
2.7 KiB
Markdown
Raw Permalink Normal View History

# План внедрения: динамическое вычисление UUID Default Security Group
Дата: 2026-09-04
## Проблема
В `terraform/main.tf` в 4 местах (router, priv_srv_01/02/03) захардкожен литерал `"d479b4d7-55b3-4ff1-bf8d-24d826a38f11"` — UUID системной Security Group `default`, автоматически создаваемой в каждом проекте VK Cloud, но **уникальной по UUID для каждого проекта**. Код не переносим между проектами без ручной правки.
## Решение
Провайдер `vkcs` предоставляет data source `vkcs_networking_secgroup` (проверено локально через `terraform providers schema -json` на уже установленном provider-mirror v0.17.2) с фильтром по `name`/`sdn` и computed-атрибутом `id`. Автосозданная группа по умолчанию называется `default` (подтверждено пользователем для целевого проекта).
Явная передача UUID через переменную (в т.ч. `TF_VAR_default_security_group_id`) остаётся только как fallback на крайний случай — через `coalesce()`.
## Шаги
1. `terraform/main.tf`: добавить `data "vkcs_networking_secgroup" "default" { name = "default"; sdn = "sprut" }` и `locals.default_security_group_id = coalesce(var.default_security_group_id, data.vkcs_networking_secgroup.default.id)`; заменить 4 вхождения литерала на `local.default_security_group_id`.
2. `terraform/variables.tf`: добавить `default_security_group_id` (string, default `null`, без validation — это осознанный override).
3. `terraform/tests/test_terraform_delivery.py`: regression-guard на отсутствие старого UUID-литерала; проверка, что data source и локаль существуют и используются; расширить `variables.tf`-only plan-тест на новую переменную.
4. `README.md`/`docs/QUICKSTART.md`: кратко описать механизм и его fallback-статус.
5. Summary-документ по завершении.
## Верификация
- `terraform fmt -check -recursive`.
- Реальные `terraform init`/`validate` через локальный provider-mirror.
- `venv/bin/pytest terraform/tests -v`.
- Реальный lookup (`plan`/`apply` с настоящими credentials) проверяется пользователем самостоятельно в VK Cloud — вне офлайн-песочницы.