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) |
|
||||
| 7 | RabbitMQ event triggers | Низкий (v2) |
|
||||
| 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