test: E2E скрипт run_e2e_tests.sh + fix provider token/version в примерах
This commit is contained in:
parent
6b869a0fa7
commit
aae073247b
@ -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
10
hello-node/variables.tf
Normal 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
|
||||||
|
}
|
||||||
@ -14,13 +14,14 @@ 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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# 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"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
7
push-sample/Dockerfile
Normal 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
28
push-sample/README.md
Normal 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
53
push-sample/build_and_push.sh
Executable 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"
|
||||||
@ -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
10
simple-node/variables.tf
Normal 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
|
||||||
|
}
|
||||||
@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
10
simple-python/variables.tf
Normal file
10
simple-python/variables.tf
Normal 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
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user