Operator (v0.1.4):
- internal/api/handler/jobs.go: CreateJob/GetJob/DeleteJob handlers
- internal/api/router.go: POST/GET/DELETE /v1/namespaces/{ns}/jobs/{name}
Terraform provider (v0.1.2):
- client.go: JobRequest/JobResponse + CreateJob/GetJob/DeleteJob/WaitJobDone
- resources/job_resource.go: sless_job resource (Create blocks until Succeeded/Failed)
- provider.go: register NewJobResource
Deploy:
- operator:v0.1.4 deployed and running in cluster
- provider v0.1.2 published to terra.k8c.ru
57 lines
2.8 KiB
Go
57 lines
2.8 KiB
Go
// Изменено: 2026-03-07
|
|
// router.go — регистрация всех REST-маршрутов через gorilla/mux.
|
|
// Все маршруты защищены Bearer-токеном (middleware.Auth).
|
|
// Маршруты сгруппированы по /v1/namespaces/{namespace}/...
|
|
|
|
package api
|
|
|
|
import (
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
|
|
"gitea-naeel.giteak8s.services.ngcloud.ru/naeel/sless/internal/api/handler"
|
|
"gitea-naeel.giteak8s.services.ngcloud.ru/naeel/sless/internal/api/middleware"
|
|
)
|
|
|
|
// NewRouter собирает gorilla/mux роутер со всеми маршрутами.
|
|
// apiToken — статический Bearer-токен для v1 аутентификации.
|
|
func NewRouter(h *handler.Handler, apiToken string, log *slog.Logger) http.Handler {
|
|
r := mux.NewRouter()
|
|
|
|
// Суброутер для /v1 — все маршруты API
|
|
v1 := r.PathPrefix("/v1").Subrouter()
|
|
|
|
// Functions CRUD
|
|
v1.HandleFunc("/namespaces/{namespace}/functions", h.ListFunctions).Methods(http.MethodGet)
|
|
v1.HandleFunc("/namespaces/{namespace}/functions", h.CreateFunction).Methods(http.MethodPost)
|
|
v1.HandleFunc("/namespaces/{namespace}/functions/{name}", h.GetFunction).Methods(http.MethodGet)
|
|
v1.HandleFunc("/namespaces/{namespace}/functions/{name}", h.UpdateFunction).Methods(http.MethodPut)
|
|
v1.HandleFunc("/namespaces/{namespace}/functions/{name}", h.DeleteFunction).Methods(http.MethodDelete)
|
|
|
|
// Invocation logs
|
|
v1.HandleFunc("/namespaces/{namespace}/functions/{name}/invocations", h.ListInvocations).Methods(http.MethodGet)
|
|
|
|
// Upload code — принимает zip, генерирует Dockerfile, кладёт tar.gz в S3, запускает сборку
|
|
v1.HandleFunc("/namespaces/{namespace}/functions/{name}/upload", h.UploadCode).Methods(http.MethodPost)
|
|
|
|
// Triggers CRUD
|
|
v1.HandleFunc("/namespaces/{namespace}/triggers", h.ListTriggers).Methods(http.MethodGet)
|
|
v1.HandleFunc("/namespaces/{namespace}/triggers", h.CreateTrigger).Methods(http.MethodPost)
|
|
v1.HandleFunc("/namespaces/{namespace}/triggers/{name}", h.GetTrigger).Methods(http.MethodGet)
|
|
v1.HandleFunc("/namespaces/{namespace}/triggers/{name}", h.DeleteTrigger).Methods(http.MethodDelete)
|
|
|
|
// Jobs CRUD — одноразовые запуски функций
|
|
v1.HandleFunc("/namespaces/{namespace}/jobs", h.CreateJob).Methods(http.MethodPost)
|
|
v1.HandleFunc("/namespaces/{namespace}/jobs/{name}", h.GetJob).Methods(http.MethodGet)
|
|
v1.HandleFunc("/namespaces/{namespace}/jobs/{name}", h.DeleteJob).Methods(http.MethodDelete)
|
|
|
|
// Цепочка middleware: logging → auth → router
|
|
// Порядок важен: сначала логируем (чтобы видеть все запросы включая отклонённые),
|
|
// затем проверяем авторизацию.
|
|
return middleware.Logging(log,
|
|
middleware.Auth(apiToken, log, r),
|
|
)
|
|
}
|