# Summary: подключение provider "vkcs" и безопасная передача PROD-credentials Дата: 2026-09-06 План: [2026-09-06-provider-auth-wiring-plan.md](2026-09-06-provider-auth-wiring-plan.md) ## Что сделано ### `terraform/versions.tf` Добавлен блок: ```hcl provider "vkcs" { auth_url = var.auth_url username = var.username password = var.password project_id = var.project_id region = var.region user_domain_name = var.user_domain_name } ``` До этого `username`/`password`/`project_id`/`region` были orphaned-переменными — объявлены, но нигде не использовались. ### `terraform/variables.tf` - Добавлены `auth_url` (default `"https://infra.mail.ru:35357/v3/"`) и `user_domain_name` (default `"users"`, для сервисных аккаунтов — `"service-users"`). - Исправлен дефолт `region`: было `"ME1"` (код availability zone, спутан с регионом), стало `"RegionOne"` (реальный OpenStack-регион VK Cloud, подтверждено `openrc.sh` пользователя — `OS_REGION_NAME=RegionOne`). Раньше это не проявлялось, т.к. переменная не была подключена ни к чему. ### `.gitignore` Добавлены `*.auto.tfvars`, `*.auto.tfvars.json`, `terraform.tfvars.local` — реальные credentials передаются через автоматически подхватываемый Terraform overlay-файл, а не через правки закоммиченного `terraform.tfvars`. ### `terraform/prod.auto.tfvars.example` (новый файл, без секретов) Документирует паттерн и маппинг полей `openrc.sh` (`OS_AUTH_URL`, `OS_USERNAME`, `OS_PASSWORD`, `OS_PROJECT_ID`, `OS_REGION_NAME`, `OS_USER_DOMAIN_NAME`) → переменные Terraform. ### `terraform/tests/test_terraform_delivery.py` Добавлены тесты: `test_provider_vkcs_wires_all_auth_variables` (regression guard — provider-блок реально подключает все 6 auth-переменных), `test_auth_variable_has_a_default` (`auth_url`/`user_domain_name`/`region` — есть дефолт), `test_gitignore_excludes_auto_tfvars_overlay`, `test_prod_auto_tfvars_example_is_not_gitignored`, `test_tfvars_template_has_no_auth_credentials` (в закоммиченном `terraform.tfvars` не должно быть `auth_url`/`user_domain_name`). Итог: **48 passed** (было 38). ### `README.md` / `docs/QUICKSTART.md` Добавлен раздел "Provider authentication" / обновлён шаг 2 Quick Start — описан paттерн `*.auto.tfvars` и маппинг полей `openrc.sh`. ## Реальная проверка с PROD credentials Пользователь передал `openrc.sh` сервисного аккаунта. Во временной директории **вне репозитория** (не в git, удалена сразу после проверки) собран overlay-файл с реальными значениями (`auth_url`, `username`, `password`, `project_id`, `region=RegionOne`, `user_domain_name=service-users`), поверх закоммиченного `terraform.tfvars`. Выполнены: - `terraform init` — успех, провайдер и бэкенд инициализированы. - `terraform plan` (read-only, ничего не создано) — **успех**: `Plan: 24 to add, 0 to change, 0 to destroy`. Подтверждена реальная аутентификация к `https://infra.mail.ru:35357/v3/` и успешный резолвинг всех трёх data source'ов (`vkcs_images_image.ubuntu24`, `vkcs_networking_network.extnet` по `name="internet"`, `vkcs_networking_secgroup.default` по `name="default"`) — т.е. соответствующие объекты реально существуют в проекте с ожидаемыми именами. Пароль и прочие секреты нигде не сохранялись в репозитории; временная директория удалена немедленно после проверки (подтверждено). ## Верификация - `terraform fmt -check -recursive` → чисто. - Реальные `terraform init`/`validate` (локальный provider-mirror) → успех. - Реальный `terraform plan` с PROD credentials (вне репозитория) → успех, 24 ресурса к созданию, 0 ошибок. - `venv/bin/pytest terraform/tests -v` → **48 passed**. ## Следующий шаг `terraform apply` для реального PROD-развёртывания (3 роутера) пользователем ещё не подтверждён — это отдельное, необратимое действие, требующее явного разрешения.