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

2.7 KiB
Raw Permalink Blame 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 — вне офлайн-песочницы.