docs(history): этап 4 — перепроверка после перегенерации + подводные камни
Перенесено в файл репозитория (а не только в служебную память VS Code): - результаты полной перегенерации и перепроверки всех трёх стендов; - подводные камни: случайные default от API (детектор дрейфа по побайтовому сравнению не работает); случайный default вшивается в Go-код → drift 15 файлов сразу после перегенерации; generated/<стенд>/go|docs стареют после шага 01; 403 без браузерного User-Agent (DDoS-Guard); - актуальная карта пайплайна, токены, что удалено и что оставлено осознанно.
This commit is contained in:
@@ -186,6 +186,69 @@ GET {NUBES_API_ENDPOINT}/services?limit=200&isProductionReady=true
|
||||
Исправлено коммитом `a68a36a`: `151 k8sOpenbao` раскомментирован (комментарий «нет в PROD UI»
|
||||
устарел), prod перегенерирован — 36 YAML, ровно как в облаке.
|
||||
|
||||
## Этап 4 — перепроверка после полной перегенерации + подводные камни
|
||||
|
||||
Команда: «сгенери YAML для всех стендов, проследи чтобы старого ничего не осталось,
|
||||
перепроверь после генерации всё». Выполнено три прогона `01`:
|
||||
|
||||
```bash
|
||||
for s in dev test prod; do ./TOOLS/scripts/01_generate_yamls.sh --profile TOOLS/config/$s; done
|
||||
# все три: exit=0
|
||||
```
|
||||
|
||||
### Результат перепроверки (2026-09-30)
|
||||
|
||||
| Стенд | YAML | = активных в списке | = облако (`isProductionReady=true`) | Stale | Дубли id | Failures |
|
||||
|---|---|---|---|---|---|---|
|
||||
| dev | 40 | ✅ 40 | ✅ 40 | нет | нет | пусто |
|
||||
| test | 36 | ✅ 36 | ✅ 36 | нет | нет | пусто |
|
||||
| prod | 36 | ✅ 36 | ✅ 36 | нет | нет | пусто |
|
||||
|
||||
Дополнительно проверено:
|
||||
|
||||
- staging-каталоги (`resources_yaml.staging.*`) — не осталось ни одного;
|
||||
- в `resources_yaml/` только `*.yaml`, `.stand`, `embed.go` — посторонних файлов нет;
|
||||
- `.stand` в каждом каталоге совпадает с профилем (`dev`/`test`/`prod`);
|
||||
- бэкапы прошлых версий: dev 3, test 2, prod 2 (ротация `KEEP_BACKUPS=5`);
|
||||
- `generated/<стенд>/tmp/yaml_gen_failures.txt` — пусты;
|
||||
- `git status` — чисто.
|
||||
|
||||
### ⛔ Подводные камни, найденные при перепроверке (важно на будущее)
|
||||
|
||||
1. **API отдаёт случайные `default`.** Часть параметров приходит со случайным
|
||||
суффиксом (`db-ievgpdvu` → `db-ujama5rb`, `kvname-grzjes7l` → `kvname-g3s0uof2`,
|
||||
`flask-seqtiq3t` → `flask-xwfdxdqh`). Поэтому **побайтовое сравнение двух прогонов
|
||||
не является детектором дрейфа** — различия в этих строках не регрессия.
|
||||
2. **Случайный `default` вшивается в сгенерированный Go-код.**
|
||||
Пример: `generated/dev/go/151_k8s_openbao_kv_resource.go` содержит
|
||||
`Default: stringdefault.StaticString("kvname-XXXX")`. Следствие:
|
||||
`check_generated_drift.sh dev` показывает **дрейф 15 файлов сразу после любой**
|
||||
перегенерации YAML — это не ошибка оператора.
|
||||
3. **Производные артефакты стареют молча.** `generated/<стенд>/go` и `generated/<стенд>/docs`
|
||||
создаются шагом `02` и после нового `01` становятся старше своих источников
|
||||
(на момент проверки: `go`/`docs` dev — 08:46, YAML dev — 10:18). Отдельно живёт
|
||||
эфемерная копия `provider/internal/resources_gen` + `provider/resources_yaml`
|
||||
(её кладёт `dev-materialize.sh`, маркер `.stand` = стенд). Их нужно обновлять
|
||||
шагом `02` после каждого `01`.
|
||||
4. **Прямые HTTP-запросы к API без браузерного `User-Agent` получают 403**
|
||||
(DDoS-Guard). С `User-Agent` + `Referer` — 200.
|
||||
|
||||
### Актуальная карта пайплайна на 2026-09-30
|
||||
|
||||
- Единственный путь генерации YAML: `TOOLS/scripts/01_generate_yamls.sh --profile TOOLS/config/<стенд>`
|
||||
(`--profile` обязателен, без него `exit 2`).
|
||||
- Один универсальный движок на все стенды: `TOOLS/bin/yaml-generator`, стенд задаётся
|
||||
переменными окружения (`NUBES_API_ENDPOINT`, `NUBES_API_TOKEN`, `NUBES_SERVICE_ID`,
|
||||
`NUBES_SERVICE_NAME`, `NUBES_OUTPUT_DIR`); список сервисов — свой у каждого стенда.
|
||||
- Стенд-специфичных хардкодов в коде нет — контролируется `check_hardcoded_service_ids.sh`.
|
||||
- Токены: `secrets/{dev,test,prod}.token` (валидны на 2026-09-30, срок до 2026-12-27);
|
||||
обновление — `TOOLS/scripts/00_token_manager.sh` (keycloak refresh, `THRESHOLD_MIN=10`).
|
||||
- Удалены как мёртвые (`1e796c8`): `10/11/12/13_yaml_*.sh`,
|
||||
`02_generate_resources_and_docs_template_v2.sh`, общий `TOOLS/config/services_list.txt`.
|
||||
- Оставлены осознанно: поддержка легаси-прокси `index.cfm`, справочная копия
|
||||
`DOCS_PIPELINE/publish-docs.sh`, исторические `HISTORY/`/`NOTES/`/`docs/`,
|
||||
ручные утилиты `scripts/*.py`.
|
||||
|
||||
## Открытые вопросы (на решение владельца)
|
||||
|
||||
1. Поддержка легаси-прокси `index.cfm`: оставляем или выпиливаем (README уже помечает
|
||||
|
||||
Reference in New Issue
Block a user