Files
CloudRouterAdvanced/docs/changes/2026-09-03-vkcs-provider-github-mirror-plan.md
ayurishchevandClaude Sonnet 5 5979a9a58b Add adaptive router VM/interface scaling and local delivery integrity tests
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
2026-09-03 16:03:12 +03:00

3.5 KiB
Raw Permalink Blame History

План внедрения: доступ к провайдеру 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.

Шаги

  1. Через GitHub API (api.github.com, доступен) найти последний релиз провайдера — v0.17.2.
  2. Скачать terraform-provider-vkcs_0.17.2_linux_amd64.zip и ..._SHA256SUMS, проверить контрольную сумму перед распаковкой.
  3. Разместить бинарь как filesystem mirror провайдера внутри venv/ (не в git): venv/terraform.d/plugins/registry.terraform.io/vk-cs/vkcs/0.17.2/linux_amd64/.
  4. Добавить terraform/versions.tf с блоком required_providers { vkcs = { source = "vk-cs/vkcs", version = "~> 0.17" } } — раньше в репозитории такого блока не было вовсе (без него Terraform по умолчанию ищет hashicorp/vkcs, которого не существует).
  5. Сгенерировать проектный CLI-конфиг venv/terraform.d/cli-config.tfrc с provider_installation { filesystem_mirror {...} }, указывающий на локальное зеркало — не трогая глобальный ~/.terraformrc пользователя.
  6. Оформить шаги 3-5 как воспроизводимый идемпотентный скрипт terraform/tests/setup-local-terraform.sh (создаёт venv, ставит terraform CLI, провайдер, CLI-конфиг — с проверкой SHA256 на каждом скачивании).
  7. Прогнать реальные terraform init -backend=false + terraform validate во временной копии terraform/ (чтобы не оставлять .terraform//.terraform.lock.hcl в самой поставке) — без каких-либо credentials и без обращений к облачному API (validate проверяет только статическую схему провайдера).
  8. Добавить в terraform/tests/test_terraform_delivery.py параметризованный тест test_terraform_init_and_validate_against_real_provider_schema — реальная валидация при нескольких сочетаниях router_count/private_interface_count (через TF_VAR_*), с pytest.skip, если локальное зеркало ещё не настроено.
  9. Обновить README и текущий summary-документ.

Верификация

  • terraform init + terraform validate вручную — успех, включая router_count=4, private_interface_count=3.
  • venv/bin/pytest terraform/tests -v — весь сьют зелёный.