Commit Graph
123 Commits
Author SHA1 Message Date
Repinoid d0cbd050fe test_stand/crud(apps): новые домены flask-crud / lucee-crud / nodejs-crud
Прежние домены (tfflask / tflucee / tfnodejs) заняты старыми инстансами:
crud-flask suspended (с зависшей операцией), crud-lucee suspended, crud-nodejs running.
Создание новых сервисов с теми же доменами платформа отвергла бы как
'domain уже используется другим инстансом'.

Домен указан без точек, поэтому A-запись создаётся автоматически в служебной
DNS-зоне ресурсной платформы.

terraform validate — Success.
2026-10-01 18:39:29 +03:00
Repinoid 03b368a55a test_stand/crud(apps): новые имена ресурсов + SERVICE_NAME для колонки created_by
- locals.tf: crud-flask → flask-crud, crud-lucee → lucee-crud, crud-nodejs → nodejs-crud;
- json_env: SERVICE_NAME = flask/lucee/nodejs (без -crud) — это значение пишется
  приложением в колонку created_by таблицы crud_items;
- terraform validate — Success.

Код приложений (DDL created_at/created_by + INSERT + UI) — в репозиториях
tfflaskcrud/tfnodejscrud/tfluceecrud (origin переключён на terraform/*):
e5fce97, 23338cb, ffcd0c0.
2026-10-01 18:37:44 +03:00
Repinoid 066d6b472b test_stand/crud(pg): пароль берётся из выхода подресурса, а не из vault_secrets кластера
output pg_password = nubes_postgres_user.crud_user_0.password — значение известно в том
же apply, где создан пользователь, поэтому ни try(), ни двух apply в pg/ больше не
требуется. Обновлён комментарий про порядок вычисления.
2026-10-01 17:15:20 +03:00
Repinoid ed92de1544 test_stand/crud: из README и комментариев убрана вся история (try, «раньше»)
README читает человек впервые — ему нужны структура, шаги запуска и операции,
а не разбор прошлых костылей. Удалено:
- раздел «Почему нельзя создать всё одним apply» с историей про try() и PGPASSWORD;
- упоминания try() в apps/lucee.tf, apps/flask.tf, apps/nodejs.tf;
- «data-source/backend» из apps/locals.tf и путь к удалённому разделу из pg/outputs.tf.

Заодно удалён старый TEST_STAND/CRUD/terraform.tfvars (не читается, значения
перенесены в pg/terraform.tfvars и apps/terraform.tfvars).

Проверено: terraform validate — Success в pg/ и apps/ (apps — с временным creds.json).
2026-10-01 16:42:46 +03:00
Repinoid 4834e992f3 test_stand/crud: разделение на pg/ (общая БД) и apps/ (потребители)
Было: одна папка, один state — destroy убивал и БД, и приложения; пароль БД
приходилось вытаскивать костылём try() в одном apply, приложения поднимались
с пустым PGPASSWORD.

Стало:
- pg/  — кластер PostgreSQL + пользователь + база + outputs (хост/порт/юзер/база/пароль);
  destroy здесь переводит кластер в Suspend, а пользователь и база не удаляются
  (keep_on_destroy = true + adopt_existing_on_create = true);
- apps/ — три приложения-потребителя; креды БД читаются из creds.json (выгрузка
  outputs папки pg/, т.к. state раздельные, а data-source у провайдера нет);
  try() убран полностью — пароль к моменту этого apply уже существует;
- apps/.gitignore — creds.json, terraform.tfvars, state/lock;
- README.md переписан: структура, «зачем разделено», пошаговые 3 шага запуска,
  повседневные операции (destroy приложений не трогает БД), про destroy базы.

Проверено: terraform init+validate в обеих папках — Success;
plan в pg/ — 3 to add (кластер, пользователь, база) + 6 outputs.
2026-10-01 16:35:14 +03:00
Repinoid e8c03d8ded test_stand/crud: keep_on_destroy=true для пользователя и базы PostgreSQL
Инстанс PG при destroy уходит в Suspend (suspend_on_destroy_default: true в
90_postgres.yaml), а не удаляется. Без keep_on_destroy подресурсы (create_user/
create_database) удалялись бы из живого кластера — после resume приложения
работали бы с пустой БД, данные базы были бы потеряны.

keep_on_destroy=true → режим state_only: при destroy подресурс остаётся в облаке
и только убирается из state. В паре с adopt_existing_on_create=true следующий
apply усыновляет существующий объект, а не падает на 'уже существует'.

Проверено: terraform validate — Success (провайдером 3.0.0, где атрибут есть).
2026-10-01 16:08:30 +03:00
Repinoid c2c870bc34 stand(TEST/CRUD): terraform fmt — выравнивание access_configuration в postgres.tf 2026-10-01 14:24:19 +03:00
Repinoid 0353ff79e5 stand(TEST/CRUD): пароль БД через try() — первый apply больше не падает
Раньше locals читали пароль напрямую: jsondecode(vault_secrets["users"]).user4crudpg.password.
При первом apply пароля ещё нет (create_user выполняется после создания кластера), поэтому
Terraform падал с «Invalid index ... does not identify an element in this collection value».

Теперь через try(... = ""): на первом apply в env идёт пустая строка и прогон не роняет;
на втором apply пароль уже в Vault, try возвращает настоящее значение, приложения получают верный env.

Комментарии в lucee.tf/flask.tf/nodejs.tf объясняют зачем try и почему два apply.
Проверено: terraform validate — Success; plan — No changes; Exit 0.
2026-10-01 14:23:11 +03:00
Repinoid e3182c3f98 stand(TEST/CRUD): postgres_conf — ключи camelCase и значение ''
Провайдер отправляет postgres_conf на платформу как есть (resources_core.FormatString
возвращает строку без перевода имён), поэтому ключи обязаны совпадать со спекой:
postgresConf.paramName / postgresConf.paramValue. С snake_case (param_name/param_value)
платформа падала с "Invalid JSON String" (операция 5AAF1E39-8812-4994-AD14-78D51ED2077D).

Значение paramValue взято '' — как в HAR/pgmodify.har и в TEST_STAND/PG/resources.tf.
План проходит: 6 to add, exit 0.
2026-10-01 12:28:52 +03:00
Repinoid 7f0931d035 stand: снять sensitive с realm и s3_uid — это не секреты
Из-за sensitive = true в plan вместо значений печаталось "(sensitive value)".
Убрано в: DEV_STAND/CRUD, DEV_STAND/POSTGRES, TEST_STAND/POSTGRES, TEST_STAND/PGwNewRegistry.
api_token остаётся sensitive везде — он действительно секрет.
2026-10-01 12:22:32 +03:00
Repinoid 4b31eca807 stand(TEST/CRUD): var.realm больше не sensitive
realm — не секрет, но из-за sensitive = true в plan вместо имени печаталось
"(sensitive value)". Теперь видно resource_realm = "k8s-3-sandbox-nubes-ru".
Плана это не меняло: plan по-прежнему 6 to add, exit 0.

Прочие sensitive оставлены как есть: api_token (секрет), vault_secrets (платформа).
2026-10-01 12:20:23 +03:00
Repinoid 5faf33c43d chore(test-stand): закомментировать vm.tf — vApp (26) и ВМ (28) исключены из стенда
vm.tf целиком обёрнут в блочный комментарий /* … */ со пояснением причины:
в test инстанс vApp не прошёл валидацию схемы (нужен reconcile). Вернуть —
удалить обрамляющие строки.

Проверено: terraform fmt -check OK, validate Success,
plan = 1 to add (только Штурвал); инстансов vApp/ВМ стенда в тенанте нет (все deleted).
2026-10-01 09:52:13 +03:00
Repinoid 4c3039146f fix(test-stand): поднять квоту внешних IP 10 -> 12 + документация провалов apply
Первый apply в test: vdc/edge/org_ip/snat создались; упали:
- Штурвал: 'свободных Ip в тенанте WZ03709-iaas: 1, необходимо 2' — на NaeelOrg
  было count=10, часть адресов держит кластер iot-naeel. Поднято до 12.
- vApp: 'не удалось валидировать схему инстанса' -> not created (вероятно плавающая,
  при повторе — reconcile).

После destroy (владелец): fullpipe-vdc = suspended (suspend_on_destroy),
fullpipe-edge = running (keep_on_destroy), локальный state пуст.

Порядок: apply -target=nubes_vc_org_ip_allocation.org_ip -> полный apply.
HISTORY/2026-10-01_test_stand_fpipegmail.md дополнен разделом с ошибками и решением.
2026-10-01 08:45:50 +03:00
Repinoid f7d6eb4688 feat(test-stand): TEST_STAND/FPipeGmail — копия dev-примера под test-стенд
Создана папка (без .terraform/state/lock — это состояние dev). Изменены параметры:
- versions.tf: nubes-dev/nubes 2.0.1 -> nubes-test/nubes 3.0.0;
- variables.tf: api_endpoint -> lk-api-gateway-test.ngcloud.ru;
- terraform.tfvars: organization=NaeelOrg (найдена через API, svc 19), ip_count=10
  (в test на орге уже выделено 10 IP), storage SSD (в test vDC строят на SSD);
- shturval.tf: shturval-test1 / shturval-test-01 / workers-shturval-test.

Коллизии проверены: в test заняты naeel-vdc, 'VDC для кластера iot-naeel',
naeel_vc_nsxt, 'Edge для кластера IOT naeel', 'Кластер Kubernetes [iot-naeel]' —
наши имена (fullpipe-vdc/-edge/-vapp-02, web02, shturval-test1) свободны.

Проверено: terraform init (3.0.0), fmt -check OK, validate Success,
plan = 7 to add / 0 change / 0 destroy. apply НЕ запускался.

Документация: HISTORY/2026-10-01_test_stand_fpipegmail.md
2026-10-01 08:21:08 +03:00
Repinoid 4197a76aba 1 2026-09-30 21:01:05 +03:00
Repinoid 106ddbe092 stand: switch every stand to actual provider versions (prod=1.0.0, dev=2.0.0, test=3.0.0)
Легаси-версии (5.0.x/5.1.x/3.1.x/2.1.x) в реестре отсутствуют (404), стенды не могли
пройти terraform init. Приведены к новой схеме нумерации от 2026-09-03.

- DEV  (nubes-dev):  CRUD, POSTGRES, SHTURVAL_MGMT -> 2.0.0
- TEST (nubes-test): CRUD, PG, POSTGRES, MARIA_DB, buck0, kuber, IOT_RMQ_DEMO -> 3.0.0
                     (DEV_STAND/IOT_KAFKA_DEMO тоже nubes-test -> 3.0.0)
- PROD (nubes):      PG1, POSTGRES, RABBIT -> 1.0.0
- README стендов TEST_STAND/buck0, TEST_STAND/PG: версии приведены к 3.0.0
- getting-started: убрана versioned-ссылка на доки (2.1.7) -> актуальный домен без версии
- .gitignore: откатано правило TMP/ (на remote TMP/init-test-*/main.tf трекаются)
2026-09-16 16:34:40 +03:00
Repinoid dbaeea5c89 stand(PGwNewRegistry): pin provider to 3.0.0 (new TEST scheme) 2026-09-16 16:33:27 +03:00
“Naeel” 05694a3446 stand(CRUD): refactor resource names, drop git_revision, add adopt_existing, provider 5.0.5 2026-08-13 12:49:46 +04:00
“Naeel” 657157527b fix: curated PG example — use S3 name not UUID, comment every parameter 2026-08-10 21:42:41 +04:00
“Naeel” 2af2d2af16 chore: registry.kube5s.ru → tf-registry.containerk8s.services.ngcloud.ru
- All code/script/.tf defaults replaced
- Docs annotated with ⛔ LEGACY
2026-08-10 11:17:57 +04:00
“Naeel” 5f81e4a664 fix: ToSnake acronym bug, migrate compare script to Gateway, YAML regen all stands
- ToSnake: fix acronym splitting (CPU, TTL, CA, API, VIP, AVI)
- compare_yaml_vs_api.py: deck-api → lk-api-gateway
- YAML regenerated from API for all 3 stands
- Go resources regenerated
- Providers rebuilt 3.0.6/5.0.5/2.0.6
2026-08-10 09:25:53 +04:00
“Naeel” f6494d038e chore: inline nav removed, bump versions 3.0.5/5.0.4/2.0.5, rebuild 2026-08-09 22:06:38 +04:00
“Naeel” ac2ce0ea53 chore: bump versions 3.0.4/5.0.3/2.0.3 + rebuild 2026-08-09 20:08:12 +04:00
“Naeel” fda819cd81 feat: stages output + services_list sync
- stages always visible (remove log_level gating)
- fix tty resource leak (move out of poll loop)
- show current stage [..] in addition to completed [OK]/[FAIL]
- sync services_list.txt for all 3 stands with live UI
- add YAML vs API comparison script
- bump TEST version 5.0.1 -> 5.0.2
2026-08-09 18:18:35 +04:00
“Naeel” 5cec3ed55b Фикс MONGO_URI, новые имена consumer/dashboard, HISTORY-доки, схема 2026-07-22 11:15:40 +04:00
“Naeel” 5f502bcf3d feat: adopt_existing_on_create=true на всех ресурсах — destroy+apply без новых имён 2026-07-22 09:31:50 +04:00
“Naeel” 8b888666d7 rename: IOT_KAFKA_DEMO -> IOT_RMQ_DEMO (Kafka gone, RabbitMQ is the queue) 2026-07-22 09:28:06 +04:00
“Naeel” 25011eb783 docs: комментарий на КАЖДУЮ строку infra.tf 2026-07-22 09:27:26 +04:00
“Naeel” 3dac50b78a docs: все TF файлы с детальными комментариями на каждую строку 2026-07-22 09:26:20 +04:00
“Naeel” a37fc22bcd feat: IoT demo — RabbitMQ + Redis + MongoDB + Node.js producer plan (test stand cleanup) 2026-07-21 21:58:00 +04:00
“Naeel” 55d4109eee 11 2026-07-21 18:17:03 +04:00
“Naeel” 336e6e3795 feat: IoT Kafka demo — Terraform + history (test stand fail, moving to dev) 2026-07-21 17:33:03 +04:00
“Naeel” f0e01dad6e docs: point to tf_examples repo, add tf_examples to .gitignore 2026-07-21 09:06:13 +04:00
“Naeel” 5d338bbd02 fix: remove non-existent Download button mention 2026-07-21 09:03:28 +04:00
“Naeel” b093bff148 fix: download whole repo archive, no folder-level Download in Gitea 2026-07-21 09:03:02 +04:00
“Naeel” 3d831b16a0 docs: how to download just the CRUD folder (sparse checkout) 2026-07-21 08:59:50 +04:00
“Naeel” 1d1258a83b docs: fill + rename terraform.tfvars.example, not copy 2026-07-21 08:57:08 +04:00
“Naeel” 9ee16ce371 fix: s3_name — S3 instance name, not user 2026-07-21 08:54:54 +04:00
“Naeel” 5ec3c8aceb fix: add PGSSLMODE to nodejs.tf (TEST + DEV), bump flask_git_revision 2026-07-21 08:41:59 +04:00
“Naeel” 89163e9609 bump nodejs_git_revision to 809d30b (fix startup + SSL) 2026-07-21 08:31:44 +04:00
“Naeel” eb36731d3e docs: explain why two applies — PG user not ready for apps 2026-07-21 08:23:39 +04:00
“Naeel” ecace0311b docs: TEST_STAND README + clean terraform.tfvars.example 2026-07-21 08:18:48 +04:00
“Naeel” a4a3f8e63c fix: domain comments — correct .dev.nubes.ru suffix, add uniqueness note 2026-07-21 08:06:45 +04:00
“Naeel” 4ea4cc82b0 docs: TEST_STAND locals.tf — comments on every line 2026-07-21 08:03:29 +04:00
“Naeel” 664ab51b0d fix: update lucee_git_revision (8268568) + flask_git_revision (54746e9) — no DROP, init_db at module level 2026-07-21 07:32:42 +04:00
“Naeel” f56c0c0cf4 add Node.js CRUD (tfnodejscrud) + nodejs.tf in TEST_STAND 2026-07-20 13:50:13 +04:00
“Naeel” 3a24690c3f docs: add comments to terraform.tfvars.example (s3_name/S3 UUID interchangeability) 2026-07-20 12:17:24 +04:00
“Naeel” b05969aad0 bump flask_git_revision to 34c030c (site/ structure) 2026-07-20 12:12:44 +04:00
“Naeel” 4c5a61cbbf refactor: LUCEE/ → CRUD/, npg_lucee → main_pg, add flask.tf 2026-07-20 11:05:39 +04:00
“Naeel” 757aa2de98 fix: modify only if hasServiceParamChanges (skip when git_revision only), bump TEST 5.1.16 2026-07-20 10:30:19 +04:00