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
63 lines
2.9 KiB
Markdown
63 lines
2.9 KiB
Markdown
# Quick Start (самостоятельное развёртывание)
|
|
|
|
Пошаговая инструкция для самостоятельного развёртывания сценария из этого репозитория на VK Cloud.
|
|
|
|
## 1. Подготовка
|
|
|
|
- Аккаунт VK Cloud с включённым API/CLI-доступом, `project_id`.
|
|
- SSH-ключ загружен в VK Cloud (имя ключа понадобится в `terraform.tfvars`).
|
|
- Установлены `terraform` (≥1.13) и `ansible`.
|
|
|
|
## 2. Клонировать репозиторий и задать credentials
|
|
|
|
Отредактировать `terraform/terraform.tfvars`:
|
|
|
|
```
|
|
username = "<ваш VK Cloud логин>"
|
|
password = "<пароль>"
|
|
project_id = "<ваш project_id>"
|
|
ssh_key_name = "<имя загруженного SSH-ключа>"
|
|
```
|
|
|
|
## 3. (Опционально) масштабирование
|
|
|
|
По умолчанию: 2 роутера × 3 интерфейса (1 публичный + 2 приватных). Меняется без правки кода — либо раскомментировать нужные строки в `terraform.tfvars`, либо через переменные окружения:
|
|
|
|
```bash
|
|
export TF_VAR_router_count=4
|
|
export TF_VAR_private_interface_count=3
|
|
```
|
|
|
|
## 4. Развернуть
|
|
|
|
```bash
|
|
cd terraform
|
|
terraform init
|
|
terraform plan
|
|
terraform apply
|
|
```
|
|
|
|
Каждая ВМ сама донастроит сеть при первой загрузке (`network-init.sh.tpl`) и перезагрузится.
|
|
|
|
## 5. Настроить Ansible
|
|
|
|
> ⚠️ Важно: `ansible/inventory.ini` и роли (`base`/`frr_router`/`keepalived`) пока жёстко рассчитаны на **2** роутера с интерфейсами `eth0`/`eth1` (VRRP-схема) — под новую N-роутерную/3-NIC архитектуру ещё не адаптированы. Для дефолтных значений (`router_count=2`, `private_interface_count=2`) впишите реальные `wan_ip`/`lan_ip`/GRE/BGP-параметры роутеров в `inventory.ini` вручную. При масштабировании выше 2 роутеров или интерфейсов Ansible-слой нужно дорабатывать отдельно.
|
|
|
|
```bash
|
|
cd ansible
|
|
ansible-playbook -i inventory.ini site.yml
|
|
```
|
|
|
|
## 6. Проверить
|
|
|
|
- SSH на публичные IP роутеров, `cat /var/log/network-config.log` — лог настройки интерфейсов.
|
|
- `ip a`, `networkctl` — убедиться, что `eth0` (WAN) и `eth1..ethN` (приватные) подняты корректно.
|
|
- FRR/strongSwan/keepalived статусы — см. раздел "Under the Hood" в [README.md](../README.md).
|
|
|
|
## Локальная офлайн-проверка поставки (без облака)
|
|
|
|
```bash
|
|
terraform/tests/setup-local-terraform.sh
|
|
venv/bin/pytest terraform/tests -v
|
|
```
|