Terraform now provisions router_count IaaS Router VMs (default 2, no longer hardcoded to router1/router2), each with 1 public + private_interface_count isolated private interfaces (no shared LAN or VRRP between routers). Both counts scale via Terraform variables and TF_VAR_* environment variables. The post-install script became a Terraform template that matches interfaces to their expected subnet by CIDR instead of a fragile "first private IP" heuristic. Added an offline pytest suite (terraform/tests/) that checks the delivery's internal consistency and runs real terraform init/validate against the actual vkcs provider schema via a project-local filesystem mirror (provider binary fetched from its GitHub releases, bypassing the region-blocked HashiCorp registry) - no cloud credentials or API calls involved. terraform/versions.tf now declares the previously-missing required_providers block. Ansible (inventory.ini, base/frr_router/keepalived roles) still assumes the old 2-router/2-NIC/VRRP topology and is not yet adapted - documented as a follow-up, not addressed here. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011hXR2ftXZZhJ4Y3XuSoR8r
3.5 KiB
3.5 KiB
План внедрения: доступ к провайдеру vkcs через GitHub-релизы
Дата: 2026-09-03
Проблема
Предыдущая попытка (см. 2026-09-03-local-delivery-integrity-tests-plan.md) не смогла получить реальный провайдер vkcs: registry.terraform.io блокирует регион ("Content not available in your region"), а сконфигурированное зеркало terraform-mirror.mcs.mail.ru не содержит hashicorp/vkcs (404). Пользователь указал использовать https://github.com/vk-cs/terraform-provider-vkcs напрямую — это upstream-репозиторий провайдера, публикующий бинарные релизы через GitHub Releases в обход реестра HashiCorp.
Шаги
- Через GitHub API (
api.github.com, доступен) найти последний релиз провайдера —v0.17.2. - Скачать
terraform-provider-vkcs_0.17.2_linux_amd64.zipи..._SHA256SUMS, проверить контрольную сумму перед распаковкой. - Разместить бинарь как filesystem mirror провайдера внутри
venv/(не в git):venv/terraform.d/plugins/registry.terraform.io/vk-cs/vkcs/0.17.2/linux_amd64/. - Добавить
terraform/versions.tfс блокомrequired_providers { vkcs = { source = "vk-cs/vkcs", version = "~> 0.17" } }— раньше в репозитории такого блока не было вовсе (без него Terraform по умолчанию ищетhashicorp/vkcs, которого не существует). - Сгенерировать проектный CLI-конфиг
venv/terraform.d/cli-config.tfrcсprovider_installation { filesystem_mirror {...} }, указывающий на локальное зеркало — не трогая глобальный~/.terraformrcпользователя. - Оформить шаги 3-5 как воспроизводимый идемпотентный скрипт
terraform/tests/setup-local-terraform.sh(создаёт venv, ставит terraform CLI, провайдер, CLI-конфиг — с проверкой SHA256 на каждом скачивании). - Прогнать реальные
terraform init -backend=false+terraform validateво временной копииterraform/(чтобы не оставлять.terraform//.terraform.lock.hclв самой поставке) — без каких-либо credentials и без обращений к облачному API (validateпроверяет только статическую схему провайдера). - Добавить в
terraform/tests/test_terraform_delivery.pyпараметризованный тестtest_terraform_init_and_validate_against_real_provider_schema— реальная валидация при нескольких сочетанияхrouter_count/private_interface_count(черезTF_VAR_*), сpytest.skip, если локальное зеркало ещё не настроено. - Обновить README и текущий summary-документ.
Верификация
terraform init+terraform validateвручную — успех, включаяrouter_count=4, private_interface_count=3.venv/bin/pytest terraform/tests -v— весь сьют зелёный.