Commit Graph
118 Commits
Author SHA1 Message Date
Repinoid 809431196f docs(crud): убраны команда по state и фраза про каталог — юзеру не нужны
Замечания владельца: «нахуя это юзеру???» (про grep по apps/terraform.tfstate) и
«Все команды выполняются из каталога TEST_STAND/CRUD — ЭТО ЧТО?????».
- убрано «Свои адреса — из state» с grep -o 'https://...' apps/terraform.tfstate
  (парсинг внутреннего state регуляркой; адреса и так даны таблицей выше);
- убрана фраза «Все команды выполняются из каталога TEST_STAND/CRUD» (после cd
  из шага 1 пользователь уже в этом каталоге — шум);
- README: убраны дублирующие подскобки про test-стенд и версию 3.0.0 (видно в
  main.tf) и хвост «что делать при ошибке» — раздел про ошибки удалён ранее;
- страница: TEST_STAND/CRUD/apps/locals.tf -> apps/locals.tf (как в README).
Проверено: живая страница 161643 байта, cmp с локальной сборкой совпал;
terraform.tfstate / «Все команды» / «при ошибке» — 0 вхождений.
2026-10-02 08:52:28 +03:00
Repinoid bfa9d5f626 docs(crud): сначала действия, потом описание; убрано недоступное пользователю
Требования владельца: «СНАЧАЛА — кратко чё это вообще и ДЕЙСТВИЯ … всё остальное
описание — ПОСЛЕ»; «юзер НЕ МОЖЕТ вводить никакие команды … УБЕРИ ЭТО и подобное».
- раздел «Быстрый старт» — первым: клонирование, заполнение переменных, apply pg,
  creds.json, apply apps, адреса приложений, предупреждение про пароль в файле;
  подробное описание — ниже (READМE: Как это устроено / Что задаёт пользователь /
  Код приложений / Повседневные операции / Файлы / Справка);
- из README убран раздел «Если apply упал», со страницы — «Диагностика, если
  apply упал»: пользователь не может делать вызовы вида
  GET {api_endpoint}/instanceOperations/... — вместо инструкции было ничего не
  работающее; вместе с разделом убрана ссылка на HISTORY/60_stands/... (внутренний
  репозиторий);
- убраны ссылки на внутренний код (provider/internal/.../crud.go:171,
  refsvc_find.go:47) и на строки apps/locals.tf:45,57,68; убран абзац про прежние
  имена tflucee/tfflask/tfnodejs (внутренняя история);
- со страницы убрано «смотрите журнал операции» в разделе «Особенности».
Проверено на живой странице (162257 байт, совпадает с локальной сборкой):
instanceOperations / errorLog / HISTORY/ / crud.go / refsvc_find — 0 вхождений;
первый раздел — «Быстрый старт».
2026-10-02 08:46:46 +03:00
Repinoid 272d4051f4 docs(crud): в README не было клонирования и адресов приложений — добавлено
Владелец: «где про клонирование?? глазами юзера просмотри весь текст». Пройдено
по тексту целиком, добавлено то, без чего пользователь не начнёт и не проверит:
- раздел «Где взять манифесты»: git clone terraform/tf_provider, cd
  TEST_STAND/CRUD, проверка terraform version, откуда берётся провайдер и какой
  версии (обе папки: nubes-test/nubes 3.0.0);
- раздел «Запуск» стал «четыре шага»: шаг 4 «Проверить» с реальными адресами
  (lucee-crud.luceek8s.dev.nubes.ru, flask-crud.pythonk8s.dev.nubes.ru,
  nodejs-crud.nodejsk8s.dev.nubes.ru) и командой, как посмотреть свои адреса в
  state; проверено грепом по apps/terraform.tfstate;
- заменена заглушка <суффикс> на фактический суффикс nodejsk8s;
- добавлен раздел «Если apply упал» (журнал операции вместо errorLog);
- в «Файлы» добавлены terraform.tfvars.example;
- шаг 3: формулировка про имена приведена к исправленной (задаются в locals.tf).
Одновременно исправлена моя ошибка: предыдущая правка склеила две строки
таблицы «Файлы» (pg/main.tf и pg/postgres.tf) — восстановлено.
То же продублировано в docs/curated/crud/three_apps.md (файлы обязаны совпадать).
Проверено: 260 и 265 строк, блоки кода парные (22 и 24), заголовки на месте.
2026-10-02 08:33:17 +03:00
Repinoid 25f9114950 docs(history,todo): ручная публикация страницы CRUD на TEST + отметка в TODO
HISTORY (раздел 5, раздел с ошибками стал 6):
- сборка test-стенда без публикации (S3CFG_REGISTRY в несуществующий путь —
  штатного флага «build-only» у 04 нет);
- заливка в S3 (алиас regdocs из secrets/.s3cfg_registry) и копирование на ВМ
  в /var/www/tf-docs/nubes-test/curated/crud/three_apps/ — сайт отдаёт nginx с ВМ,
  а не из S3;
- проверка: живой URL 200, 163789 байт, cmp с локальной сборкой совпадает,
  version 3.0.0, 5.0.5 нет;
- ограничение: в меню других страниц ссылки нет (их навигация старая);
- заметка: ssh naeel@5.172.178.213 без алиаса не пускает, нужен алиас vps;
- в «Мои ошибки» добавлена неверная формулировка про домены.
TODO: добавлен раздел «Что уже сделано вручную (временно)» и следствие — полная
пересборка нужна, чтобы пример появился в меню, а версии совпали с profile.env.
Проверено: разделы 1-6 в HISTORY, структура TODO на месте, блоки кода парные.
2026-10-02 08:29:50 +03:00
Repinoid fe25be9b85 docs(crud): уточнение про домены — задаётся имя, а не полный домен
Правка владельца: в *_domain лежит не домен, а имя, из которого платформа сама
строит полный домен (lucee-crud -> lucee-crud.luceek8s.dev.nubes.ru,
flask-crud -> flask-crud.pythonk8s.dev.nubes.ru), а уникальны именно полные имена.
Было: «уникальны в облаке — один домен нельзя повесить на два инстанса».
Исправлено в TEST_STAND/CRUD/README.md и в docs/curated/crud/three_apps.md (они
обязаны совпадать).
Проверено: формулировка одинаковая в обоих файлах, собрана и опубликована страница.
2026-10-02 08:29:50 +03:00
Repinoid 07773ed963 docs(todo): пересборка и публикация документации стендов — отдельная работа
В docs/TODO/docs_publish_stale_versions.md зафиксировано:
- проблема: на nubes-test в примерах версия 5.0.5 (в profile.env 3.0.0), на
  nubes-dev 2.0.23 (2.0.0), prod 1.0.0 совпадает;
- причина: {{VERSION}} подставляется при сборке из profile.env (04:185-198),
  сайты не пересобирались после смены нумерации 2026-09-03;
- что сделать: 04 --profile dev/test + заливка mc mirror с ВМ 5.172.178.213
  (команды из DOCS_PIPELINE/README.md), затем проверка версий на живых страницах;
- что уедет заодно: правки curated/crud/three_apps.md (ab9f7d2, 39849bf),
  страницы k8svalkey/k8s_ziti_controller/nodered/nifi;
- предупреждения: публикация = деплой (только по команде), публикация без версии
  в URL со стиранием старых файлов, риск root-овой сборки site/.
В HISTORY-записи раздела 4 добавлена ссылка на этот TODO.
Проверено: 2 блока кода (чётно), раздел «Связанные документы» на месте.
2026-10-02 08:22:07 +03:00
Repinoid 39849bf459 docs(crud): раздел «Что пользователь задаёт сам» продублирован на странице сайта
Стендовый README и страница curated/crud/three_apps.md описывают одно и то же,
поэтому раздел перенесён в страницу сайта сразу после «Структура манифестов»:
- обязательные значения (api_token, realm, s3_name) и создание terraform.tfvars;
- имена с правилами уникальности (кластер и приложения — в пределах стенда,
  юзер/база — в пределах кластера, домены — в облаке) и объяснение через
  adopt_existing_on_create (crud.go:171, refsvc_find.go:47);
- что можно не задавать (дефолты pg/main.tf).
Из шагов 1 и 3 убраны дублирующие таблицы — вместо них ссылка на раздел.
Плюс выровнены отступы в блоке cp terraform.tfvars.example (в двух файлах было
по-разному).
Проверено: diff разделов — совпадает построчно, отличие только в разделителе «---»
(есть в README, не используется на странице); страница 228 строк, 18 строк с
блоками кода (чётно).
2026-10-02 08:08:35 +03:00
Repinoid ab9f7d2962 docs(curated): страница CRUD-стенда приведена к схеме pg/ + apps/
Страница curated/crud/three_apps.md описывала старую схему: всё в одной папке,
два apply и пароль из vault_secrets кластера через try(). Это уже не так.
Переписана по TEST_STAND/CRUD/README.md:
- два каталога = два state, apply/destroy в каждом меняет только своё;
- три шага: pg/ -> terraform output -json > ../apps/creds.json -> apps/;
- пароль берётся из выхода подресурса nubes_postgres_user (не из vault_secrets);
- раздел «Структура манифестов» и новый раздел «Справка: выходные параметры pg/»
  (состав выходов, вид JSON {sensitive,type,value}, соответствие env-переменным
  Flask/Node.js/Lucee);
- имена приведены к текущим: lucee-crud / flask-crud / nodejs-crud, пути в
  apps/locals.tf, добавлен keep_on_destroy;
- снято непроверенное «состояние на 2026-10-01, все 6 ресурсов running» и строка
  про DEV_STAND/CRUD как аналог — там осталась старая плоская схема, сказано прямо.
Проверено: 191 строка, 16 открывающих/закрывающих блоков кода (чётно).
2026-10-02 08:02:28 +03:00
Repinoid 2aa2946700 docs(history): обновлены перекрёстные ссылки на файлы HISTORY после переноса
Перенос в тематические папки сломал бы все ссылки, поэтому обновлены пути:
- HISTORY/OPUS/ -> HISTORY/90_llm/OPUS/, HISTORY/SONNET/ -> HISTORY/90_llm/SONNET/;
- 15 целевых файлов из корня получили свой тематический префикс
  (HISTORY/<файл>.md -> HISTORY/<папка>/<файл>.md) — в 33 файлах репозитория.

Затронуто вне HISTORY: README.md, VERSIONS.md, HOW_TO/DEVOPS_BUILD_PIPELINE.md,
NOTES/README.md, NOTES/10_plans/, NOTES/20_prompts/, NOTES/30_analysis/,
NOTES/40_chat_summaries/, docs/curated/{crud,postgres}, docs/help/dev-reference/,
docs/ops/TESTING.md.

Проверки после правки:
- ссылок вида HISTORY/<дата> без тематической папки не осталось;
- все пути HISTORY/*.md из markdown-ссылок существуют (кроме трёх упоминаний,
  которые не были файлами и до переноса: HISTORY/90_llm/OPUS/3006_1.md,
  3006_0.md — планировавшиеся имена в старых транскриптах,
  и HISTORY/HOWTO-UPLOAD.md — ссылка на старый внешний репозиторий tf_registry);
- ссылки по «голому» имени внутри 90_llm/OPUS/ остались корректными (соседние файлы).
2026-10-02 07:36:09 +03:00
Repinoid 1a049efa44 docs(arch): принцип секретов подресурсов — в TOOLS/ARCHITECTURE.md
Записал в ОБЩИЙ файл архитектуры (TOOLS/ARCHITECTURE.md, PRIMARY SOURCE OF TRUTH):
- раздел «Subresource-born secrets» в Subresource Resources — проблема, принцип,
  правило «service-specific DATA, never logic», факт postgres vs mariadb;
- пункт 3 в Exception Registry — как объявлять признак в YAML-спеке и прокидывать
  через types.go + loader.go, без svc.Name == "..." в шаблоне.

В provider_philosophy.md оставлена короткая ссылка на ARCHITECTURE.md (источник один).
2026-10-01 17:08:30 +03:00
Repinoid 57e7d4d077 docs(arch): принцип секретов подресурсов + чем postgres отличается от mariadb
В раздел 6 (Подресурсы) добавлен подраздел про секреты, рождаемые операцией
подресурса:
- проблема: vault_secrets родителя — Computed, обновляется только в Read, поэтому
  после create_user пароль недоступен в том же apply (Invalid index);
- принцип: пароль должен быть выходом самого подресурса, не читаться из родителя;
- как привязано к данным, а не хардкодом: признак в YAML-спеке (по аналогии с
  suspend_on_destroy_default), условный блок в общем шаблоне;
- факт из спеков: postgres = пароль генерит платформа (нужен выход), mariadb =
  пароль задаёт пользователь на входе (выход не нужен).
2026-10-01 17:06:52 +03:00
Repinoid 00bfe7a3ad docs(curated): страница CRUD-стенда + ссылки на git-репозитории приложений
Новая страница docs/curated/crud/three_apps.md (раздел «Проверенные примеры» в mkdocs.yml):
- что создаётся (6 ресурсов: PG + user + db + Lucee + Flask + Node.js);
- ссылки на git: gitea.services.ngcloud.ru/terraform/{tfluceecrud,tfflaskcrud,tfnodejscrud}
  (проверено HTTP 200), в манифестах — lucee_git_path/flask_git_path/nodejs_git_path;
- запуск: два apply и почему (пароль появляется только после create_user);
- доступ к БД: vault_secrets["users"] -> { "<username>": { "password" } }, и ловушка
  state_out.users (метаданные без пароля);
- особенности: adopt_existing_on_create, уникальные домены, camelCase в postgres_conf, realm;
- диагностика: ошибку смотреть в stages операции, а не в errorLog.

Проверено локальной сборкой mkdocs: страница собирается, битых ссылок нет,
все три ссылки на репозитории присутствуют в HTML.
2026-10-01 14:28:50 +03:00
Repinoid 61405dd3dd docs: пароль БД через vault_secrets["users"] — задокументировано, чтобы не искать
Проверено по API 2026-10-01 (pg4crud2, TEST):
GET /instances/<uid>/vault/users -> {"users":{"user4crudpg":{"password":"..."}}}.
Пароль ЕСТЬ; state.out.users — метаданные без пароля (их легко перепутать).

- README.md: строка навигации «Пароль БД / секреты Vault» + раздел «Грабли, на которые уже наступали»
  (Invalid index из-за одного apply; errorLog врёт — смотреть stages; лишний sensitive).
- docs/curated/postgres/pg_user_db.md: раздел «Пароль пользователя БД и секреты Vault» (ловушки,
  два apply, диагностика через /instanceOperations?fields=stages); исправлено утверждение «все 4 ресурса
  за один apply» — для приложений, читающих пароль, нужен второй apply.
- docs/30_registry/guides/getting-started.md: помечены устаревшие ключи adminUser/adminPass (сейчас 404).
- HISTORY/2026-10-01_...: дополнение с фактами и указанием, что первый разбор ошибся.
2026-10-01 14:06:06 +03:00
Repinoid 0e26e98384 docs(uuid-case): зафиксировать фактический механизм сохранения регистра
- core/refsvc.go: комментарий ссылался на несуществующий блок 'Restore user-provided
  casing' в instance.go. Факт: ref_svc исключены из read-back (InputField только при
  RefSvcId==0), UUID внутри JSON нормализуются при отправке (BuildJSON ->
  LowercaseUUIDsInText).
- docs/60_strategy/terraform_case_sensitivity_fix.md: §4 помечен как историческая
  справка (подхода originalVappUid в коде нет); актуальные §10-§11.

Проверено: go build ./... OK; go test ./internal/... -short -> PASS.
2026-09-30 20:38:37 +03:00
Repinoid b81dc88abe docs(uuid-case): отметить, что фикс выпущен в dev 2.0.24
- HISTORY/2026-09-30: раздел «Следствия» — релиз 2.0.24 (залито в реестр), доки не публиковались.
- terraform_case_sensitivity_fix.md §11: «не выпущено» -> «выпущено в 2.0.24»; уточнение по костылю lower().
2026-09-30 08:50:35 +03:00
Repinoid 9aed2dcdd9 fix(provider): нормализация регистра UUID при отправке map-fixed JSON в API
- resources_core.BuildJSON оборачивает результат в jsonutil.LowercaseUUIDsInText:
  платформа сравнивает регистр UUID при create, а ресурсы отдают id в UPPERCASE
  (nsxtUid/vdcUid) -> без нормализации create Штурвала падал 'Edge не развёрнут
  в указанном vDC' (обнаружено на провайдере 2.0.23 из-под Windows).
- Одна точка покрывает все map-fixed-параметры (create/modify/redeploy),
  регенерация не требуется.
- Документация: HISTORY/2026-09-30, docs/60_strategy/terraform_case_sensitivity_fix.md §11,
  NOTES/30_analysis/ARCHITECTURE_NEW.md §6.5, docs/help/architecture-and-methods.md §7.

Не выпущено: версия не поднималась, релиз/регенерация не выполнялись.
2026-09-30 08:34:04 +03:00
Repinoid 6b6252c42b docs(pipeline): fix vdc CPU example for VM 2026-09-28 09:40:12 +03:00
Repinoid 70b937ea2f docs(pipeline): встроена схема зависимостей сервисов 2026-09-28 09:20:25 +03:00
Repinoid bc1af681aa build(docs): скрипт 04 копирует картинки docs/diagrams (*.svg|png) в публикуемый docs_dir; README диаграмм — раздел о публикации 2026-09-28 09:20:25 +03:00
Repinoid 318b847ede docs(modifiers): квота IP — учёт внешнего адреса ВМ (count = 4), актуальная ссылка на страницу пайплайна 2026-09-28 09:19:14 +03:00
Repinoid 7d762387e7 docs(provider-behavior): vApp/ВМ в таблице ресурсов, в заморозке (suspend/adopt) и в §6-пайплайне (шаги 6-8, лимит vCPU vDC, 14 дней для vApp) 2026-09-28 09:19:00 +03:00
Repinoid 2675495eef docs(pipeline): цепочка расширена vApp -> ВМ — требования (квота CPU vDC, 4-й IP, SSH-ключ), параметры ВМ и образы, внешний доступ, раздел 6 с чек-листом, destroy для vApp/ВМ 2026-09-28 09:18:36 +03:00
Repinoid a366f47eff docs: move diagram artifacts to docs/diagrams, add vApp-IP precondition link and creation guide 2026-09-26 19:30:41 +03:00
Repinoid 6791e8fb5f docs: add styled infrastructure dependency diagram (generator + png + svg) 2026-09-26 19:13:57 +03:00
Repinoid ff38352bfc docs: remove duplicated SNAT label from edge node in flow diagram 2026-09-26 19:06:01 +03:00
Repinoid dc837e8e1a docs: verify cloud service dependency chains against YAML, add VM/Shurval checklists, redraw diagram 2026-09-26 18:49:17 +03:00
Repinoid 223b0ccdca docs: fix compute pool link to originate from vDC 2026-09-26 18:33:01 +03:00
Repinoid ea725bd8b9 docs: add infrastructure services flow diagram (mmd, svg, png) 2026-09-26 08:22:03 +03:00
Repinoid 8d25de9e79 docs: страница «Как работает провайдер (отличия от Terraform)» в навигации + ссылка на страницу пайплайна vDC → Edge → IP → SNAT → Штурвал 2026-09-25 09:59:56 +03:00
Repinoid f8d64948c8 docs(curated): страница «vDC → Edge → IP → SNAT → Штурвал» (требования, заморозка, проверка результата) + nav + HISTORY 2026-09-25 09:47:33 +03:00
Nail c808a3b345 docs: повышение читаемости provider-behavior.md (упрощены §1 списком, §2 модификаторы, §3 id/нормализация, §5 приоритет флагов, §6 ALB-константы) 2026-09-24 20:53:17 +03:00
Nail aaf87d966b docs: страница «Как работает провайдер: отличия от канонического Terraform» (freeze/destroy, пайплайн vDC→Edge→IP→SNAT→Штурвал, FAQ) + кейс UUID внутри JSON в case-sensitivity документе 2026-09-24 20:40:18 +03:00
Nail 1611f7afa8 docs(curated): страницы примеров приведены к реальным файлам (versions/provider/variables/outputs), организация по имени, снята пометка «не проверено» 2026-09-24 16:15:15 +03:00
Repinoid 5bd197f031 feat(provider): ресурс аллокации принимает имя организации (резолв в UUID через ResolveRefSvcParamValue, как в nubes_vc_vdc); конфиги и доки без org_uid 2026-09-24 15:28:13 +03:00
Repinoid bd5de0cead docs(pipeline): страница переписана как инструкция для пользователя (шаги, значения из ЛК, команды) 2026-09-24 15:21:41 +03:00
Repinoid c3b82cf074 docs(pipeline): ссылка на репозиторий примеров tf_examples и порядок клонирования 2026-09-24 15:00:07 +03:00
Repinoid 9590005914 docs: страница пайплайна vDC → Edge → внешние IP → SNAT (Ресурсы-модификаторы (IP организации, SNAT)) 2026-09-24 14:56:00 +03:00
Repinoid e25ef02a1a docs: убрать устаревшее «канонизация в plan-modifier» (совет Opus был неверен); план живого прогона FullPipe 2026-09-24 14:04:08 +03:00
Repinoid ed4493c0ee docs: правки по ревью (канонизация, destroy-семантика) + статус выполнения 2026-09-24 10:52:51 +03:00
Repinoid 62abcd64f5 docs(providers): страница ресурсов-модификаторов (nubes_vc_org_ip_allocation, nubes_vc_nsxt_snat) + nav 2026-09-24 10:26:21 +03:00
Repinoid 3973f912fc chore(docs): удалить docs/TODO/what_not_in_terraform.md + убрать ссылки на него из комментариев 2026-09-24 10:24:13 +03:00
Repinoid 2d8e435dd4 docs: пометить отменённый заход модификаторов как LEGACY + исправить ложные факты
- баннеры «ЛОЖНЫЙ ПУТЬ — ОТМЕНЕНО» на 4 файла HISTORY/OPUS/2026-09-22_modifier_* и docs/60_strategy/modifier_resources_ideology_and_specification.md
- vIPConfigure: replace-семантика, НЕ накопительная (по тесту docs/ORG_IP_MODIFIER_TEST_2026-09-22.md)
- обновлены ссылки на перенесённые материалы (docs/... -> NOTES/..., HOW_TO/...)
2026-09-24 07:51:25 +03:00
Repinoid d93ff66482 chore: save current changes 2026-09-24 07:25:27 +03:00
Repinoid a96e38fb1e chore: save current changes 2026-09-23 19:23:31 +03:00
Repinoid 20ea79a489 docs(modifier): анализ inverse-архитектуры + промпты Опусу (глобальная архитектура оверлея) 2026-09-23 08:43:56 +03:00
Repinoid c634a1c51b docs: move root prompts 2026-09-22 21:26:26 +03:00
Repinoid 57bf79d85b docs(todo): план разбиения client.go (1678 строк) на модули 2026-09-22 18:56:11 +03:00
Repinoid 788073f1ea docs(fullpipe): задокументировать проверку модификатора vc_org ip_space (modify 1↔2↔0, идемпотентность) 2026-09-22 17:46:23 +03:00
Repinoid eb85a3dc72 docs(har): пометить ошибки сломанного Edge как неподтверждённые наблюдения, не правила 2026-09-22 15:01:23 +03:00
Repinoid bcbc49dc52 docs(har): Insufficient rule blocks = нельзя снять ALB при живых VS (needEnableAVI forward-only) 2026-09-22 14:59:57 +03:00