# Как собрать и залить провайдер ## ⛔ Схема версий **Первая цифра версии жёстко привязана к стенду. НЕ ПУТАТЬ.** | Стенд | Namespace | Первая цифра | Профиль | |---|---|---|---| | **PROD** | `nubes` | `2.*` | `TOOLS/config/prod` | | **DEV** | `nubes-dev` | `3.*` | `TOOLS/config/dev` | | **TEST** | `nubes-test` | `5.*` | `TOOLS/config/test` | ## Архитектура конфигурации ``` TOOLS/config/ ├── registry.env ← ЕДИНЫЙ реестр (НЕ зависит от стенда) │ REGISTRY_HOSTNAME = tf-registry.containerk8s.services.ngcloud.ru │ S3_ENDPOINT = https://s3.msk-1.ngcloud.ru │ S3_BUCKET = nubes-terraform-registry │ ├── dev/profile.env ← стенд-специфика │ NUBES_API_ENDPOINT = ...dev... │ TOKEN_FILE = secrets/dev.token │ NAMESPACE = nubes-dev │ VERSION = 3.x.x │ ├── test/profile.env └── prod/profile.env ``` Скрипты подгружают ОБА файла: `registry.env` → общие настройки реестра, `profile.env` → стенд-специфика. **Чтобы сменить реестр** — правишь только `TOOLS/config/registry.env`. ## Полный пайплайн (3 шага) ### Требования - Токены в `secrets/{dev,test,prod}.token` - `secrets/private_key.asc` — GPG-ключ для подписи - `secrets/.s3cfg_registry` — S3-креды (или `S3_ACCESS_KEY`/`S3_SECRET_KEY` в env) - `go` установлен - `mc` (MinIO Client) установлен, алиас `prod-s3` ### Шаг 1 — Сгенерировать YAML из API ```bash cd ~/tf_provider ./TOOLS/scripts/01_generate_yamls.sh --profile TOOLS/config/dev ``` Запрашивает спецификации сервисов из API стенда → пишет YAML в `generated/dev/resources_yaml/`. ### Шаг 2 — Сгенерировать Go-ресурсы и документацию ```bash ./TOOLS/scripts/02_generate_resources_and_docs_v2.sh --profile TOOLS/config/dev ``` Из YAML генерирует: - `generated/dev/go/` — Go-код ресурсов - `generated/dev/docs/` — Markdown-документацию ### Шаг 3 — Собрать и залить в реестр ```bash ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/dev 3.1.13 ``` Компилирует (linux/windows/darwin), подписывает GPG, заливает в S3. ### Одной командой (для ленивых) ```bash ./TOOLS/scripts/01_generate_yamls.sh --profile TOOLS/config/dev && \ ./TOOLS/scripts/02_generate_resources_and_docs_v2.sh --profile TOOLS/config/dev && \ ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/dev 3.1.13 ``` ## Быстрая заливка (без перегенерации YAML/Go) Если YAML'ы и Go-код уже сгенерированы и не менялись — только шаг 3: ```bash # DEV ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/dev 3.1.13 # TEST ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/test 5.1.17 # PROD ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/prod 2.1.23 ``` Креды S3 подхватываются из `secrets/.s3cfg_registry`. Или через env: ```bash export S3_ACCESS_KEY=... export S3_SECRET_KEY=... ``` ## Структура S3 ``` nubes-terraform-registry/ └── tf-registry.containerk8s.services.ngcloud.ru/ └── {namespace}/ └── nubes/ └── {version}/ ├── terraform-provider-nubes_{ver}_linux_amd64.zip ├── terraform-provider-nubes_{ver}_windows_amd64.zip ├── terraform-provider-nubes_{ver}_darwin_amd64.zip ├── terraform-provider-nubes_{ver}_SHA256SUMS └── terraform-provider-nubes_{ver}_SHA256SUMS.sig ``` ## Проверка после заливки ```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 ``` ## Актуальные версии Файл [`VERSIONS.md`](VERSIONS.md) — единственный источник правды. После каждой заливки — обновить. ## Terraform-конфиг пользователя ```hcl terraform { required_providers { nubes = { source = "tf-registry.containerk8s.services.ngcloud.ru/nubes-dev/nubes" version = "3.1.13" } } } ```