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
2.5 KiB
2.5 KiB
План внедрения: деплой только роутеров (без приватных серверов)
Дата: 2026-09-07
Проблема
Прошлая попытка реального PROD-развёртывания (см. docs/changes/2026-09-06-*) выявила несколько багов (invalid key_name, IP-коллизии на /29, image_id drift), все они исправлены. Всё созданное было удалено (terraform destroy, 25 ресурсов, подтверждено пустым state) по явному запросу пользователя.
Пользователь скорректировал требования к развёртыванию: нужны только 3 роутера, без демо-сегмента priv_srv_01/02/03 (и без разделяемой LAN-сети/security group, которые использовались только ими). Каждый роутер — 3 порта (1 внешний + 2 приватных), каждый приватный порт в своей /28-подсети — это уже соответствует текущей конфигурации после прошлых фиксов.
Решение
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) — ничего из этого больше ничем не используется.terraform/tests/test_terraform_delivery.py: добавитьtest_deployment_is_router_only— regression guard, что единственный compute-instance ресурс —router, единственная security group —router_sg, нетlan_net.README.md: обновить описание (только роутеры; авто-назначение IP через Neutron IPAM вместо ручного вычисления; актуальный размер подсетей/28).- Summary-документ по завершении.
Верификация
terraform fmt -check -recursive.venv/bin/pytest terraform/tests -v.- Реальный
terraform planпротив пустого state (послеdestroy) — должен показать только ресурсы, относящиеся к 3 роутерам.