From aae073247b331ec71c66588b9041104a701f3ba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Wed, 11 Mar 2026 10:49:36 +0400 Subject: [PATCH] =?UTF-8?q?test:=20E2E=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF?= =?UTF-8?q?=D1=82=20run=5Fe2e=5Ftests.sh=20+=20fix=20provider=20token/vers?= =?UTF-8?q?ion=20=D0=B2=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hello-node/main.tf | 2 +- hello-node/variables.tf | 10 +++++++ notes-python/main.tf | 7 +++-- notes-python/variables.tf | 10 ++++++- push-sample/Dockerfile | 7 +++++ push-sample/README.md | 28 ++++++++++++++++++ push-sample/build_and_push.sh | 53 +++++++++++++++++++++++++++++++++++ simple-node/main.tf | 7 +++-- simple-node/variables.tf | 10 +++++++ simple-python/main.tf | 7 +++-- simple-python/variables.tf | 10 +++++++ 11 files changed, 140 insertions(+), 11 deletions(-) create mode 100644 hello-node/variables.tf create mode 100644 push-sample/Dockerfile create mode 100644 push-sample/README.md create mode 100755 push-sample/build_and_push.sh create mode 100644 simple-node/variables.tf create mode 100644 simple-python/variables.tf diff --git a/hello-node/main.tf b/hello-node/main.tf index e3584dd..5f4a402 100644 --- a/hello-node/main.tf +++ b/hello-node/main.tf @@ -18,7 +18,7 @@ terraform { provider "sless" { 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" } diff --git a/hello-node/variables.tf b/hello-node/variables.tf new file mode 100644 index 0000000..538fc2b --- /dev/null +++ b/hello-node/variables.tf @@ -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 +} diff --git a/notes-python/main.tf b/notes-python/main.tf index de76386..d4c1772 100644 --- a/notes-python/main.tf +++ b/notes-python/main.tf @@ -14,13 +14,14 @@ terraform { # Провайдер для управления serverless функциями через sless API sless = { source = "terra.k8c.ru/naeel/sless" - version = "~> 0.1.11" + version = "~> 0.1.13" } } } # sless провайдер подключается к API кластера. provider "sless" { - endpoint = "https://sless-api.kube5s.ru" - token = "dev-token-change-me" + endpoint = "https://sless-api.kube5s.ru" + token = var.token + nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1" } diff --git a/notes-python/variables.tf b/notes-python/variables.tf index d4e0af0..0e0b3bb 100644 --- a/notes-python/variables.tf +++ b/notes-python/variables.tf @@ -1,10 +1,18 @@ -# 2026-03-09 +# 2026-03-09 (обновлён 2026-03-11) # variables.tf — входные переменные для notes-python примера. # # PG_DSN передаётся во все функции через env_vars. # Хранится как sensitive чтобы не светился в terraform output и логах. # В продакшне — не хардкоди 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 внутри кластера. # Формат: postgres://user:password@host:port/dbname?sslmode=... variable "pg_dsn" { diff --git a/push-sample/Dockerfile b/push-sample/Dockerfile new file mode 100644 index 0000000..faa19a5 --- /dev/null +++ b/push-sample/Dockerfile @@ -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"] diff --git a/push-sample/README.md b/push-sample/README.md new file mode 100644 index 0000000..51043a0 --- /dev/null +++ b/push-sample/README.md @@ -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`. diff --git a/push-sample/build_and_push.sh b/push-sample/build_and_push.sh new file mode 100755 index 0000000..92f563f --- /dev/null +++ b/push-sample/build_and_push.sh @@ -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" diff --git a/simple-node/main.tf b/simple-node/main.tf index a4cda22..2e1927a 100644 --- a/simple-node/main.tf +++ b/simple-node/main.tf @@ -19,12 +19,13 @@ terraform { required_providers { sless = { source = "terra.k8c.ru/naeel/sless" - version = "~> 0.1.11" + version = "~> 0.1.13" } } } provider "sless" { - endpoint = "https://sless-api.kube5s.ru" - token = "dev-token-change-me" + endpoint = "https://sless-api.kube5s.ru" + token = var.token + nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1" } diff --git a/simple-node/variables.tf b/simple-node/variables.tf new file mode 100644 index 0000000..2057582 --- /dev/null +++ b/simple-node/variables.tf @@ -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 +} diff --git a/simple-python/main.tf b/simple-python/main.tf index 75a1e6a..d0d3d86 100644 --- a/simple-python/main.tf +++ b/simple-python/main.tf @@ -18,12 +18,13 @@ terraform { required_providers { sless = { source = "terra.k8c.ru/naeel/sless" - version = "~> 0.1.11" + version = "~> 0.1.13" } } } provider "sless" { - endpoint = "https://sless-api.kube5s.ru" - token = "dev-token-change-me" + endpoint = "https://sless-api.kube5s.ru" + token = var.token + nubes_endpoint = "https://deck-api.ngcloud.ru/api/v1" } diff --git a/simple-python/variables.tf b/simple-python/variables.tf new file mode 100644 index 0000000..dac71bd --- /dev/null +++ b/simple-python/variables.tf @@ -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 +}