56 lines
5.0 KiB
Markdown
56 lines
5.0 KiB
Markdown
# 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 роутера) пользователем ещё не подтверждён — это отдельное, необратимое действие, требующее явного разрешения.
|