Files
CloudRouterAdvanced/docs/changes/2026-09-04-dynamic-default-secgroup-summary.md
ayurishchevandClaude Sonnet 5 b5d6367fd8 Resolve the default security group UUID dynamically instead of hardcoding it
The "default" security group VK Cloud auto-creates in every project has
a UUID unique to that project, but main.tf hardcoded one project's UUID
across all 4 instance resources (router, priv_srv_01/02/03) - not
portable to another project. Replaced with data.vkcs_networking_secgroup
(matched by name = "default", verified against the real provider schema
via terraform providers schema -json on the local provider mirror) behind
local.default_security_group_id. The new default_security_group_id
variable is a last-resort manual override via coalesce() for projects
where the lookup doesn't fit (non-standard name/SDN) - not the normal path.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011hXR2ftXZZhJ4Y3XuSoR8r
2026-09-06 20:32:05 +03:00

35 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Summary: динамическое вычисление UUID Default Security Group
Дата: 2026-09-04
План: [2026-09-04-dynamic-default-secgroup-plan.md](2026-09-04-dynamic-default-secgroup-plan.md)
## Что сделано
### `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 вхождения захардкоженного литерала `"d479b4d7-55b3-4ff1-bf8d-24d826a38f11"` (в `security_group_ids` роутера и `priv_srv_01/02/03`) заменены на `local.default_security_group_id`.
Точное имя автосозданной группы (`default`, нижний регистр) подтверждено пользователем для целевого проекта. Data source и его атрибуты (`id` актуален, `secgroup_id` deprecated) проверены локально через `terraform providers schema -json` на уже установленном filesystem-mirror провайдера v0.17.2 — без обращения к реальному облаку.
### `terraform/variables.tf`
Добавлена `default_security_group_id` (string, default `null`, без validation) — explicit override как крайняя мера; при `null` (значение по умолчанию) используется динамический lookup.
### `terraform/tests/test_terraform_delivery.py`
Добавлены хелперы `find_local()` (main.tf теперь содержит два отдельных блока `locals {}`, поэтому старое обращение по индексу `main["locals"][0]` было неверным — исправлено) и `find_data_sources()`. Новые тесты:
- `test_default_security_group_data_source_exists` — data source объявлен с `name = "default"`;
- `test_default_security_group_id_local_prefers_override_then_lookup` — точная проверка выражения `coalesce(...)`;
- `test_no_hardcoded_security_group_uuid_in_main` — regression-guard: в `main.tf` не должно быть ни одного литерала в форме UUID;
- `test_all_instances_use_default_security_group_local` — все `vkcs_compute_instance` ссылаются на `local.default_security_group_id`, а не на литерал;
- `test_default_security_group_id_override_accepted` — реальный `terraform plan` на изолированном `variables.tf` принимает и `null` (по умолчанию), и явный override.
Итог сьюта: **38 passed** (было 32).
### `README.md` / `docs/QUICKSTART.md`
Добавлено краткое описание механизма и явная пометка override-переменной как "крайняя мера".
## Верификация
- `terraform fmt -check -recursive` → чисто.
- Реальные `terraform init`/`validate` (локальный provider-mirror) — с override и без → оба успешны.
- `venv/bin/pytest terraform/tests -v` → **38 passed**.
- Реальный lookup данных (`vkcs_networking_secgroup.default` резолвится в существующую группу проекта) можно проверить только `terraform plan`/`apply` с настоящими credentials в самом VK Cloud — вне рамок этой офлайн-песочницы; это отдельный шаг для пользователя при первом реальном деплое.