Files
sless/doc/architecture/project-structure.md
T

6.4 KiB
Raw Blame History

Структура проекта

Последнее обновление: 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 провайдер