# Как залить провайдер в реестр ## ⛔ Схема версий **Первая цифра версии жёстко привязана к стенду. НЕ ПУТАТЬ.** | Стенд | Namespace | Версия | Первая цифра | |---|---|---|---| | **PROD** | `nubes` | `2.x` | `2.*` | | **DEV** | `nubes-dev` | `3.x` | `3.*` | | **TEST** | `nubes-test` | `5.x` | `5.*` | Пример: `3.0.1` — DEV. `5.1.17` — TEST. `2.1.23` — PROD. ## Конфигурация ### Реестр - URL: `https://tf-registry.containerk8s.services.ngcloud.ru` - S3: `s3.msk-1.ngcloud.ru` (HTTPS) - Бакет: `nubes-terraform-registry` - S3-префикс: `tf-registry.containerk8s.services.ngcloud.ru` ### Креды (аккаунт `1112_terraform`) | Subuser | Назначение | Права | |---|---|---| | `1112_terraform:reader` | Реестр (только читает) | read + list | | `1112_terraform:super` | Заливка провайдеров | write | ``` Reader: 6DDP5PKQEE37WLSWXP07 / W0vV4YNeHIqMa2sRCXsR61ZuQfAJIZzVj2VgnBrT Super: L9F0R8CYYKYIUW180203 / yJlgxoKsRBwCtJQh57Z0nwo5EBDYmyBNDDhG6NKw ``` ## Структура S3 ``` nubes-terraform-registry/ └── tf-registry.containerk8s.services.ngcloud.ru/ └── {namespace}/ └── {provider}/ └── {version}/ ├── terraform-provider-{name}_{ver}_linux_amd64.zip ├── terraform-provider-{name}_{ver}_windows_amd64.zip ├── terraform-provider-{name}_{ver}_darwin_amd64.zip ├── terraform-provider-{name}_{ver}_SHA256SUMS └── terraform-provider-{name}_{ver}_SHA256SUMS.sig ``` ## Заливка (build-provider.sh) ### Требования - `~/tf_registry/` — склонирован репозиторий реестра - `~/tf_provider/` — этот репозиторий - `~/tf_provider/secrets/private_key.asc` — приватный GPG-ключ для подписи - `go` установлен - `mc` (MinIO Client) установлен ### Команды ```bash # 1. Настроить mc (один раз, креды SUPER) mc alias set prod-s3 https://s3.msk-1.ngcloud.ru L9F0R8CYYKYIUW180203 yJlgxoKsRBwCtJQh57Z0nwo5EBDYmyBNDDhG6NKw # 2. Креды для S3 (обязательно) export S3_ACCESS_KEY=L9F0R8CYYKYIUW180203 export S3_SECRET_KEY=yJlgxoKsRBwCtJQh57Z0nwo5EBDYmyBNDDhG6NKw # 3. Заливка (NAMESPACE + VERSION) # DEV: export NAMESPACE=nubes-dev bash ~/tf_registry/server/build-provider.sh 3.0.1 # TEST: export NAMESPACE=nubes-test bash ~/tf_registry/server/build-provider.sh 5.1.17 # PROD: export NAMESPACE=nubes bash ~/tf_registry/server/build-provider.sh 2.1.23 ``` Дефолты скрипта (можно переопределить через env): - `REGISTRY_HOSTNAME` = `tf-registry.containerk8s.services.ngcloud.ru` - `NAMESPACE` = `nubes-test` - `PROVIDER_NAME` = `nubes` - `S3_ENDPOINT` = `https://s3.msk-1.ngcloud.ru` - `S3_BUCKET` = `nubes-terraform-registry` - `PROVIDER_DIR` = `~/tf_provider/provider` ### Что делает скрипт 1. Компилирует Go → linux/windows/darwin × amd64 2. Упаковывает в zip 3. Генерирует SHA256SUMS 4. Подписывает GPG (ключ `secrets/private_key.asc`) 5. Заливает в S3 ## Проверка после заливки ```bash # DEV curl -s https://tf-registry.containerk8s.services.ngcloud.ru/v1/providers/nubes-dev/nubes/versions | python3 -m json.tool # TEST curl -s https://tf-registry.containerk8s.services.ngcloud.ru/v1/providers/nubes-test/nubes/versions | python3 -m json.tool # PROD curl -s https://tf-registry.containerk8s.services.ngcloud.ru/v1/providers/nubes/nubes/versions | python3 -m json.tool # Smoke-тест bash ~/tf_registry/tests/smoke.sh https://tf-registry.containerk8s.services.ngcloud.ru ``` ## Актуальные версии Файл [`VERSIONS.md`](VERSIONS.md) — единственный источник правды о том, что залито на каждом стенде. После каждой заливки — обновить `VERSIONS.md`. ## Namespace'ы | Namespace | Назначение | |---|---| | `nubes-test` | Тестовый стенд | | `nubes-dev` | Dev-стенд | | `nubes` | Прод | Terraform-конфиг пользователя: ```hcl terraform { required_providers { nubes = { source = "tf-registry.containerk8s.services.ngcloud.ru/nubes-test/nubes" version = "5.1.17" } } } ```