# Как собрать и залить провайдер ## ⛔ Схема версий **Первая цифра версии жёстко привязана к стенду. НЕ ПУТАТЬ.** | Стенд | Namespace | Диапазон | Профиль | |---|---|---|---| | **PROD** | `nubes` | `1.*` | `TOOLS/config/prod` | | **DEV** | `nubes-dev` | `2.*` | `TOOLS/config/dev` | | **TEST** | `nubes-test` | `3.*` | `TOOLS/config/test` | > ⛔ ЛЕГАСИ (не использовать): `prod=2.*`, `dev=3.*`, `test=5.*`, `0.0.1`. > Примеры версий ниже в этом файле могут содержать легаси-номера — подставляйте актуальную > из `../VERSIONS.md`. ## Архитектура конфигурации ``` 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 = 2.x.x ← актуальную брать из VERSIONS.md │ ├── 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 2.0.18 ``` Компилирует (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 2.0.18 ``` ## Быстрая заливка (без перегенерации YAML/Go) Если YAML'ы и Go-код уже сгенерированы и не менялись — только шаг 3: ```bash # DEV (2.*) ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/dev 2.0.18 # TEST (3.*) ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/test 3.0.1 # PROD (1.*) ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/prod 1.0.1 ``` Креды 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 = "2.0.18" } } } ```