- infrastructure/overview.md: исправить S3 URL, Container Registry (DockerHub), namespace sless, Terraform Registry terra.k8c.ru - errors/log.md: добавить 3 ошибки — kaniko S3 scheme, бесконечный цикл сборки, docker credStore desktop.exe - decisions/log.md: добавить решения — DockerHub, terraform провайдер в той же репе, WaitReady паттерн, code_hash для версионирования кода - api/design.md: обновить базовый URL, добавить upload endpoint с описанием процесса, исправить runtime список
131 lines
3.5 KiB
Markdown
131 lines
3.5 KiB
Markdown
# API Design
|
|
|
|
## Базовый URL
|
|
|
|
```
|
|
http://<operator-host>:9090/v1
|
|
```
|
|
|
|
Локально: `http://localhost:9090/v1`
|
|
В кластере (будущее): `http://sless-operator.sless.svc.cluster.local:9090/v1`
|
|
|
|
**Реализовано** (текущий namespace-aware формат):
|
|
|
|
```
|
|
/v1/namespaces/{namespace}/functions[/{name}]
|
|
/v1/namespaces/{namespace}/functions/{name}/upload
|
|
/v1/namespaces/{namespace}/triggers[/{name}]
|
|
/v1/namespaces/{namespace}/functions/{name}/invocations
|
|
```
|
|
|
|
## Аутентификация
|
|
|
|
```
|
|
Authorization: Bearer <cloud-token>
|
|
```
|
|
|
|
## Ресурсы
|
|
|
|
### Functions
|
|
|
|
| Метод | Путь | Описание |
|
|
|-------|------|----------|
|
|
| GET | /functions | Список функций |
|
|
| POST | /functions | Создать функцию |
|
|
| GET | /functions/{id} | Получить функцию |
|
|
| PUT | /functions/{id} | Обновить функцию |
|
|
| DELETE | /functions/{id} | Удалить функцию |
|
|
|
|
### Versions (код функции)
|
|
|
|
| Метод | Путь | Описание |
|
|
|-------|------|----------|
|
|
| GET | /functions/{id}/versions | Список версий |
|
|
| POST | /functions/{id}/versions | Загрузить новый код (multipart zip) |
|
|
| GET | /functions/{id}/versions/{ver} | Получить версию |
|
|
| POST | /functions/{id}/versions/{ver}/activate | Активировать версию |
|
|
|
|
### Triggers
|
|
|
|
| Метод | Путь | Описание |
|
|
|-------|------|----------|
|
|
| GET | /functions/{id}/triggers | Список триггеров |
|
|
| POST | /functions/{id}/triggers | Создать триггер (HTTP/Cron) |
|
|
| DELETE | /functions/{id}/triggers/{tid} | Удалить триггер |
|
|
|
|
### Invocations (вызов и логи)
|
|
|
|
| Метод | Путь | Описание |
|
|
|-------|------|----------|
|
|
| POST | /functions/{id}/invoke | Синхронный вызов |
|
|
| GET | /functions/{id}/invocations | История вызовов |
|
|
| GET | /functions/{id}/invocations/{iid} | Детали вызова + логи |
|
|
|
|
## Upload endpoint
|
|
|
|
```
|
|
POST /v1/namespaces/{namespace}/functions/{name}/upload
|
|
Content-Type: multipart/form-data
|
|
Authorization: Bearer <token>
|
|
|
|
field: code = <zip-file>
|
|
```
|
|
|
|
Процесс:
|
|
1. Принимает zip (max 32MB)
|
|
2. Распаковывает zip
|
|
3. Генерирует `Dockerfile` (`FROM naeel/sless-runtime-{runtime}:latest\nCOPY . /app/function/`)
|
|
4. Перепаковывает в `tar.gz` (kaniko требует tar format)
|
|
5. Загружает в S3: `contexts/{ns}/{name}/{timestamp}.tar.gz`
|
|
6. Обновляет `fn.Spec.S3Key` → контроллер видит изменение и запускает kaniko Job
|
|
|
|
Ответ `200 OK`:
|
|
```json
|
|
{"message": "build queued", "phase": "Pending", "s3_key": "contexts/..."}
|
|
```
|
|
|
|
## Поддерживаемые runtime (v1)
|
|
|
|
- `python3.11` — реализован и протестирован
|
|
- `go1.21` — планируется
|
|
- `nodejs20` — планируется
|
|
|
|
## Модель Function
|
|
|
|
```json
|
|
{
|
|
"id": "fn-uuid",
|
|
"name": "my-function",
|
|
"description": "...",
|
|
"runtime": "python3.11",
|
|
"entrypoint": "handler.handle",
|
|
"memory_mb": 128,
|
|
"timeout_sec": 30,
|
|
"env_vars": {"KEY": "value"},
|
|
"active_version": "1",
|
|
"status": "active",
|
|
"created_at": "...",
|
|
"updated_at": "..."
|
|
}
|
|
```
|
|
|
|
## Модель Trigger
|
|
|
|
```json
|
|
{
|
|
"id": "tr-uuid",
|
|
"type": "http",
|
|
"url": "https://sless.api.ngcloud.ru/invoke/fn-uuid",
|
|
"created_at": "..."
|
|
}
|
|
```
|
|
|
|
```json
|
|
{
|
|
"id": "tr-uuid",
|
|
"type": "cron",
|
|
"schedule": "0 * * * *",
|
|
"created_at": "..."
|
|
}
|
|
```
|