Files
CloudRouterAdvanced/docs/changes/2026-09-07-router-only-deployment-summary.md
ayurishchevandClaude Sonnet 5 8886c1baad Fix real-deployment blockers and scope down to router-only VMs
Confirmed working against a real VK Cloud PROD deployment (3 routers,
19 resources, apply succeeded end to end). Fixes found along the way:

- provider "vkcs" was never configured (versions.tf) - username/password/
  project_id/region were declared but wired to nothing; added auth_url and
  user_domain_name to complete it.
- Nova keypairs are per-user, not per-project - added an optional
  vkcs_compute_keypair resource (var.ssh_public_key) so Terraform can
  register a keypair under the deploying service account itself.
- router_priv_port used a hand-computed fixed_ip offset that collided with
  VKCS's own auto-created service ports on each network (observed: a
  "network:dns" port) - now left unset so Neutron's IPAM auto-assigns,
  which is collision-free by construction.
- vkcs_compute_instance set image_id at the top level while also booting
  from a volume via block_device - the provider docs say not to do this;
  Nova echoes back a sentinel string for image_id on a volume-booted
  server, which Terraform read as drift on a ForceNew attribute and
  wanted to destroy+recreate every already-created instance on every
  subsequent plan.
- private_network_cidrs bumped from /29 to /28 - too tight once the
  platform's own reserved ports are accounted for.

Also removed the priv_srv_01/02/03 demo instances and the LAN network/
security group only they used - this deployment provisions router VMs
only, confirmed with the user.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011hXR2ftXZZhJ4Y3XuSoR8r
2026-09-07 08:55:15 +03:00

2.3 KiB

Summary: деплой только роутеров (без приватных серверов)

Дата: 2026-09-07 План: 2026-09-07-router-only-deployment-plan.md

Что сделано

terraform/main.tf

Удалены: vkcs_compute_instance.priv_srv_01/02/03, vkcs_networking_network.lan_net, vkcs_networking_subnet.lan_subnet, vkcs_networking_secgroup.private_sg и его 3 правила (from_rfc_net10/172/192_in) — всё это использовалось исключительно приватными серверами и стало мёртвым кодом. Осталось: router_sg + 4 правила, default security group lookup, keypair, router_priv_net/subnet/port (по числу private_network_cidrs), единственный ресурс vkcs_compute_instance.router (count = var.router_count).

terraform/tests/test_terraform_delivery.py

Добавлен test_deployment_is_router_only — regression guard: единственный compute-instance — router, единственная security group — router_sg, нет lan_net. Итог сьюта: 56 passed (было 55).

README.md

Обновлено описание: только роутеры (демо-сегмент приватных серверов исключён), явно указано, что адреса на портах теперь назначаются Neutron IPAM автоматически (не вычисляются вручную), актуализирован размер подсетей (/28).

Верификация

  • terraform fmt -check -recursive → чисто.
  • venv/bin/pytest terraform/tests -v → 56 passed.
  • Реальный terraform plan против пустого state (после предыдущего destroy) → 19 to add, 0 to change, 0 to destroy: 3 роутера, keypair, 2 приватные сети/подсети (/28), 6 портов, 1 security group + 4 правила. Ровно то, что запрошено — без единого лишнего ресурса.

Следующий шаг

terraform apply по сохранённому плану (terraform/prod.tfplan) ещё не выполнен — ожидает подтверждения пользователя.