# Структура проекта Последнее обновление: 2026-03-18 (v0.1.34) ## Репозиторий `gitea-naeel.giteak8s.services.ngcloud.ru/naeel/sless` ## Директории (актуальное состояние) ``` sless/ ├── main.go # точка входа оператора (controller-runtime + HTTP сервер) ├── Dockerfile # multi-stage сборка оператора ├── go.mod # module: gitea-naeel.giteak8s.services.ngcloud.ru/naeel/sless ├── Makefile ├── api/ │ └── v1alpha1/ # CRD типы для controller-gen │ ├── function_types.go # Function CRD: spec, status │ ├── job_types.go # FunctionJob CRD │ ├── trigger_types.go # Trigger CRD │ └── zz_generated.deepcopy.go # автогенерация DeepCopy ├── controllers/ │ ├── function_controller.go # Function → kaniko Job → Deployment/Service │ ├── functionjob_controller.go # FunctionJob → k8s Job → stdout/stderr → status │ └── trigger_controller.go # Trigger → Deployment scale / CronJob ├── internal/ │ ├── api/ │ │ ├── router.go # gorilla/mux: регистрация всех маршрутов │ │ ├── middleware/ │ │ │ ├── auth.go # JWT Bearer → namespace (SHA256) │ │ │ └── logging.go # access log │ │ └── handler/ │ │ ├── handler.go # Handler struct (K8s, S3, PG, Log) │ │ ├── functions.go # GET/POST/PUT/DELETE функций │ │ ├── triggers.go # GET/POST/PATCH/DELETE триггеров │ │ ├── upload.go # POST /upload: zip → tar.gz → S3 → CRD patch │ │ ├── source.go # GET /source: S3 tar.gz → JSON файлы (НОВЫЙ v0.1.34) │ │ ├── jobs.go # GET/POST/DELETE FunctionJob │ │ ├── invocations.go # GET /invocations: логи из Postgres │ │ ├── invoke.go # прокси HTTP вызовов функций │ │ └── namespace.go # POST /ensure: создать k8s namespace │ ├── builder/ │ │ └── context.go # zip + runtime → tar.gz + Dockerfile для kaniko │ ├── storage/ │ │ ├── s3/client.go # minio-go: Upload, UploadContext, Download, Delete │ │ └── postgres/ # хранение invocation logs │ └── config/ # конфиг из env переменных ├── services/ │ └── funcs/ # отдельный HTTP сервис (web-консоль) │ ├── main.go # v0.2.0: HTML+plain text+proxy к оператору │ ├── index.html # dark-themed HTML консоль (go:embed) │ ├── Dockerfile # multi-stage Go → alpine (копирует main.go + index.html) │ └── go.mod # отдельный Go модуль ├── migrations/ │ └── 001_initial.sql # схема PostgreSQL (invocation logs) ├── deployments/k8s/ │ ├── operator.yaml # ConfigMap + Deployment + Service + Ingress оператора │ ├── funcs-service.yaml # Deployment + Service + Ingress funcs-service │ ├── postgres.yaml # PostgreSQL │ └── rbac.yaml # ClusterRole + ClusterRoleBinding для оператора ├── runtimes/ │ ├── python3.11/server.py # HTTP wrapper (str → text/plain начиная с v0.1.3) │ ├── nodejs20/server.js # HTTP wrapper │ └── go1.23/ # multi-stage builder образ ├── terraform/ │ └── provider/ # terraform-provider-sless (отдельный Go модуль) │ ├── main.go │ └── internal/ │ ├── client/client.go # REST клиент к оператору │ ├── resources/ │ │ ├── function_resource.go # sless_function: source_dir, code_hash, ModifyPlan │ │ ├── trigger_resource.go # sless_trigger │ │ └── job_resource.go # sless_job + ErrJobAlreadyExists │ └── provider/provider.go ├── examples/ │ ├── POSTGRES/ # pg функции: create-table, pg-info, pg-table-reader │ ├── hello-go/ │ ├── hello-node/ │ └── simple-python/ ├── config/ # kustomize конфиги (controller-gen артефакты) │ ├── crd/ # CRD манифесты (автогенерация) │ ├── rbac/ │ └── samples/ ├── hack/ │ └── boilerplate.go.txt # шаблон заголовков файлов └── doc/ # документация проекта ├── architecture/ │ ├── agent-handoff-2026-03-18.md # полный контекст для нового агента │ ├── overview.md # архитектура системы │ └── project-structure.md # этот файл ├── api/design.md # дизайн REST API ├── decisions/log.md # журнал архитектурных решений ├── errors/log.md # известные ошибки и решения └── progress.md # трекер задач ``` ## Go модули Два независимых Go модуля в одном репозитории: | Модуль | Путь | Назначение | |--------|------|-----------| | `gitea-naeel.giteak8s.services.ngcloud.ru/naeel/sless` | `/` | Оператор + API | | `gitea-naeel.giteak8s.services.ngcloud.ru/naeel/sless/services/funcs` | `services/funcs/` | Web-консоль сервис | | `terra.k8c.ru/naeel/sless` | `terraform/provider/` | Terraform провайдер |