doc: HOWTO-UPLOAD.md переписан под новый пайплайн (3 шага, registry.env, profile.env)

This commit is contained in:
“Naeel”
2026-08-09 16:00:30 +04:00
parent 260766e0b2
commit cfd1235d04
2 changed files with 103 additions and 95 deletions
+100 -92
View File
@@ -1,35 +1,102 @@
# Как залить провайдер в реестр # Как собрать и залить провайдер
## ⛔ Схема версий ## ⛔ Схема версий
**Первая цифра версии жёстко привязана к стенду. НЕ ПУТАТЬ.** **Первая цифра версии жёстко привязана к стенду. НЕ ПУТАТЬ.**
| Стенд | Namespace | Версия | Первая цифра | | Стенд | Namespace | Первая цифра | Профиль |
|---|---|---|---| |---|---|---|---|
| **PROD** | `nubes` | `2.x` | `2.*` | | **PROD** | `nubes` | `2.*` | `TOOLS/config/prod` |
| **DEV** | `nubes-dev` | `3.x` | `3.*` | | **DEV** | `nubes-dev` | `3.*` | `TOOLS/config/dev` |
| **TEST** | `nubes-test` | `5.x` | `5.*` | | **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 TOOLS/config/
Super: L9F0R8CYYKYIUW180203 / yJlgxoKsRBwCtJQh57Z0nwo5EBDYmyBNDDhG6NKw ├── 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 ## Структура S3
@@ -38,63 +105,15 @@ Super: L9F0R8CYYKYIUW180203 / yJlgxoKsRBwCtJQh57Z0nwo5EBDYmyBNDDhG6NKw
nubes-terraform-registry/ nubes-terraform-registry/
└── tf-registry.containerk8s.services.ngcloud.ru/ └── tf-registry.containerk8s.services.ngcloud.ru/
└── {namespace}/ └── {namespace}/
└── {provider}/ └── nubes/
└── {version}/ └── {version}/
├── terraform-provider-{name}_{ver}_linux_amd64.zip ├── terraform-provider-nubes_{ver}_linux_amd64.zip
├── terraform-provider-{name}_{ver}_windows_amd64.zip ├── terraform-provider-nubes_{ver}_windows_amd64.zip
├── terraform-provider-{name}_{ver}_darwin_amd64.zip ├── terraform-provider-nubes_{ver}_darwin_amd64.zip
├── terraform-provider-{name}_{ver}_SHA256SUMS ├── terraform-provider-nubes_{ver}_SHA256SUMS
└── terraform-provider-{name}_{ver}_SHA256SUMS.sig └── 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 ```bash
@@ -106,31 +125,20 @@ curl -s https://tf-registry.containerk8s.services.ngcloud.ru/v1/providers/nubes-
# PROD # PROD
curl -s https://tf-registry.containerk8s.services.ngcloud.ru/v1/providers/nubes/nubes/versions | python3 -m json.tool 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 ```hcl
terraform { terraform {
required_providers { required_providers {
nubes = { nubes = {
source = "tf-registry.containerk8s.services.ngcloud.ru/nubes-test/nubes" source = "tf-registry.containerk8s.services.ngcloud.ru/nubes-dev/nubes"
version = "5.1.17" version = "3.1.13"
} }
} }
} }
+3 -3
View File
@@ -4,9 +4,9 @@
| Стенд | Namespace | Версия | Дата заливки | | Стенд | Namespace | Версия | Дата заливки |
|---|---|---|---| |---|---|---|---|
| DEV | `nubes-dev` | `3.0.1` | 2026-08-09 | | DEV | `nubes-dev` | `3.0.1` | 2026-08-09 | ⚠️ собрано из TEST-YAML, пересобрать из DEV API |
| TEST | `nubes-test` | `5.1.17` | 2026-08-09 | | TEST | `nubes-test` | `5.1.17` | 2026-08-09 | |
| PROD | `nubes` | — | — | | PROD | `nubes` | — | — | |
## Как проверить ## Как проверить