diff --git a/HOWTO-UPLOAD.md b/HOWTO-UPLOAD.md index d6b6f2d..689f0c7 100644 --- a/HOWTO-UPLOAD.md +++ b/HOWTO-UPLOAD.md @@ -1,35 +1,102 @@ -# Как залить провайдер в реестр +# Как собрать и залить провайдер ## ⛔ Схема версий **Первая цифра версии жёстко привязана к стенду. НЕ ПУТАТЬ.** -| Стенд | Namespace | Версия | Первая цифра | +| Стенд | Namespace | Первая цифра | Профиль | |---|---|---|---| -| **PROD** | `nubes` | `2.x` | `2.*` | -| **DEV** | `nubes-dev` | `3.x` | `3.*` | -| **TEST** | `nubes-test` | `5.x` | `5.*` | +| **PROD** | `nubes` | `2.*` | `TOOLS/config/prod` | +| **DEV** | `nubes-dev` | `3.*` | `TOOLS/config/dev` | +| **TEST** | `nubes-test` | `5.*` | `TOOLS/config/test` | -Пример: `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 +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 @@ -38,63 +105,15 @@ Super: L9F0R8CYYKYIUW180203 / yJlgxoKsRBwCtJQh57Z0nwo5EBDYmyBNDDhG6NKw nubes-terraform-registry/ └── tf-registry.containerk8s.services.ngcloud.ru/ └── {namespace}/ - └── {provider}/ + └── nubes/ └── {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 + ├── 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 ``` -## Заливка (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 @@ -106,31 +125,20 @@ curl -s https://tf-registry.containerk8s.services.ngcloud.ru/v1/providers/nubes- # 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`. +Файл [`VERSIONS.md`](VERSIONS.md) — единственный источник правды. После каждой заливки — обновить. -## Namespace'ы +## Terraform-конфиг пользователя -| 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" + source = "tf-registry.containerk8s.services.ngcloud.ru/nubes-dev/nubes" + version = "3.1.13" } } } diff --git a/VERSIONS.md b/VERSIONS.md index 0a35f9b..83a580e 100644 --- a/VERSIONS.md +++ b/VERSIONS.md @@ -4,9 +4,9 @@ | Стенд | Namespace | Версия | Дата заливки | |---|---|---|---| -| DEV | `nubes-dev` | `3.0.1` | 2026-08-09 | -| TEST | `nubes-test` | `5.1.17` | 2026-08-09 | -| PROD | `nubes` | — | — | +| DEV | `nubes-dev` | `3.0.1` | 2026-08-09 | ⚠️ собрано из TEST-YAML, пересобрать из DEV API | +| TEST | `nubes-test` | `5.1.17` | 2026-08-09 | | +| PROD | `nubes` | — | — | | ## Как проверить