docs: progress.md — harbor integration + UX fixes (v0.1.24–v0.1.28)
This commit is contained in:
@@ -230,3 +230,96 @@
|
|||||||
| 6 | `replicas` field в FunctionSpec | Низкий (v1.1) |
|
| 6 | `replicas` field в FunctionSpec | Низкий (v1.1) |
|
||||||
| 7 | RabbitMQ event triggers | Низкий (v2) |
|
| 7 | RabbitMQ event triggers | Низкий (v2) |
|
||||||
| 8 | Метрики → Victoria Metrics | Низкий |
|
| 8 | Метрики → Victoria Metrics | Низкий |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-03-11 — Harbor integration + Go 1.23 runtime (v0.1.24–v0.1.26)
|
||||||
|
|
||||||
|
### Что сделано
|
||||||
|
|
||||||
|
| # | Компонент | Изменение |
|
||||||
|
|---|-----------|-----------|
|
||||||
|
| 1 | `internal/harbor/` | Harbor-клиент: `EnsureProject` создаёт проект перед push образа |
|
||||||
|
| 2 | `internal/builder/builder.go` | Поддержка `HarborClient`, push в `pearlharbor.registryk8s.services.ngcloud.ru` |
|
||||||
|
| 3 | `runtimes/go1.23/` | Новый Go 1.23 runtime: `server.go` + `runner.go` + Dockerfile |
|
||||||
|
| 4 | `internal/builder/context.go` | Go 1.23 в switch; `COPY . /app/handler/` вместо `COPY handler/` |
|
||||||
|
| 5 | `api/v1alpha1/function_types.go` | `go1.23` в enum поддерживаемых рантаймов |
|
||||||
|
| 6 | `terraform/provider/` | v0.1.14: `go1.23` в `stringvalidator.OneOf` |
|
||||||
|
| 7 | `deployments/k8s/operator.yaml` | v0.1.26 |
|
||||||
|
| 8 | `examples/hello-go/` | Новый пример: HTTP + job на Go 1.23 |
|
||||||
|
| 9 | `examples/hello-go/code/greeting.go` | Переименован из handler.go, функция `buildGreeting(guestName)` |
|
||||||
|
| 10 | `examples/pg-list-python/` | Новый пример: Python + PostgreSQL, только HTTP, без job |
|
||||||
|
|
||||||
|
### Docker Hub auth на 192.168.1.220
|
||||||
|
- Токен: `dckr_pat_aElN35tdXMBrtOAPraV5Fi0o58s` (сохранён в `secrets/dockerhub.env`, chmod 600)
|
||||||
|
- `docker login -u naeel --password-stdin` выполнен на remote machine
|
||||||
|
|
||||||
|
### Исправленные баги
|
||||||
|
- kaniko `COPY handler/ /app/handler/` — файлы в tar-контексте без prefix → исправлено на `COPY .`
|
||||||
|
- `Decimal` из psycopg2 не сериализуется → `float(row[2])` в `catalog.py`
|
||||||
|
- Formatter добавил дублирующий `package code` в `greeting.go` — удалён вручную
|
||||||
|
- CRD в кластере имел только `go1.21` в enum → `kubectl apply` обновлён CRD
|
||||||
|
- Provider v0.1.13 имел только `go1.21` → пересобран v0.1.14
|
||||||
|
|
||||||
|
### Git HEAD
|
||||||
|
```
|
||||||
|
d6a2e22 fix: восстановлен requirements.txt после теста
|
||||||
|
5c6a373 docs: переработан examples/README.md + комментарии function.tf
|
||||||
|
2ca3137 feat: пример pg-list-python
|
||||||
|
c4559dd fix: go1.23 build context
|
||||||
|
78d11ae refactor: rename handler.go→greeting.go
|
||||||
|
a709b38 feat: go1.23 runtime support
|
||||||
|
babd8e6 feat: harbor integration
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-03-11 — UX улучшения: build logs + JSON для всех HTTP методов (v0.1.27–v0.1.28)
|
||||||
|
|
||||||
|
### Проблемы до исправления
|
||||||
|
|
||||||
|
| Проблема | Симптом |
|
||||||
|
|---|---|
|
||||||
|
| Ошибка сборки без деталей | `terraform apply` показывал только `function build failed: build job failed` без причины |
|
||||||
|
| HTML 501 при DELETE/HEAD/PUT | Python runtime `http.server` не обрабатывал эти методы → HTML-ответ вместо JSON |
|
||||||
|
|
||||||
|
### Что изменили
|
||||||
|
|
||||||
|
#### `controllers/function_controller.go`
|
||||||
|
- `FunctionReconciler` получил поле `KubeClient kubernetes.Interface`
|
||||||
|
- Добавлен `getBuildPodLogs(ctx, kube, namespace, jobName)` — читает логи kaniko-пода (последние 50 строк)
|
||||||
|
- При сбое сборки (`case "failed"`) вызывает `getBuildPodLogs` и включает вывод в `Function.Status.Message`
|
||||||
|
- Провайдер пробрасывает `Message` в ошибку `terraform apply` — разработчик видит точную причину
|
||||||
|
|
||||||
|
#### `runtimes/python3.11/server.py`
|
||||||
|
- Выделен `_handle_with_body()` — общий обработчик для методов с телом
|
||||||
|
- `do_PUT`, `do_DELETE`, `do_PATCH` = `_handle_with_body` — вызывают функцию пользователя
|
||||||
|
- `do_HEAD` — отдаёт заголовки без тела (HTTP-стандарт; тело вычисляется но не отправляется)
|
||||||
|
- `send_error()` переопределён → JSON `{"error": "...", "code": N}` вместо HTML 501
|
||||||
|
- Runtime пересобран: `naeel/sless-runtime-python3.11:v0.1.2`
|
||||||
|
|
||||||
|
#### `main.go`
|
||||||
|
- `KubeClient: kubernetes.NewForConfigOrDie(mgr.GetConfig())` передаётся в `FunctionReconciler`
|
||||||
|
|
||||||
|
#### `internal/builder/context.go`
|
||||||
|
- python3.11 runtime: `v0.1.1` → `v0.1.2`
|
||||||
|
|
||||||
|
### Версии после исправления
|
||||||
|
- Оператор: `naeel/sless-operator:v0.1.28`
|
||||||
|
- Python runtime: `naeel/sless-runtime-python3.11:v0.1.2`
|
||||||
|
- Provider: `terra.k8c.ru/naeel/sless v0.1.14` (без изменений)
|
||||||
|
|
||||||
|
### Результат тестирования
|
||||||
|
|
||||||
|
| Тест | До | После |
|
||||||
|
|---|---|---|
|
||||||
|
| `DELETE /fn/...` | HTML 501 | ✅ JSON 200, функция вызывается |
|
||||||
|
| `HEAD /fn/...` | HTML 501 | ✅ HTTP 200, Content-Type: application/json |
|
||||||
|
| `PUT /fn/...` | HTML 501 | ✅ JSON 200, функция вызывается |
|
||||||
|
| Невалидный `requirements.txt` | `build job failed` | ✅ Полный вывод pip включая строку с ошибкой |
|
||||||
|
|
||||||
|
### Git коммиты
|
||||||
|
```
|
||||||
|
6de90ac chore: python runtime v0.1.2 + operator v0.1.28
|
||||||
|
3372cb1 fix: build logs in status + JSON for all HTTP methods in python runtime
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user