Files
autotest/polygon-docs/tf-provider-refs.md
T

104 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ссылки: генератор YAML (tf_provider)
Репозиторий Terraform-провайдера Nubes: `~/tf_provider`
## Как генерируются STANDS YAML
| Файл | Описание |
|------|----------|
| `~/tf_provider/README.md` | Общий пайплайн: 4 шага генерации провайдера |
| `~/tf_provider/docs/README.md` | **Главный индекс документации.** Формат токенов (не протухают), DDoS-Guard заголовки, Gateway URL |
| `~/tf_provider/docs/HOWTO_ADD_NEW_SERVICE.md` | Как добавить сервис: `services_list.txt``01_generate_yamls.sh` → API → YAML |
| `~/tf_provider/docs/ARCHITECTURE_NEW.md` | Архитектура: слои (core/provider/resources_gen/yaml), метод Виталия без instanceUid |
| `~/tf_provider/docs/70_api/api-discovery-algorithms.md` | **Ключевой документ.** Алгоритм получения параметров: `/instanceOperations/default/{id}``cfsParams` с `dataDescriptor`, `valueList`, `isModifiable` |
## Критические API-эндпоинты (метод Виталия)
Цепочка из 3 запросов — получение ВСЕХ параметров сервиса без создания инстанса:
1. `GET /api/v1/svc/services` → найти `svcId` по имени
2. `GET /api/v1/svc/services/{svcId}` → найти `svcOperationId` операции (create: `{svc.operations[?operation=="create"].svcOperationId}`)
3. `GET /api/v1/svc/instanceOperations/default/{svcOperationId}`**все cfsParams**: `dataDescriptor` (подполя map-fixed), `valueList`, `isModifiable`, `isSensitive`, `regex`, ...
### Почему `/instanceOperations/default/{id}` а не `/serviceOperation/{id}`:
| Данные | `/serviceOperation/{id}` | `/instanceOperations/default/{id}` |
|--------|--------------------------|-------------------------------------|
| ID, code, тип, isRequired | ✅ | ✅ |
| `valueList` (допустимые значения) | ❌ | ✅ |
| `dataDescriptor` (подполя map-fixed) | ❌ | ✅ |
| `isModifiable` | ❌ | ✅ |
| `regex`, `maxLength`, `minValue`... | ❌ | ✅ |
| `isSensitive` | ❌ | ✅ |
### Формат valueList:
- Для **верхнеуровневых** параметров: JSON-массив `["false", "true"]`
- Для **подполей** dataDescriptor: comma-separated строка `"1,3,5,7"`
## Где взять реальные ответы API (для сверки мока)
```bash
# Токены (НЕ протухают до декабря 2026):
~/tf_provider/secrets/test.token
~/tf_provider/secrets/dev.token
~/tf_provider/secrets/prod.token
# Проверить дату токена:
python3 -c "
import json,base64
t=open('$HOME/tf_provider/secrets/test.token').read().split('.')
d=json.loads(base64.urlsafe_b64decode(t[1]+'=='))
from datetime import datetime,timezone
print(datetime.fromtimestamp(d['exp'],tz=timezone.utc))
"
# Пример curl (test стенд):
curl -s --max-time 10 \
-H "Authorization: Bearer $(cat ~/tf_provider/secrets/test.token)" \
-H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" \
-H "Referer: https://deck-test.ngcloud.ru/" \
"https://lk-api-gateway-test.ngcloud.ru/api/v1/svc/instanceOperations/default/<opId>"
```
### ⛔ DDoS-Guard: ВСЕГДА нужны 3 заголовка
**Без них — 403 Forbidden даже с валидным токеном.**
```bash
-H "Authorization: Bearer $TOKEN"
-H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36"
-H "Referer: https://deck-{stand}.ngcloud.ru/"
```
### URL стендов (Gateway)
| Стенд | Gateway URL | Referer |
|-------|-------------|---------|
| test | `https://lk-api-gateway-test.ngcloud.ru/api/v1/svc` | `https://deck-test.ngcloud.ru/` |
| dev | `https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc` | `https://deck-dev.ngcloud.ru/` |
| prod | `https://lk-api-gateway.ngcloud.ru/api/v1/svc` | `https://deck.ngcloud.ru/` |
## Сгенерированные YAML (все стенды)
| Стенд | Сервисов | Путь |
|-------|----------|------|
| dev | 50 | `~/tf_provider/generated/dev/resources_yaml/` |
| test | 48 | `~/tf_provider/generated/test/resources_yaml/` |
| prod | 46 | `~/tf_provider/generated/prod/resources_yaml/` |
44 сервиса идентичны на всех трёх стендах.
## Поток данных: API → polygon
```
API Nubes (реальный)
→ 01_generate_yamls.sh
→ ~/tf_provider/generated/test/resources_yaml/*.yaml
→ копируются в STANDS/test/resources_yaml/ (autotest)
→ from_stands.py конвертирует
→ polygon/site/services/*.yaml
→ config_loader.py загружает при старте
→ polygon эмулирует /instanceOperations/default/{id}
```