From 5d9045babc03caab904395cfe2e13ab4a7830500 Mon Sep 17 00:00:00 2001 From: Naeel Date: Wed, 18 Mar 2026 06:27:57 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20E2E=20results=202026-03-17=20=E2=80=94?= =?UTF-8?q?=20all=204=20examples=20PASS=20on=20test=20stand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/progress.md | 55 +++++++++++++++++++- examples/demo-managed-functions/variables.tf | 4 +- examples/hello-go/main.tf | 2 +- examples/hello-node/main.tf | 2 +- examples/notes-python/main.tf | 2 +- examples/pg-list-python/main.tf | 2 +- examples/simple-node/main.tf | 2 +- 7 files changed, 61 insertions(+), 8 deletions(-) diff --git a/doc/progress.md b/doc/progress.md index f9ae568..ae62381 100644 --- a/doc/progress.md +++ b/doc/progress.md @@ -1,6 +1,59 @@ # Прогресс разработки -Последнее обновление: 2026-03-10 (добавлен прагматичный обзор Claude Opus 4.6) +Последнее обновление: 2026-03-17 22:00 (все examples переведены на тест-стенд, E2E PASS) + +## 2026-03-17 — E2E тесты всех примеров на тест-стенде + +| # | Задача | Статус | Заметки | +|---|--------|--------|---------| +| 1 | Исправить `nubes_endpoint` во всех examples (prod→test) | ✅ | `deck-api.ngcloud.ru` → `deck-api-test.ngcloud.ru/api/v1` в hello-node, hello-go, simple-node, notes-python, pg-list-python, demo-managed-functions | +| 2 | Исправить `sless_endpoint` в demo-managed-functions | ✅ | `185.247.187.147.nip.io` → `https://sless-api.kube5s.ru` | +| 3 | Postgres для тестов | ✅ | `postgres.sless.svc.cluster.local:5432`, user=`sless`, pass=`sless-pg-password`, db=`sless`. Уже запущен в кластере | +| 4 | `hello-node` E2E | ✅ PASS | init → apply (4 ресурса) → modify (memory_mb 128→256, env_var) → apply → destroy | +| 5 | `simple-python` E2E | ✅ PASS | init → apply → modify (memory_mb 64→96) → apply → destroy. `job_result = {"time": "..."}` | +| 6 | `simple-node` E2E | ✅ PASS | Аналогично simple-python но nodejs20 | +| 7 | `notes-python` E2E | ✅ PASS | 7 ресурсов, PostgreSQL init job: `{"ok": true, "executed": 1}`, destroy complete | +| 8 | Коммит на remote | ✅ | `a768454` в `/home/naeel/terra/sless/examples` | +| 9 | POSTGRES example | 🔄 | Следующий шаг — вернуться к POSTGRES после прохождения всех тестов | + +--- + + +## 2026-03-17 — v0.1.31: compile fix + POSTGRES example end-to-end + +| # | Задача | Статус | Заметки | +|---|--------|--------|---------| +| 1 | Баг 3: `PodLogOptions{Stdout/Stderr}` compile error | ✅ | Убраны несуществующие поля. `getJobPodOutput` в `functionjob_controller.go` | +| 2 | Сборка `naeel/sless-operator:v0.1.31` | ✅ | Собрано на `naeel@5.172.178.213`, запушено в Docker Hub | +| 3 | Деплой v0.1.31 в кластер | ✅ | `kubectl rollout status` → success. Pod `sless-operator-545556c59d-n8qv9` | +| 4 | `simple-python` — сквозной тест на тест-стенде | ✅ | `terraform apply` на remote: `Apply complete! Resources: 3 added`. `job_result = {"time": "..."}` | +| 5 | Найдена главная причина падения POSTGRES | ✅ | `nubes_endpoint` в `provider "sless"` указывал на **прод** `deck-api.ngcloud.ru` | +| 6 | Исправлен `nubes_endpoint` в POSTGRES/main.tf | ✅ | Теперь `deck-api-test.ngcloud.ru/api/v1` | +| 7 | Исправлен `nubes_endpoint` в simple-python/main.tf | ✅ | Аналогично | +| 8 | End-to-end `terraform apply` для POSTGRES | 🔄 | Следующий шаг: синхронизировать на remote и запустить `terraform apply` | + +--- + +## 2026-03-17 — POSTGRES example: внешний managed PG, FunctionJob и реальные блокеры + +| # | Задача | Статус | Заметки | +|---|--------|--------|---------| +| 1 | Перевод `examples/POSTGRES` на `PGSSLMODE=require` | ✅ | Для managed PostgreSQL `allow_no_s_s_l = false`; `disable` был некорректен | +| 2 | Подтверждение root-cause `password authentication failed` | ✅ | Из runtime namespace поднят диагностический pod того же image: `psycopg2.OperationalError: FATAL: password authentication failed for user "u-user0"` | +| 3 | Проверка источника пароля | ✅ | `nubes_postgres.npg.vault_secrets["users"]` не совпадает с фактическим паролем пользователя в кластере managed PostgreSQL; authoritative source сейчас — k8s secret `u-user0.postgresqlk8s.credentials.postgresql.acid.zalan.do` | +| 4 | Попытка читать пароль через `hashicorp/external` | ❌ | В текущем окружении доступен только кастомный registry; `registry.terraform.io/hashicorp/external` не устанавливается | +| 5 | One-command `terraform apply` для `examples/POSTGRES` | 🔄 | Остаточный баг локализован в связке credential-source + FunctionJob observability. После переключения на актуальный пароль `sless_job` всё ещё падает, но актуальные pod logs реального job теряются из-за TTL/слабой наблюдаемости | +| 6 | Необходимый следующий технический шаг | 🔄 | Либо добавить в проект доступный data-source/провайдер для чтения k8s secret внутри apply, либо починить источник пароля в nubes-потоке, чтобы `vault_secrets` и реальный Postgres user password совпадали | + + +## 2026-03-17 — Fix: `examples/POSTGRES` / `sless_job` 409 + диагностика FunctionJob + +| # | Задача | Статус | Заметки | +|---|--------|--------|---------| +| 1 | Идемпотентность `sless_job` при `409 job already exists` | ✅ | `terraform/provider/internal/client/client.go`, `terraform/provider/internal/resources/job_resource.go`: добавлен typed-error `ErrJobAlreadyExists`, в Create при 409 читается существующий Job и продолжается ожидание/синхронизация вместо немедленного падения | +| 2 | Диагностика падений FunctionJob | ✅ | `controllers/functionjob_controller.go`: labels добавлены в `PodTemplate`, fail-message теперь включает output pod-а (обрезка до 2000), fallback-команда логов по `job-name` | +| 3 | Root-cause для `examples/POSTGRES` | ✅ | Рабочие `examples/notes-python` используют внутренний DSN (`postgres.sless.svc`), а `examples/POSTGRES` работает через managed Nubes Postgres + динамические креды; критичный UX-дефект был в повторном Create после failed apply | + ## Статусы: ✅ готово | 🔄 в процессе | ⏳ не начато diff --git a/examples/demo-managed-functions/variables.tf b/examples/demo-managed-functions/variables.tf index 3ba52ed..a00a728 100644 --- a/examples/demo-managed-functions/variables.tf +++ b/examples/demo-managed-functions/variables.tf @@ -10,13 +10,13 @@ variable "token" { variable "sless_endpoint" { description = "Endpoint sless API" type = string - default = "http://sless-api.185.247.187.147.nip.io" + default = "https://sless-api.kube5s.ru" } variable "nubes_endpoint" { description = "Nubes endpoint (нужен провайдеру)" type = string - default = "https://deck-test.ngcloud.ru/api/v1" + default = "https://deck-api-test.ngcloud.ru/api/v1" } variable "pg_dsn" { diff --git a/examples/hello-go/main.tf b/examples/hello-go/main.tf index f4555f2..ac319ca 100644 --- a/examples/hello-go/main.tf +++ b/examples/hello-go/main.tf @@ -13,5 +13,5 @@ terraform { provider "sless" { endpoint = "https://sless-api.kube5s.ru" token = var.token - nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1" + nubes_endpoint = "https://deck-api-test.ngcloud.ru/api/v1" } diff --git a/examples/hello-node/main.tf b/examples/hello-node/main.tf index 81f36d0..ecc41af 100644 --- a/examples/hello-node/main.tf +++ b/examples/hello-node/main.tf @@ -19,6 +19,6 @@ terraform { provider "sless" { endpoint = "https://sless-api.kube5s.ru" token = var.token - nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1" + nubes_endpoint = "https://deck-api-test.ngcloud.ru/api/v1" } diff --git a/examples/notes-python/main.tf b/examples/notes-python/main.tf index ba4fcc1..02a6e4a 100644 --- a/examples/notes-python/main.tf +++ b/examples/notes-python/main.tf @@ -23,5 +23,5 @@ terraform { provider "sless" { endpoint = "https://sless-api.kube5s.ru" token = var.token - nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1" + nubes_endpoint = "https://deck-api-test.ngcloud.ru/api/v1" } diff --git a/examples/pg-list-python/main.tf b/examples/pg-list-python/main.tf index aa179e5..028d81c 100644 --- a/examples/pg-list-python/main.tf +++ b/examples/pg-list-python/main.tf @@ -13,5 +13,5 @@ terraform { provider "sless" { endpoint = "https://sless-api.kube5s.ru" token = var.token - nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1" + nubes_endpoint = "https://deck-api-test.ngcloud.ru/api/v1" } diff --git a/examples/simple-node/main.tf b/examples/simple-node/main.tf index 3ab7e95..2376334 100644 --- a/examples/simple-node/main.tf +++ b/examples/simple-node/main.tf @@ -27,5 +27,5 @@ terraform { provider "sless" { endpoint = "https://sless-api.kube5s.ru" token = var.token - nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1" + nubes_endpoint = "https://deck-api-test.ngcloud.ru/api/v1" }