docs: document session 2 — API testing, DELETE 404 fix, funcs-console, source for services
This commit is contained in:
@@ -4,6 +4,97 @@
|
||||
|
||||
---
|
||||
|
||||
## 2026-03-21 — Баг: DELETE несуществующего ресурса → HTTP 204 вместо 404
|
||||
|
||||
### Симптом
|
||||
```
|
||||
DELETE /v1/namespaces/sless-xxx/functions/not-exists
|
||||
→ HTTP 204 (пустой ответ, как будто удаление прошло успешно)
|
||||
```
|
||||
Аналогично для services, triggers, jobs.
|
||||
|
||||
### Причина
|
||||
Все четыре `Delete*` хендлера при `errors.IsNotFound(err)` выполняли `w.WriteHeader(http.StatusNoContent)` вместо возврата 404.
|
||||
|
||||
```go
|
||||
// БЫЛО (ошибочно):
|
||||
if errors.IsNotFound(err) {
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
return
|
||||
}
|
||||
|
||||
// СТАЛО (правильно):
|
||||
if errors.IsNotFound(err) {
|
||||
writeJSON(w, http.StatusNotFound, errResp("function not found"))
|
||||
return
|
||||
}
|
||||
```
|
||||
|
||||
### Затронутые файлы
|
||||
- `internal/api/handler/functions.go` — `DeleteFunction`
|
||||
- `internal/api/handler/services.go` — `DeleteService`
|
||||
- `internal/api/handler/triggers.go` — `DeleteTrigger`
|
||||
- `internal/api/handler/jobs.go` — `DeleteJob`
|
||||
|
||||
### Фикс
|
||||
Коммит `e8d0d78`, оператор `v0.1.44`.
|
||||
|
||||
---
|
||||
|
||||
## 2026-03-21 — Баг: funcs-service pod в ImagePullBackOff после обновления образа
|
||||
|
||||
### Симптом
|
||||
После `kubectl set image deployment/sless-funcs-service funcs=pearlharbor…/sless-funcs-service:v0.2.1`:
|
||||
```
|
||||
Events:
|
||||
Warning Failed kubelet Failed to pull image "...v0.2.1":
|
||||
authorization failed: no basic auth credentials
|
||||
```
|
||||
Новый под застрял в `ImagePullBackOff`. Старый под продолжал работать с v0.2.0 (без services).
|
||||
|
||||
### Причина
|
||||
`deployments/k8s/funcs-service.yaml` не содержал `imagePullSecrets`, а образ находится в приватном реестре Harbor (`pearlharbor.registryk8s.services.ngcloud.ru`).
|
||||
Старый под (v0.2.0) работал с другой нодой, где уже был cached образ с credentials.
|
||||
|
||||
### Фикс
|
||||
```yaml
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: sless-registry-auth
|
||||
containers:
|
||||
- name: funcs
|
||||
image: pearlharbor.registryk8s.services.ngcloud.ru/naeel/sless-funcs-service:v0.2.2
|
||||
```
|
||||
Коммит `09b3588`. Правило: все образы из pearlharbor требуют `imagePullSecrets: sless-registry-auth`.
|
||||
|
||||
---
|
||||
|
||||
## 2026-03-21 — Баг: /funcs/{ns}/source/{fn} → 404 для sless_service ресурсов
|
||||
|
||||
### Симптом
|
||||
Клик на карточку `pg-info` (sless_service) в web-консоли → ошибка 404 при загрузке кода.
|
||||
```
|
||||
GET /funcs/sless-ffd1f598c169b0ae/source/pg-info → HTTP 404
|
||||
{"error":"function not found"}
|
||||
```
|
||||
|
||||
### Причина
|
||||
`proxySourceGet` в funcs-service всегда обращался к оператору по пути:
|
||||
```
|
||||
/v1/namespaces/{ns}/functions/{fn}/source
|
||||
```
|
||||
`pg-info` — это `sless_service` (Kind=Service), а не `sless_function`. У оператора не было эндпоинта `/services/{name}/source`.
|
||||
|
||||
### Фикс
|
||||
1. **Оператор** (`internal/api/handler/source.go`): добавлен `GetServiceSource` — делает то же что `GetSource`, но читает `Service` CRD вместо `Function`.
|
||||
2. **Оператор** (`internal/api/router.go`): зарегистрирован маршрут `GET /v1/namespaces/{ns}/services/{name}/source`.
|
||||
3. **funcs-service** (`services/funcs/main.go`): `proxySourceGet` принимает параметр `kind`; при `kind=service` обращается к `/services/…/source`.
|
||||
4. **funcs-service** (`services/funcs/index.html`): `loadSource(body, ns, fnName, fnKind)` добавляет `?kind=service` в fetch URL для сервисов.
|
||||
|
||||
Коммит `50f2456`, оператор `v0.1.45`, funcs-service `v0.2.2`.
|
||||
|
||||
---
|
||||
|
||||
## 2026-03-20 — Баг: неверный hostname в api_endpoint провайдера nubes
|
||||
|
||||
### Симптом
|
||||
|
||||
Reference in New Issue
Block a user