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