Files
CloudRouterAdvanced/docs/changes/2026-09-03-vkcs-provider-github-mirror-summary.md
T
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

4.4 KiB
Raw Blame History

Summary: доступ к провайдеру vkcs через GitHub-релизы

Дата: 2026-09-03 План: 2026-09-03-vkcs-provider-github-mirror-plan.md

Что сделано

terraform/versions.tf (новый файл)

terraform {
  required_providers {
    vkcs = {
      source  = "vk-cs/vkcs"
      version = "~> 0.17"
    }
  }
}

Раньше такого блока не было вовсе — Terraform по умолчанию искал несуществующий hashicorp/vkcs. Это и было корнем прошлых неудачных попыток terraform init.

terraform/tests/setup-local-terraform.sh (новый файл, идемпотентный)

Разворачивает полностью локальный toolchain внутри venv/ (не в git):

  • Python-пакеты из terraform/tests/requirements.txt;
  • terraform CLI v1.16.1 (уже было с прошлого шага);
  • провайдер vk-cs/vkcs v0.17.2, скачанный напрямую с https://github.com/vk-cs/terraform-provider-vkcs/releases/download/v0.17.2/... (в обход заблокированного по региону registry.terraform.io), с проверкой SHA256SUMS перед распаковкой;
  • провайдер размещён как filesystem mirror: venv/terraform.d/plugins/registry.terraform.io/vk-cs/vkcs/0.17.2/linux_amd64/;
  • проектный CLI-конфиг venv/terraform.d/cli-config.tfrc с блоком provider_installation { filesystem_mirror {...} } — глобальный ~/.terraformrc пользователя не тронут.

terraform/tests/test_terraform_delivery.py

Добавлен параметризованный тест test_terraform_init_and_validate_against_real_provider_schema — реальные terraform init + terraform validate против настоящей схемы провайдера vkcs, во временной копии terraform/ (чтобы не оставлять .terraform//lock-файл в самой поставке), без credentials и без обращений к облаку. Прогнан при трёх сочетаниях router_count/private_interface_count (через TF_VAR_*): дефолты (2/2), 1/1, 4/3 — все успешны. Тест аккуратно скипается (pytest.skip), если setup-local-terraform.sh ещё не запускался.

Итог сьюта: 31 passed (было 28 до этого шага, +3 за счёт параметризации нового теста).

README.md

Раздел "Local delivery integrity tests" переписан: теперь описывает реальную terraform validate через GitHub-зеркало провайдера, команду setup-local-terraform.sh, и упоминание нового versions.tf.

Побочная находка (не исправлялась — вне рамок запроса)

В terraform/main.tf нет явного блока provider "vkcs" {} — переменные username/password/project_id объявлены в variables.tf, но нигде не подключены к конфигурации провайдера. Для validate это не критично (схема провайдера проверяется без учёта credentials), но для реального apply может потребоваться либо явный provider "vkcs" { ... } блок со ссылками на эти переменные, либо провайдер полагается на переменные окружения (OS_*/VKCS_*) — это стоит уточнить отдельно, если планируется реальный apply.

Верификация

  • venv/bin/terraform init -backend=false + venv/bin/terraform validate (во временной копии, с TF_CLI_CONFIG_FILE на локальный mirror) → Success! The configuration is valid. — при дефолтных значениях и при router_count=4, private_interface_count=3.
  • venv/bin/pytest terraform/tests -v → 31 passed.
  • SHA256 бинаря провайдера сверен с terraform-provider-vkcs_0.17.2_SHA256SUMS из релиза GitHub перед распаковкой.