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
4.4 KiB
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; terraformCLI v1.16.1 (уже было с прошлого шага);- провайдер
vk-cs/vkcsv0.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 перед распаковкой.