107 lines
6.4 KiB
Markdown
107 lines
6.4 KiB
Markdown
# Структура проекта
|
||
|
||
Последнее обновление: 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 провайдер |
|