doc: развёрнутое объяснение — откуда YAML, зачем from_stands.py, когда запускать

This commit is contained in:
2026-08-02 06:37:36 +04:00
parent 0a9ad193e8
commit 9bf1bb215c
+49 -4
View File
@@ -49,17 +49,62 @@ cd site && python app.py # порт 5000
pytest tests/ -v # 19 тестов pytest tests/ -v # 19 тестов
``` ```
## Обновление YAML из terraform ## Откуда берутся сервисы (YAML)
**Вручную** — при каждом изменении в `~/tf_provider/generated/`: Polygon эмулирует API Nubes. Чтобы знать какие сервисы, операции и параметры
существуют — он читает YAML-конфиги. Но Nubes генерит YAML в **другом формате**,
неудобном для полигона. Поэтому есть двухэтапный процесс:
```
~/tf_provider/generated/{dev,test,prod}/resources_yaml/*.yaml ← источник (терраформ)
│ from_stands.py — конвертация формата, дедупликация, нормализация
│ Запускается ВРУЧНУЮ при изменении терраформ-репы
polygon/site/services/{dev,test,prod}/*.yaml ← скоммичены в git-репу полигона
│ config/loader.py — загрузка ВСЕХ YAML в память при старте
Память Flask-процесса (~0.7 MB на 3 стенда)
```
### Почему нельзя читать терраформ-формат напрямую?
Терраформ-формат хранит параметры **внутри** операций, с дубликатами.
Например параметр `resourceRealm` повторяется в create, modify и delete —
три копии одного и того же.
Полигону нужен плоский список **уникальных** параметров (`cfsParams`),
плюс индекс «какой параметр к какой операции» (`cfsParamsByOp`).
Плюс `stateParams` (дефолты для create), `stateOut` (subresource-ключи),
раскодированные HTML-entities (`"``"`).
Всё это делает `from_stands.py` **один раз**, а не на лету при каждом запросе.
### Когда запускать обновление?
Когда терраформ-репа обновилась (добавили/удалили сервис, изменили параметры) —
нужно перегенерить YAML и передеплоить полигон:
```bash ```bash
cd site cd site
python from_stands.py ~/tf_provider/generated/dev/resources_yaml services/dev python from_stands.py ~/tf_provider/generated/dev/resources_yaml services/dev
python from_stands.py ~/tf_provider/generated/test/resources_yaml services/test python from_stands.py ~/tf_provider/generated/test/resources_yaml services/test
python from_stands.py ~/tf_provider/generated/prod/resources_yaml services/prod python from_stands.py ~/tf_provider/generated/prod/resources_yaml services/prod
cd .. && git add services/ && git commit -m "regenerate YAML" && git push
# → редеплоить через Nubes cd ..
git add services/
git commit -m "regenerate YAML from terraform (добавлен сервис X)"
git push
# → редеплоить polygon через Nubes UI
```
### Как проверить что всё загрузилось?
```bash
curl https://polygon.pythonk8s.dev.nubes.ru/dev/api/v1/svc/services | python3 -m json.tool | head -20
``` ```
## API (17 эндпоинтов) ## API (17 эндпоинтов)