test: E2E скрипт run_e2e_tests.sh + fix provider token/version в примерах

This commit is contained in:
“Naeel” 2026-03-11 10:49:36 +04:00
parent 6b869a0fa7
commit aae073247b
11 changed files with 140 additions and 11 deletions

View File

@ -18,7 +18,7 @@ terraform {
provider "sless" { provider "sless" {
endpoint = "https://sless-api.kube5s.ru" endpoint = "https://sless-api.kube5s.ru"
token = file("${path.module}/../../secrets/prod.token") token = var.token
nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1" nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1"
} }

10
hello-node/variables.tf Normal file
View File

@ -0,0 +1,10 @@
# 2026-03-11
# variables.tf входные переменные для hello-node примера.
# JWT токен облака (nubes). Передаётся через terraform.tfvars (gitignored).
# Из токена провайдер вычисляет namespace: sless-{sha256[:8]}
variable "token" {
description = "JWT токен облака для аутентификации в sless API"
type = string
sensitive = true
}

View File

@ -14,7 +14,7 @@ terraform {
# Провайдер для управления serverless функциями через sless API # Провайдер для управления serverless функциями через sless API
sless = { sless = {
source = "terra.k8c.ru/naeel/sless" source = "terra.k8c.ru/naeel/sless"
version = "~> 0.1.11" version = "~> 0.1.13"
} }
} }
} }
@ -22,5 +22,6 @@ terraform {
# sless провайдер подключается к API кластера. # sless провайдер подключается к API кластера.
provider "sless" { provider "sless" {
endpoint = "https://sless-api.kube5s.ru" endpoint = "https://sless-api.kube5s.ru"
token = "dev-token-change-me" token = var.token
nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1"
} }

View File

@ -1,10 +1,18 @@
# 2026-03-09 # 2026-03-09 (обновлён 2026-03-11)
# variables.tf входные переменные для notes-python примера. # variables.tf входные переменные для notes-python примера.
# #
# PG_DSN передаётся во все функции через env_vars. # PG_DSN передаётся во все функции через env_vars.
# Хранится как sensitive чтобы не светился в terraform output и логах. # Хранится как sensitive чтобы не светился в terraform output и логах.
# В продакшне не хардкоди DSN здесь, используй TF_VAR_pg_dsn или secrets manager. # В продакшне не хардкоди DSN здесь, используй TF_VAR_pg_dsn или secrets manager.
# JWT токен облака (nubes). Передаётся через terraform.tfvars (gitignored).
# Из токена провайдер вычисляет namespace: sless-{sha256[:8]}
variable "token" {
description = "JWT токен облака для аутентификации в sless API"
type = string
sensitive = true
}
# DSN для подключения к PostgreSQL внутри кластера. # DSN для подключения к PostgreSQL внутри кластера.
# Формат: postgres://user:password@host:port/dbname?sslmode=... # Формат: postgres://user:password@host:port/dbname?sslmode=...
variable "pg_dsn" { variable "pg_dsn" {

7
push-sample/Dockerfile Normal file
View File

@ -0,0 +1,7 @@
# 2026-03-11 10:00
# Minimal sample image to push to PearlHarbor registry
# Purpose: небольшой образ для тестирования пуша в реестр
FROM alpine:3.18
CMD ["sh", "-c", "echo Hello from pearlharbor sample image"]

28
push-sample/README.md Normal file
View File

@ -0,0 +1,28 @@
# Пример для пуша в PearlHarbor
Файлы:
- [examples/push-sample/Dockerfile](examples/push-sample/Dockerfile) — минимальный образ
- [examples/push-sample/build_and_push.sh](examples/push-sample/build_and_push.sh) — сборка и опциональный пуш
Как использовать:
1. Сборка локально (в корне репы):
```bash
docker build -t sless-sample:local -f examples/push-sample/Dockerfile examples/push-sample
```
2. Протестировать скрипт (скрипт не будет пушить без переменной DO_PUSH):
```bash
cd examples/push-sample
./build_and_push.sh
```
3. Для реального пуша установите `DO_PUSH=true`. Скрипт прочитает `secrets/pearlharbor_registry.txt`.
```bash
DO_PUSH=true ./build_and_push.sh
```
Примечание: скрипт использует по умолчанию пользователя `admin`. Для другого пользователя задайте `REGISTRY_USER`.

53
push-sample/build_and_push.sh Executable file
View File

@ -0,0 +1,53 @@
#!/usr/bin/env bash
# 2026-03-11 10:02
# Скрипт: собирает минимальный образ и, при разрешении, пушит в реестр PearlHarbor
# Требования: `docker` в PATH. Скрипт НЕ будет пушить без DO_PUSH=true.
set -euo pipefail
# Получаем значения из файла секретов
SECRETS_FILE="secrets/pearlharbor_registry.txt"
if [ ! -f "$SECRETS_FILE" ]; then
echo "Файл с секретами не найден: $SECRETS_FILE"
exit 1
fi
connection_url=$(grep -E '^connection_url=' "$SECRETS_FILE" | cut -d'=' -f2-)
admin_pass=$(grep -E '^admin_pass=' "$SECRETS_FILE" | cut -d'=' -f2-)
if [ -z "$connection_url" ]; then
echo "Не найден connection_url в $SECRETS_FILE"
exit 1
fi
# Убираем протокол и возможный слеш на конце
registry_host=$(echo "$connection_url" | sed -E 's~https?://~~' | sed -E 's~/$~~')
image_name="$registry_host/sless-sample:latest"
echo "Registry host: $registry_host"
echo "Image name: $image_name"
echo "Собираю образ локально..."
docker build -t sless-sample:local -f Dockerfile .. || {
echo "Сборка не удалась"; exit 1
}
echo "Готово. Образ: sless-sample:local"
if [ "${DO_PUSH:-}" != "true" ]; then
echo "DO_PUSH != true — пуш не будет выполнен. Чтобы запушить: DO_PUSH=true ./build_and_push.sh"
exit 0
fi
# Если дошли до сюда — выполняем login/push
registry_user=${REGISTRY_USER:-admin}
echo "Выполняю docker login к $registry_host как '$registry_user'"
echo "$admin_pass" | docker login "$registry_host" -u "$registry_user" --password-stdin
echo "Тегирую и пушу образ: $image_name"
docker tag sless-sample:local "$image_name"
docker push "$image_name"
echo "Пуш завершён. Проверьте реестр для образа: $image_name"

View File

@ -19,12 +19,13 @@ terraform {
required_providers { required_providers {
sless = { sless = {
source = "terra.k8c.ru/naeel/sless" source = "terra.k8c.ru/naeel/sless"
version = "~> 0.1.11" version = "~> 0.1.13"
} }
} }
} }
provider "sless" { provider "sless" {
endpoint = "https://sless-api.kube5s.ru" endpoint = "https://sless-api.kube5s.ru"
token = "dev-token-change-me" token = var.token
nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1"
} }

10
simple-node/variables.tf Normal file
View File

@ -0,0 +1,10 @@
# 2026-03-11
# variables.tf входные переменные для simple-node примера.
# JWT токен облака (nubes). Передаётся через terraform.tfvars (gitignored).
# Из токена провайдер вычисляет namespace: sless-{sha256[:8]}
variable "token" {
description = "JWT токен облака для аутентификации в sless API"
type = string
sensitive = true
}

View File

@ -18,12 +18,13 @@ terraform {
required_providers { required_providers {
sless = { sless = {
source = "terra.k8c.ru/naeel/sless" source = "terra.k8c.ru/naeel/sless"
version = "~> 0.1.11" version = "~> 0.1.13"
} }
} }
} }
provider "sless" { provider "sless" {
endpoint = "https://sless-api.kube5s.ru" endpoint = "https://sless-api.kube5s.ru"
token = "dev-token-change-me" token = var.token
nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1"
} }

View File

@ -0,0 +1,10 @@
# 2026-03-11
# variables.tf входные переменные для simple-python примера.
# JWT токен облака (nubes). Передаётся через terraform.tfvars (gitignored).
# Из токена провайдер вычисляет namespace: sless-{sha256[:8]}
variable "token" {
description = "JWT токен облака для аутентификации в sless API"
type = string
sensitive = true
}