feat: provider v0.1.9 — namespace removed from resources, moved to provider block
This commit is contained in:
@@ -1,14 +1,25 @@
|
||||
# Создано: 2026-03-09
|
||||
# main.tf — точка входа для примера simple-python.
|
||||
# Демонстрирует цепочку: sless_job (one-shot) → sless_function (http).
|
||||
# Джоб запускается при terraform apply, его stdout (JSON) попадает в
|
||||
# sless_job.run_getter.message и передаётся функции через env_vars.
|
||||
# main.tf — пример: запустить один раз скрипт при деплое и передать его результат в функцию.
|
||||
#
|
||||
# Как это работает:
|
||||
# 1. При «terraform apply» запускается скрипт-джоб (time_getter)
|
||||
# 2. Скрипт возвращает JSON с текущим временем
|
||||
# 3. Terraform подхватывает этот JSON и передаёт в переменную окружения HTTP-функции (time_display)
|
||||
# 4. Функция отдаёт время при каждом запросе
|
||||
#
|
||||
# Зачем такое нужно:
|
||||
# Если данные нужны функции, но считаются один раз при деплое —
|
||||
# напишите логику в джоб, а результат передайте через env_vars.
|
||||
# Например: получить токен, версию схемы БД, время деплоя и т.д.
|
||||
#
|
||||
# namespace задаётся один раз здесь, в блоке provider.
|
||||
# В ресурсах (sless_function, sless_trigger, sless_job) namespace НЕ указывается.
|
||||
|
||||
terraform {
|
||||
required_providers {
|
||||
sless = {
|
||||
source = "terra.k8c.ru/naeel/sless"
|
||||
version = "~> 0.1.8"
|
||||
version = "~> 0.1.9"
|
||||
}
|
||||
archive = {
|
||||
source = "hashicorp/archive"
|
||||
@@ -18,6 +29,7 @@ terraform {
|
||||
}
|
||||
|
||||
provider "sless" {
|
||||
endpoint = "https://sless-api.kube5s.ru"
|
||||
token = "dev-token-change-me"
|
||||
endpoint = "https://sless-api.kube5s.ru"
|
||||
token = "dev-token-change-me"
|
||||
namespace = "default"
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# Создано: 2026-03-09
|
||||
# outputs.tf — полезные значения после terraform apply.
|
||||
# outputs.tf — что выводит terraform после apply.
|
||||
|
||||
# URL HTTP-триггера для тестирования функции display
|
||||
# Адрес вашей функции — откройте в браузере или вставьте в curl
|
||||
output "display_url" {
|
||||
description = "URL HTTP-триггера функции time_display"
|
||||
description = "URL функции time_display"
|
||||
value = sless_trigger.display_http.url
|
||||
}
|
||||
|
||||
# Результат джоба — JSON строка {"time": "..."} из stdout функции get_time()
|
||||
# Что вернул скрипт-джоб — именно это передано в функцию как JOB_TIME
|
||||
output "job_result" {
|
||||
description = "Stdout джоба (return value функции get_time)"
|
||||
description = "Результат выполнения скрипта time_getter"
|
||||
value = sless_job.run_getter.message
|
||||
}
|
||||
|
||||
@@ -1,39 +1,35 @@
|
||||
# Создано: 2026-03-09
|
||||
# time-display.tf — постоянная HTTP-функция, получающая данные от джоба.
|
||||
# JOB_TIME берётся из sless_job.run_getter.message (stdout джоба) —
|
||||
# это JSON строка {"time": "..."}, terraform передаёт её в env целиком.
|
||||
# Функция парсит её через os.environ, а не через event — демонстрирует
|
||||
# паттерн "данные вычислены один раз при деплое, используются на каждый запрос".
|
||||
# time-display.tf — HTTP-функция, доступная по URL после apply.
|
||||
# Получает результат джоба (из time-getter.tf) через переменную окружения JOB_TIME.
|
||||
|
||||
# Упаковываем код функции в zip
|
||||
# Упаковываем код функции в zip для загрузки
|
||||
data "archive_file" "time_display_zip" {
|
||||
type = "zip"
|
||||
source_dir = "${path.module}/code/time_display"
|
||||
output_path = "${path.module}/dist/time_display.zip"
|
||||
}
|
||||
|
||||
# HTTP-функция: постоянный Deployment, читает JOB_TIME из env
|
||||
# HTTP-функция — отвечает на запросы по URL из outputs.tf
|
||||
resource "sless_function" "time_display" {
|
||||
namespace = "default"
|
||||
name = "simple-py-time-display"
|
||||
name = "simple-py-time-display" # уникальное имя в namespace
|
||||
runtime = "python3.11"
|
||||
entrypoint = "time_display.show_time"
|
||||
entrypoint = "time_display.show_time" # файл.функция в code/time_display/
|
||||
memory_mb = 64
|
||||
|
||||
# Значение вычислено джобом при apply и зафиксировано в state
|
||||
# Передаём результат джоба в функцию через переменную окружения.
|
||||
# В коде функции: os.environ.get("JOB_TIME")
|
||||
env_vars = {
|
||||
JOB_TIME = sless_job.run_getter.message
|
||||
}
|
||||
|
||||
code_path = data.archive_file.time_display_zip.output_path
|
||||
code_hash = filesha256("${path.module}/code/time_display/time_display.py")
|
||||
code_hash = filesha256("${path.module}/code/time_display/time_display.py") # для пересборки при изменении кода
|
||||
|
||||
depends_on = [sless_job.run_getter]
|
||||
depends_on = [sless_job.run_getter] # ждём завершения джоба перед деплоем функции
|
||||
}
|
||||
|
||||
# HTTP-триггер — публикует функцию по URL
|
||||
# Публикуем функцию по HTTP — URL будет в outputs.tf
|
||||
resource "sless_trigger" "display_http" {
|
||||
namespace = "default"
|
||||
name = "simple-py-display-http"
|
||||
type = "http"
|
||||
function = sless_function.time_display.name
|
||||
|
||||
@@ -1,38 +1,35 @@
|
||||
# Создано: 2026-03-09
|
||||
# time-getter.tf — одноразовая функция + джоб запускающий её при apply.
|
||||
# sless_job.run_getter.message после apply содержит stdout runner-а:
|
||||
# {"time": "2026-03-09T12:34:56.789012+00:00"}
|
||||
# Это значение terraform записывает в env JOB_TIME функции time_display.
|
||||
# time-getter.tf — скрипт который запускается ОДИН РАЗ при terraform apply.
|
||||
# После запуска его результат доступен через: sless_job.run_getter.message
|
||||
# Смотри time-display.tf — там этот результат передаётся в функцию.
|
||||
|
||||
# Упаковываем код функции в zip
|
||||
# Упаковываем код скрипта в zip для загрузки
|
||||
data "archive_file" "time_getter_zip" {
|
||||
type = "zip"
|
||||
source_dir = "${path.module}/code/time_getter"
|
||||
output_path = "${path.module}/dist/time_getter.zip"
|
||||
}
|
||||
|
||||
# Функция-вычислитель: запускается только джобом, не имеет HTTP-триггера
|
||||
# Функция для скрипта — без HTTP-триггера, вызывается только через джоб ниже
|
||||
resource "sless_function" "time_getter" {
|
||||
namespace = "default"
|
||||
name = "simple-py-time-getter"
|
||||
name = "simple-py-time-getter" # уникальное имя в namespace
|
||||
runtime = "python3.11"
|
||||
entrypoint = "time_getter.get_time"
|
||||
entrypoint = "time_getter.get_time" # файл.функция в code/time_getter/
|
||||
memory_mb = 64
|
||||
|
||||
code_path = data.archive_file.time_getter_zip.output_path
|
||||
code_hash = filesha256("${path.module}/code/time_getter/time_getter.py")
|
||||
code_hash = filesha256("${path.module}/code/time_getter/time_getter.py") # для пересборки при изменении кода
|
||||
}
|
||||
|
||||
# Джоб: запускает time_getter один раз при terraform apply.
|
||||
# run_id > 0 — разрешение на запуск (run_id=0 пропускается оператором).
|
||||
# После завершения message = stdout пода = json возвращённый get_time().
|
||||
# Джоб — запускает функцию time_getter один раз прямо при apply.
|
||||
# run_id = 1 означает «запустить». Если увеличить (2, 3...) — запустится снова.
|
||||
# После завершения: sless_job.run_getter.message = то что вернула функция
|
||||
resource "sless_job" "run_getter" {
|
||||
namespace = "default"
|
||||
name = "simple-py-getter-run"
|
||||
function = sless_function.time_getter.name
|
||||
run_id = 1
|
||||
wait_timeout_sec = 120
|
||||
event_json = "{}"
|
||||
wait_timeout_sec = 120 # сколько секунд ждать завершения скрипта
|
||||
event_json = "{}" # входные данные для скрипта (пусто — данные не нужны)
|
||||
|
||||
depends_on = [sless_function.time_getter]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user