- controllers/trigger_controller.go: handleTriggerDeletion теперь удаляет Service
и Ingress из sless-fn-{ns} при удалении HTTP-триггера
- controllers/function_controller.go: handleDeletion теперь удаляет Service и Ingress
(имена совпадают с fn.Name); добавлен импорт netv1
- terraform/provider trigger_resource.go: Delete ждёт пока GetTrigger вернёт 404
(до 90с) — провайдер не возвращает успех раньше чем cleanup завершён
- examples: версия провайдера обновлена до ~> 0.1.11
Operator: naeel/sless-operator:v0.1.17
Provider: v0.1.11
Fixes DESTROY_ROUTE_CLEANUP_BUG.md
|
||
|---|---|---|
| hello-node | ||
| notes-python | ||
| simple-node | ||
| simple-python | ||
| README.md | ||
Примеры sless
Примеры показывают различные сценарии использования serverless функций через Terraform провайдер terra.k8c.ru/naeel/sless.
Требования
- Terraform >= 1.0
- Доступ к
https://sless-api.kube5s.ru
Провайдер
Во всех примерах main.tf содержит:
provider "sless" {
endpoint = "https://sless-api.kube5s.ru"
}
Примеры
simple-python — джоб передаёт результат в HTTP-функцию (Python)
При apply запускается джоб, его вывод передаётся в HTTP-функцию через env_vars.
cd simple-python
terraform init
terraform apply -auto-approve
# Что вернул джоб (время на момент деплоя):
terraform output job_result
# Проверить функцию:
curl -s https://sless-api.kube5s.ru/fn/default/simple-py-time-display
simple-node — то же самое, но на Node.js 20
cd simple-node
terraform init
terraform apply -auto-approve
terraform output job_result
curl -s https://sless-api.kube5s.ru/fn/default/simple-node-time-display
hello-node — минимальный пример на Node.js
Две независимые функции: HTTP-функция (возвращает приветствие) и одноразовый джоб (суммирует числа).
cd hello-node
terraform init
terraform apply -auto-approve
# Проверить HTTP-функцию:
curl -s -X POST https://sless-api.kube5s.ru/fn/default/hello-http \
-H 'Content-Type: application/json' -d '{"name":"World"}'
# Посмотреть результат джоба:
terraform output job_message
notes-python — CRUD API на Python + PostgreSQL
Полноценное приложение: инициализация схемы БД через джобы, CRUD-функция, read-only функция для списка записей.
Переменные:
| Переменная | Описание | Дефолт |
|---|---|---|
pg_dsn |
DSN для подключения к PostgreSQL | postgres://sless:sless-pg-password@postgres.sless.svc.cluster.local:5432/sless?sslmode=disable |
cd notes-python
terraform init
# Опционально — переопределить DSN:
# export TF_VAR_pg_dsn="postgres://user:pass@host:5432/db?sslmode=disable"
terraform apply -auto-approve
# Проверить инициализацию БД:
terraform output db_init_table_status
terraform output db_init_index_status
# URL функций:
terraform output notes_url # CRUD
terraform output notes_list_url # список всех записей
# Создать запись:
curl -s -X POST "https://sless-api.kube5s.ru/fn/default/notes/add?title=Hello&body=World"
# Список записей:
curl -s https://sless-api.kube5s.ru/fn/default/notes-list
# Обновить (id из предыдущего ответа):
curl -s -X POST "https://sless-api.kube5s.ru/fn/default/notes/update?id=1&title=Updated&body=New+body"
# Удалить:
curl -s -X POST "https://sless-api.kube5s.ru/fn/default/notes/delete?id=1"
Общие команды
# Посмотреть текущее состояние ресурсов:
terraform show
# Пересоздать конкретный ресурс:
terraform apply -replace=sless_function.имя -auto-approve
# Повторно запустить джоб — увеличить run_id в .tf файле, затем:
terraform apply -auto-approve
# Удалить все ресурсы примера:
terraform destroy -auto-approve
Структура каждого примера
пример/
├── main.tf — провайдер
├── *.tf — ресурсы (функции, триггеры, джобы)
├── outputs.tf — URLs и статусы после apply
├── variables.tf — входные переменные (если есть)
└── code/ — исходный код функций