Files
tf_provider/HOWTO-UPLOAD.md
T

146 lines
4.9 KiB
Markdown

# Как собрать и залить провайдер
## ⛔ Схема версий
**Первая цифра версии жёстко привязана к стенду. НЕ ПУТАТЬ.**
| Стенд | 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"
}
}
}
```