# Как залить провайдер в реестр ## Конфигурация ### Реестр - URL: `https://registry.containerk8s.dev.nubes.ru` - S3: Ceph `http://ceph.tst.nubes.ru` - Бакет: `terraform-registry` - S3-префикс: `registry.containerk8s.dev.nubes.ru` ### Креды | Subuser | Назначение | Права | |---|---|---| | `3709:reader` | Реестр (только читает) | read + list | | `3709:super` | Заливка провайдеров | write | ``` Reader: AAYTNYSZIM08DDWV3TK1 / xQVd9CeGXACPIXTBTH4KV6DIHEAyySOFSTrS17Lc Super: 63A90SRCBP51XQ5TX8OB / euEJDZkueh0JHGP1B5jlAnAKriB8kYBR0t466GQ9 ``` ## Структура S3 ``` terraform-registry/ └── registry.containerk8s.dev.nubes.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) ### ⚠️ Важно: S3_ENDPOINT с http:// Ceph тестовый — HTTP, не HTTPS. Если задать `S3_ENDPOINT=ceph.tst.nubes.ru`, скрипт добавит `https://` → упадёт. **Всегда:** `S3_ENDPOINT=http://ceph.tst.nubes.ru` (с префиксом `http://`). ### Команды ```bash # 1. Настроить mc (один раз, креды SUPER) mc alias set ceph http://ceph.tst.nubes.ru \ 63A90SRCBP51XQ5TX8OB \ euEJDZkueh0JHGP1B5jlAnAKriB8kYBR0t466GQ9 # 2. Создать бакет (если ещё нет) mc mb ceph/terraform-registry # 3. Переменные для сборки export ROOT_DIR=~/tf_provider export PROVIDER_DIR=~/tf_provider/provider export REGISTRY_HOSTNAME=registry.containerk8s.dev.nubes.ru export NAMESPACE=nubes-test # nubes-test | nubes-dev | nubes export PROVIDER_NAME=nubes export S3_ENDPOINT=http://ceph.tst.nubes.ru # ← http:// обязательно! export S3_ACCESS_KEY=63A90SRCBP51XQ5TX8OB # super export S3_SECRET_KEY=euEJDZkueh0JHGP1B5jlAnAKriB8kYBR0t466GQ9 # super export S3_BUCKET=terraform-registry # 4. Запуск cd ~/tf_provider bash ~/tf_registry/server/build-provider.sh 5.1.17 ``` ### Что делает скрипт 1. Компилирует Go → linux/windows/darwin × amd64 2. Упаковывает в zip 3. Генерирует SHA256SUMS 4. Подписывает GPG (ключ `secrets/private_key.asc`) 5. Заливает в S3 ### Требования - `~/tf_provider/secrets/private_key.asc` — приватный GPG-ключ - `~/tf_provider/provider/` — исходники Go-провайдера - `mc` (MinIO Client) установлен - `go` установлен ## Проверка после заливки ```bash # API curl https://registry.containerk8s.dev.nubes.ru/v1/providers/nubes-test/nubes/versions # Полный тест bash ~/tf_registry/tests/smoke.sh ``` ## Namespace'ы | Namespace | Назначение | |---|---| | `nubes-test` | Тестовый стенд | | `nubes-dev` | Dev-стенд | | `nubes` | Прод | Terraform-конфиг пользователя: ```hcl terraform { required_providers { nubes = { source = "registry.containerk8s.dev.nubes.ru/nubes-test/nubes" version = "5.1.17" } } } ``` ## Уроки из диалога с чатом сборки 1. **S3_ENDPOINT** — всегда с протоколом (`http://` или `https://`). Без протокола скрипт форсит `https://`. 2. **Бакет** — может не существовать на новом Ceph. Создать через `mc mb`. 3. **Префикс** — должен совпадать с `REGISTRY_HOSTNAME`. Если домен поменялся — обновить и в скрипте, и в Dockerfile реестра. 4. **Креды** — для заливки нужны super (write), для реестра — reader (read+list).