Files
CloudRouterAdvanced/docs/changes/2026-09-04-dynamic-default-secgroup-summary.md
T
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

3.6 KiB
Raw Blame History

Summary: динамическое вычисление UUID Default Security Group

Дата: 2026-09-04 План: 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 — вне рамок этой офлайн-песочницы; это отдельный шаг для пользователя при первом реальном деплое.