138 lines
4.5 KiB
Markdown
138 lines
4.5 KiB
Markdown
# Как залить провайдер в реестр
|
||
|
||
## ⛔ Схема версий
|
||
|
||
**Первая цифра версии жёстко привязана к стенду. НЕ ПУТАТЬ.**
|
||
|
||
| Стенд | Namespace | Версия | Первая цифра |
|
||
|---|---|---|---|
|
||
| **PROD** | `nubes` | `2.x` | `2.*` |
|
||
| **DEV** | `nubes-dev` | `3.x` | `3.*` |
|
||
| **TEST** | `nubes-test` | `5.x` | `5.*` |
|
||
|
||
Пример: `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
|
||
```
|
||
|
||
## Структура S3
|
||
|
||
```
|
||
nubes-terraform-registry/
|
||
└── tf-registry.containerk8s.services.ngcloud.ru/
|
||
└── {namespace}/
|
||
└── {provider}/
|
||
└── {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
|
||
```
|
||
|
||
## Заливка (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
|
||
# 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
|
||
|
||
# Smoke-тест
|
||
bash ~/tf_registry/tests/smoke.sh https://tf-registry.containerk8s.services.ngcloud.ru
|
||
```
|
||
|
||
## Актуальные версии
|
||
|
||
Файл [`VERSIONS.md`](VERSIONS.md) — единственный источник правды о том, что залито на каждом стенде.
|
||
После каждой заливки — обновить `VERSIONS.md`.
|
||
|
||
## Namespace'ы
|
||
|
||
| 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"
|
||
}
|
||
}
|
||
}
|
||
```
|