Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6cad557dde | ||
|
|
3cf81a1e01 | ||
|
|
dbfdcbe24d | ||
|
|
8b6d1a3c21 | ||
|
|
eb2bb41db2 | ||
|
|
99abf00f07 | ||
|
|
d3f086801f | ||
|
|
5680e0e512 | ||
|
|
cc5b78f8ee | ||
|
|
d9950ad4d4 |
@@ -0,0 +1,203 @@
|
|||||||
|
# AGENTS.md — Machine-readable deployment instructions for AI agents
|
||||||
|
|
||||||
|
## Quick Start for AI Agents
|
||||||
|
|
||||||
|
You are an AI agent tasked with deploying `shared-sqs` to a Kubernetes cluster.
|
||||||
|
|
||||||
|
**Before proceeding, do the following:**
|
||||||
|
|
||||||
|
1. **Ask user for all required variables** from STEP 1 below. Do NOT proceed if any is missing.
|
||||||
|
2. **Check user's environment** by running:
|
||||||
|
```bash
|
||||||
|
kubectl version --client
|
||||||
|
helm version
|
||||||
|
```
|
||||||
|
If either command fails or returns an error — stop and inform the user that `kubectl` or `helm` are not installed.
|
||||||
|
3. **Then proceed with STEP 2** and follow the steps sequentially.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## YOUR TASK
|
||||||
|
|
||||||
|
Deploy `shared-sqs` to a Kubernetes cluster using the Helm chart in `./deploy/`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## STEP 1 — COLLECT REQUIRED INFORMATION FROM USER
|
||||||
|
|
||||||
|
Ask the user for ALL of the following before doing anything else.
|
||||||
|
Do NOT proceed if any required value is missing.
|
||||||
|
|
||||||
|
### Required
|
||||||
|
|
||||||
|
| Variable | Description | Example |
|
||||||
|
|----------|-------------|---------|
|
||||||
|
| `REDIS_ADDR` | Redis address, format `host:port` | `redis.default.svc.cluster.local:6379` |
|
||||||
|
| `REDIS_PASSWORD` | Redis password | `mysecretpassword` |
|
||||||
|
| `ADMIN_TOKEN` | Admin API token, any random string | output of `openssl rand -hex 20` |
|
||||||
|
| `INGRESS_HOST` | Domain pointing to cluster ingress IP | `sqs.example.com` |
|
||||||
|
|
||||||
|
### Optional
|
||||||
|
|
||||||
|
| Variable | Default | Description |
|
||||||
|
|----------|---------|-------------|
|
||||||
|
| `REDIS_USER` | `default` | Redis username, change only if using Redis ACL |
|
||||||
|
| `NAMESPACE` | `shared-sqs` | Kubernetes namespace |
|
||||||
|
| `IMAGE_TAG` | `v0.1.24` | Service image version |
|
||||||
|
| `SEED_DEMO` | `true` | Create demo tenant on first start |
|
||||||
|
| `BILLING_ENABLED` | `false` | Enable billing to PostgreSQL |
|
||||||
|
| `PG_HOST` | — | Required only if BILLING_ENABLED=true |
|
||||||
|
| `PG_PORT` | `5432` | Required only if BILLING_ENABLED=true |
|
||||||
|
| `PG_DATABASE` | — | Required only if BILLING_ENABLED=true |
|
||||||
|
| `PG_USER` | — | Required only if BILLING_ENABLED=true |
|
||||||
|
| `PG_PASSWORD` | — | Required only if BILLING_ENABLED=true |
|
||||||
|
| `PG_SSLMODE` | `require` | Required only if BILLING_ENABLED=true |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## STEP 2 — CLONE REPOSITORY
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://gitea.services.ngcloud.ru/Nail/shared-SQS.git
|
||||||
|
cd shared-SQS
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## STEP 3 — EDIT deploy/values.yaml
|
||||||
|
|
||||||
|
Replace placeholder values with values collected in Step 1.
|
||||||
|
|
||||||
|
Mandatory substitutions:
|
||||||
|
- `your-redis-host:6379` → value of `REDIS_ADDR`
|
||||||
|
- `your-redis-password` → value of `REDIS_PASSWORD`
|
||||||
|
- `your-admin-token` → value of `ADMIN_TOKEN`
|
||||||
|
- `sqs.your-domain.com` → value of `INGRESS_HOST`
|
||||||
|
|
||||||
|
If `BILLING_ENABLED=true`, also set `billing.enabled: true` and fill all `billing.postgres.*` fields.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## STEP 4 — DEPLOY
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm install shared-sqs ./deploy -n shared-sqs --create-namespace
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected output must contain:
|
||||||
|
```
|
||||||
|
STATUS: deployed
|
||||||
|
```
|
||||||
|
|
||||||
|
If output contains `Error:` — stop and report the error to the user.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## STEP 5 — WAIT FOR POD READY
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl rollout status deployment/shared-sqs -n shared-sqs --timeout=90s
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected output:
|
||||||
|
```
|
||||||
|
deployment "shared-sqs" successfully rolled out
|
||||||
|
```
|
||||||
|
|
||||||
|
If timeout or error — run `kubectl describe pod -n shared-sqs` and report to user.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## STEP 6 — VERIFY SERVICE IS RESPONDING
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s https://<INGRESS_HOST>/health
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected output:
|
||||||
|
```
|
||||||
|
OK
|
||||||
|
```
|
||||||
|
|
||||||
|
If response is not `OK` — check pod logs:
|
||||||
|
```bash
|
||||||
|
kubectl logs -n shared-sqs deployment/shared-sqs --tail=50
|
||||||
|
```
|
||||||
|
Report logs to user.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## STEP 7 — CREATE FIRST TENANT
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s -X POST https://<INGRESS_HOST>/admin/tenants \
|
||||||
|
-H "Authorization: Bearer <ADMIN_TOKEN>" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"name": "my-tenant"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected response contains `access_key` and `secret_key`:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "t-...",
|
||||||
|
"name": "my-tenant",
|
||||||
|
"access_key": "SSAK-...",
|
||||||
|
"secret_key": "...",
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Save `secret_key` — it is shown only once.**
|
||||||
|
|
||||||
|
If response contains `"error"` — report the full response to user.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## STEP 8 — VERIFY SQS WORKS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export AWS_ACCESS_KEY_ID="<access_key from step 7>"
|
||||||
|
export AWS_SECRET_ACCESS_KEY="<secret_key from step 7>"
|
||||||
|
export AWS_DEFAULT_REGION="us-east-1"
|
||||||
|
ENDPOINT="--endpoint-url https://<INGRESS_HOST>"
|
||||||
|
|
||||||
|
aws sqs create-queue --queue-name test-queue $ENDPOINT
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected output contains `QueueUrl`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SUCCESS CRITERIA
|
||||||
|
|
||||||
|
Deployment is complete and correct when ALL of the following are true:
|
||||||
|
|
||||||
|
- [ ] `curl /health` returns `OK`
|
||||||
|
- [ ] Tenant created, `access_key` and `secret_key` received
|
||||||
|
- [ ] `aws sqs create-queue` returns a `QueueUrl`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## KNOWN ISSUES
|
||||||
|
|
||||||
|
| Problem | Cause | Fix |
|
||||||
|
|---------|-------|-----|
|
||||||
|
| Pod stuck in `Pending` | Not enough cluster resources | Check `kubectl describe pod` for resource limits |
|
||||||
|
| Pod in `CrashLoopBackOff` | Wrong Redis address or password | Check `kubectl logs`, fix `redis.addr` / `redis.password` in values.yaml, then `helm upgrade` |
|
||||||
|
| `curl /health` times out | DNS not pointing to ingress IP | Ask user to check DNS A-record for `INGRESS_HOST` |
|
||||||
|
| Admin API returns 401 | Wrong `ADMIN_TOKEN` | Token in `Authorization: Bearer` must match `admin.token` in values.yaml |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## UPGRADE
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm upgrade shared-sqs ./deploy -n shared-sqs
|
||||||
|
```
|
||||||
|
|
||||||
|
## UNINSTALL
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm uninstall shared-sqs -n shared-sqs
|
||||||
|
kubectl delete namespace shared-sqs
|
||||||
|
```
|
||||||
@@ -4,6 +4,39 @@
|
|||||||
|
|
||||||
Сервис предназначен для работы через стандартные AWS SDK и AWS CLI: в обычном клиентском коде меняется только endpoint.
|
Сервис предназначен для работы через стандартные AWS SDK и AWS CLI: в обычном клиентском коде меняется только endpoint.
|
||||||
|
|
||||||
|
## Быстрый старт — деплой
|
||||||
|
|
||||||
|
### 1. Заполнить параметры
|
||||||
|
|
||||||
|
Отредактировать `deploy/values.yaml`:
|
||||||
|
- Redis хост и пароль
|
||||||
|
- Ingress домен (для доступа извне)
|
||||||
|
- PostgreSQL credentials (опционально, для биллинга)
|
||||||
|
|
||||||
|
### 2. Деплоить
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl create namespace shared-sqs
|
||||||
|
helm install shared-sqs ./deploy -n shared-sqs
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Проверить что работает
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Дождаться pod ready (1/1)
|
||||||
|
kubectl -n shared-sqs get pod -w
|
||||||
|
|
||||||
|
# Запустить тесты
|
||||||
|
cd tests-deploy
|
||||||
|
bash run.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат:** PASS=7 FAIL=0 ✅
|
||||||
|
|
||||||
|
Полная инструкция с примерами параметров → [tests-deploy/README.md](tests-deploy/README.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Демо-стенд
|
## Демо-стенд
|
||||||
|
|
||||||
| | |
|
| | |
|
||||||
@@ -20,7 +53,7 @@ Demo token и demo credentials предназначены для ознаком
|
|||||||
|
|
||||||
Важно для demo stand:
|
Важно для demo stand:
|
||||||
- demo tenant общий, поэтому очереди и сообщения в нём могут меняться во время просмотра;
|
- demo tenant общий, поэтому очереди и сообщения в нём могут меняться во время просмотра;
|
||||||
- `QueueUrl` может выглядеть как внутренний адрес сервиса, это нормально для данного стенда: передавайте его обратно как есть и продолжайте использовать `--endpoint-url https://qu.kube5s.ru`.
|
- \`QueueUrl\` может выглядеть как внутренний адрес сервиса, это нормально для данного стенда: передавайте его обратно как есть и продолжайте использовать \`--endpoint-url https://qu.kube5s.ru\`.
|
||||||
|
|
||||||
## Что поддерживается
|
## Что поддерживается
|
||||||
|
|
||||||
@@ -52,8 +85,8 @@ shared-SQS покрывает 17 SQS-операций:
|
|||||||
|
|
||||||
Для быстрого демо доступны оба публичных входа:
|
Для быстрого демо доступны оба публичных входа:
|
||||||
|
|
||||||
- Web UI: используйте `demo-ui-shared-sqs-ngcloud-2026`
|
- Web UI: используйте \`demo-ui-shared-sqs-ngcloud-2026\`
|
||||||
- AWS CLI / SDK: используйте demo `Access Key / Secret Key`
|
- AWS CLI / SDK: используйте demo \`Access Key / Secret Key\`
|
||||||
|
|
||||||
Для ознакомительного доступа можно использовать demo credentials:
|
Для ознакомительного доступа можно использовать demo credentials:
|
||||||
|
|
||||||
@@ -66,23 +99,23 @@ ENDPOINT="--endpoint-url https://qu.kube5s.ru"
|
|||||||
|
|
||||||
Для входа в Web UI:
|
Для входа в Web UI:
|
||||||
|
|
||||||
1. Откройте `https://qu.kube5s.ru/ui/`
|
1. Откройте \`https://qu.kube5s.ru/ui/\`
|
||||||
2. Вставьте `demo-ui-shared-sqs-ngcloud-2026`
|
2. Вставьте \`demo-ui-shared-sqs-ngcloud-2026\`
|
||||||
3. После входа вы попадёте в demo tenant и увидите его очереди и сообщения
|
3. После входа вы попадёте в demo tenant и увидите его очереди и сообщения
|
||||||
|
|
||||||
### 2. Получить свои credentials через Web UI
|
### 2. Получить свои credentials через Web UI
|
||||||
|
|
||||||
Если нужен полноценный доступ к своим очередям и сообщениям, используйте Web UI:
|
Если нужен полноценный доступ к своим очередям и сообщениям, используйте Web UI:
|
||||||
|
|
||||||
1. Откройте `https://qu.kube5s.ru/ui/`
|
1. Откройте \`https://qu.kube5s.ru/ui/\`
|
||||||
2. В поле входа вставьте свой `API Token (nubes JWT)`
|
2. В поле входа вставьте свой \`API Token (nubes JWT)\`
|
||||||
3. Этот токен пользователь получает в панели управления облаком Nubes
|
3. Этот токен пользователь получает в панели управления облаком Nubes
|
||||||
4. После успешного входа shared-SQS автоматически создаёт tenant и показывает `Access Key` и `Secret Key`
|
4. После успешного входа shared-SQS автоматически создаёт tenant и показывает \`Access Key\` и \`Secret Key\`
|
||||||
5. Эти `Access Key / Secret Key` дальше используются в AWS CLI, boto3, AWS SDK for JavaScript и других клиентах
|
5. Эти \`Access Key / Secret Key\` дальше используются в AWS CLI, boto3, AWS SDK for JavaScript и других клиентах
|
||||||
|
|
||||||
Важно:
|
Важно:
|
||||||
- `Secret Key` показывается только один раз, его нужно сохранить
|
- \`Secret Key\` показывается только один раз, его нужно сохранить
|
||||||
- для AWS CLI и SDK нужен не UI token, а именно выданные сервисом `Access Key / Secret Key`
|
- для AWS CLI и SDK нужен не UI token, а именно выданные сервисом \`Access Key / Secret Key\`
|
||||||
|
|
||||||
Примеры ниже можно запускать либо с demo credentials, либо со своими tenant credentials.
|
Примеры ниже можно запускать либо с demo credentials, либо со своими tenant credentials.
|
||||||
|
|
||||||
@@ -97,6 +130,7 @@ ENDPOINT="--endpoint-url https://qu.kube5s.ru"
|
|||||||
|
|
||||||
### Создать очередь
|
### Создать очередь
|
||||||
|
|
||||||
|
```bash
|
||||||
```bash
|
```bash
|
||||||
aws sqs create-queue --queue-name demo-queue $ENDPOINT
|
aws sqs create-queue --queue-name demo-queue $ENDPOINT
|
||||||
```
|
```
|
||||||
@@ -228,3 +262,11 @@ AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... bash hardcore_test.sh
|
|||||||
Краткий пользовательский summary лежит в файле `BENCHMARK-COMPARISON.md`.
|
Краткий пользовательский summary лежит в файле `BENCHMARK-COMPARISON.md`.
|
||||||
|
|
||||||
Ключевой вывод: shared-SQS показывает конкурентоспособные результаты относительно Yandex MQ и покрывает полный набор заявленных пользовательских сценариев.
|
Ключевой вывод: shared-SQS показывает конкурентоспособные результаты относительно Yandex MQ и покрывает полный набор заявленных пользовательских сценариев.
|
||||||
|
|
||||||
|
## Self-hosted — развернуть у себя
|
||||||
|
|
||||||
|
Если хотите запустить shared-SQS в собственном Kubernetes-кластере — см. [deploy/README.md](deploy/README.md).
|
||||||
|
|
||||||
|
> **Деплой через AI-агента** — в репозитории есть [AGENTS.md](AGENTS.md): машиночитаемая пошаговая инструкция.
|
||||||
|
> Если AI-агент встроен в вашу среду разработки (Copilot, Cursor, Claude Dev и др.) — он найдёт файл сам и проведёт весь деплой.
|
||||||
|
> Если нет — просто скопируйте содержимое [AGENTS.md](AGENTS.md) в любой веб-чат (ChatGPT, Claude и др.) и AI пошагово поможет вам задеплоить.
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Chart.yaml — Helm chart для shared-sqs (multi-tenant SQS-compatible message queue)
|
||||||
|
# Created: 2026-04-11
|
||||||
|
# Updated: 2026-04-12 09:57 MSK — appVersion v0.1.22
|
||||||
|
apiVersion: v2
|
||||||
|
name: shared-sqs
|
||||||
|
description: Multi-tenant AWS SQS-compatible message queue service
|
||||||
|
type: application
|
||||||
|
version: 0.1.0
|
||||||
|
appVersion: "0.1.22"
|
||||||
@@ -0,0 +1,161 @@
|
|||||||
|
# shared-sqs — Self-hosted Helm Chart
|
||||||
|
|
||||||
|
Этот Helm-чарт разворачивает [shared-sqs](https://gitea.services.ngcloud.ru/Nail/shared-SQS) — AWS SQS-совместимый сервис очередей — в вашем Kubernetes-кластере.
|
||||||
|
|
||||||
|
После деплоя клиенты подключаются через стандартный AWS SDK / CLI, меняя только `endpoint_url` на ваш домен.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Что потребуется заранее
|
||||||
|
|
||||||
|
| Компонент | Зачем | Примечание |
|
||||||
|
|-----------|-------|------------|
|
||||||
|
| Kubernetes кластер | Платформа | Любой вариант: k3s, EKS, GKE, bare-metal |
|
||||||
|
| **Redis ≥ 6** | Хранит все очереди и сообщения | Внешний или задеплоенный в кластер |
|
||||||
|
| **Ingress NGINX** | Принимает внешние HTTP/HTTPS запросы | `helm install ingress-nginx ingress-nginx/ingress-nginx` |
|
||||||
|
| **cert-manager** | Автоматически выпускает TLS-сертификат | `helm install cert-manager jetstack/cert-manager --set installCRDs=true` |
|
||||||
|
| **DNS-запись** | Связывает ваш домен с кластером | A-запись домена → External IP вашего ingress-контроллера |
|
||||||
|
| PostgreSQL *(опционально)* | Биллинг — учёт операций | Если не нужен — `billing.enabled: false` |
|
||||||
|
|
||||||
|
Узнать External IP ingress-контроллера:
|
||||||
|
```bash
|
||||||
|
kubectl get svc -n ingress-nginx ingress-nginx-controller
|
||||||
|
# Смотрите колонку EXTERNAL-IP
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Деплой через AI-агента
|
||||||
|
|
||||||
|
В корне репозитория есть файл [AGENTS.md](../AGENTS.md) — машиночитаемая инструкция для AI-агентов.
|
||||||
|
|
||||||
|
**Если AI-агент встроен в вашу среду** (Copilot, Cursor, Claude Dev, OpenAI Codex и др.) — он найдёт `AGENTS.md` сам, запросит у вас нужные параметры (Redis, домен, токен) и проведёт весь деплой без вашего участия.
|
||||||
|
|
||||||
|
**Если AI-агента нет** — просто откройте [AGENTS.md](../AGENTS.md), скопируйте его содержимое целиком и вставьте в любой веб-чат (ChatGPT, Claude, Gemini). AI увидит пошаговый сценарий, спросит ваши параметры и поможет всё задеплоить.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Установка вручную
|
||||||
|
|
||||||
|
### 1. Клонируйте репозиторий
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://gitea.services.ngcloud.ru/Nail/shared-SQS.git
|
||||||
|
cd shared-SQS
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Отредактируйте `deploy/values.yaml`
|
||||||
|
|
||||||
|
Обязательно заполните:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
redis:
|
||||||
|
addr: "ваш-redis-хост:6379"
|
||||||
|
password: "ваш-redis-пароль"
|
||||||
|
|
||||||
|
admin:
|
||||||
|
token: "придумайте-любой-токен" # например: openssl rand -hex 20
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
host: "sqs.ваш-домен.com"
|
||||||
|
```
|
||||||
|
|
||||||
|
Если PostgreSQL не нужен — оставьте `billing.enabled: false`.
|
||||||
|
|
||||||
|
### 3. Задеплойте
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm install shared-sqs ./deploy -n shared-sqs --create-namespace
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Проверьте что всё поднялось
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Под должен быть Running и Ready
|
||||||
|
kubectl get pods -n shared-sqs
|
||||||
|
|
||||||
|
# Сервис должен ответить OK
|
||||||
|
curl https://sqs.ваш-домен.com/health
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Параметры values.yaml
|
||||||
|
|
||||||
|
| Параметр | Описание | Пример |
|
||||||
|
|----------|----------|--------|
|
||||||
|
| `namespace` | Kubernetes namespace | `shared-sqs` |
|
||||||
|
| `image.tag` | Версия образа | `v0.1.24` |
|
||||||
|
| `redis.addr` | Адрес Redis в формате `host:port` | `redis.default.svc:6379` |
|
||||||
|
| `redis.user` | Redis-пользователь (обычно `default`) | `default` |
|
||||||
|
| `redis.password` | Пароль Redis | — |
|
||||||
|
| `admin.token` | Токен для Admin API (`/admin/*`) | любая строка |
|
||||||
|
| `seedDemo` | Создать demo-тенанта при старте | `true` / `false` |
|
||||||
|
| `resources` | CPU и Memory лимиты пода | см. defaults |
|
||||||
|
| `ingress.enabled` | Включить Ingress | `true` |
|
||||||
|
| `ingress.className` | Ingress класс | `nginx` |
|
||||||
|
| `ingress.host` | Домен сервиса | `sqs.example.com` |
|
||||||
|
| `ingress.annotations` | Аннотации (cert-manager, timeouts) | см. defaults |
|
||||||
|
| `ingress.tls.enabled` | Включить TLS через cert-manager | `true` |
|
||||||
|
| `ingress.tls.secretName` | Имя Secret для TLS-сертификата | `shared-sqs-tls` |
|
||||||
|
| `billing.enabled` | Включить запись статистики в PostgreSQL | `false` |
|
||||||
|
| `billing.postgres.*` | Параметры подключения к PostgreSQL | — |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Admin API — создание тенантов
|
||||||
|
|
||||||
|
После деплоя сервис готов принимать SQS-запросы, но для этого нужен тенант с credentials.
|
||||||
|
|
||||||
|
### Создать тенанта
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s -X POST https://sqs.ваш-домен.com/admin/tenants \
|
||||||
|
-H "Authorization: Bearer ВАШ_ADMIN_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"name": "my-tenant"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
Ответ:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "my-tenant",
|
||||||
|
"access_key": "SSAK-...",
|
||||||
|
"secret_key": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Сохраните `secret_key`** — он показывается только один раз.
|
||||||
|
|
||||||
|
### Использовать credentials в AWS CLI
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export AWS_ACCESS_KEY_ID="SSAK-..."
|
||||||
|
export AWS_SECRET_ACCESS_KEY="..."
|
||||||
|
export AWS_DEFAULT_REGION="us-east-1"
|
||||||
|
ENDPOINT="--endpoint-url https://sqs.ваш-домен.com"
|
||||||
|
|
||||||
|
aws sqs create-queue --queue-name my-queue $ENDPOINT
|
||||||
|
aws sqs send-message --queue-url "..." --message-body "Hello" $ENDPOINT
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Обновление
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm upgrade shared-sqs ./deploy -n shared-sqs
|
||||||
|
```
|
||||||
|
|
||||||
|
## Удаление
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm uninstall shared-sqs -n shared-sqs
|
||||||
|
kubectl delete namespace shared-sqs
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Полная документация
|
||||||
|
|
||||||
|
Использование сервиса (AWS CLI, boto3, Node.js) — в [основном README](../README.md).
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{{/*
|
||||||
|
_helpers.tpl — общие хелперы для shared-sqs Helm chart
|
||||||
|
Created: 2026-04-11
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{/* Полное имя релиза */}}
|
||||||
|
{{- define "shared-sqs.fullname" -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Общие labels */}}
|
||||||
|
{{- define "shared-sqs.labels" -}}
|
||||||
|
app: shared-sqs
|
||||||
|
app.kubernetes.io/name: shared-sqs
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Selector labels */}}
|
||||||
|
{{- define "shared-sqs.selectorLabels" -}}
|
||||||
|
app: shared-sqs
|
||||||
|
app.kubernetes.io/name: shared-sqs
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
# deployment.yaml — Deployment shared-sqs с RollingUpdate
|
||||||
|
# Created: 2026-04-11
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: shared-sqs
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "shared-sqs.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
strategy:
|
||||||
|
type: RollingUpdate
|
||||||
|
rollingUpdate:
|
||||||
|
maxSurge: 1
|
||||||
|
maxUnavailable: 0
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "shared-sqs.selectorLabels" . | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "shared-sqs.selectorLabels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: shared-sqs
|
||||||
|
image: "naeel/shared-sqs:{{ .Values.image.tag }}"
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
ports:
|
||||||
|
- containerPort: 4100
|
||||||
|
name: http
|
||||||
|
env:
|
||||||
|
- name: SHARED_SQS_ADMIN_TOKEN
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: shared-sqs-admin
|
||||||
|
key: token
|
||||||
|
- name: SHARED_SQS_SEED_DEMO
|
||||||
|
value: {{ .Values.seedDemo | quote }}
|
||||||
|
- name: REDIS_ADDR
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: shared-sqs-redis
|
||||||
|
key: addr
|
||||||
|
- name: REDIS_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: shared-sqs-redis
|
||||||
|
key: user
|
||||||
|
- name: REDIS_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: shared-sqs-redis
|
||||||
|
key: password
|
||||||
|
{{- if .Values.billing.enabled }}
|
||||||
|
- name: BILLING_PG_HOST
|
||||||
|
value: {{ .Values.billing.postgres.host | quote }}
|
||||||
|
- name: BILLING_PG_PORT
|
||||||
|
value: {{ .Values.billing.postgres.port | quote }}
|
||||||
|
- name: BILLING_PG_DATABASE
|
||||||
|
value: {{ .Values.billing.postgres.database | quote }}
|
||||||
|
- name: BILLING_PG_USER
|
||||||
|
value: {{ .Values.billing.postgres.user | quote }}
|
||||||
|
- name: BILLING_PG_SSLMODE
|
||||||
|
value: {{ .Values.billing.postgres.sslmode | quote }}
|
||||||
|
- name: BILLING_PG_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: shared-sqs-billing-pg
|
||||||
|
key: password
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.resources | nindent 10 }}
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: 4100
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 10
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: 4100
|
||||||
|
initialDelaySeconds: 3
|
||||||
|
periodSeconds: 5
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# ingress.yaml — Ingress для shared-sqs (условный, включается через values)
|
||||||
|
# Created: 2026-04-11
|
||||||
|
{{- if .Values.ingress.enabled }}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: shared-sqs-ingress
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "shared-sqs.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
ingressClassName: {{ .Values.ingress.className }}
|
||||||
|
rules:
|
||||||
|
- host: {{ .Values.ingress.host }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: shared-sqs
|
||||||
|
port:
|
||||||
|
number: 4100
|
||||||
|
{{- if .Values.ingress.tls.enabled }}
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- {{ .Values.ingress.host }}
|
||||||
|
secretName: {{ .Values.ingress.tls.secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{{/*
|
||||||
|
namespace.yaml — не создаём namespace из чарта,
|
||||||
|
т.к. он может уже существовать (managed платформой или вручную).
|
||||||
|
Создавать namespace перед helm install:
|
||||||
|
kubectl create namespace {{ .Values.namespace }}
|
||||||
|
Created: 2026-04-11
|
||||||
|
*/}}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# secret-admin.yaml — Secret с admin токеном
|
||||||
|
# Created: 2026-04-11
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: shared-sqs-admin
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "shared-sqs.labels" . | nindent 4 }}
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
token: {{ .Values.admin.token | quote }}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# secret-billing.yaml — Secret с PostgreSQL credentials для billing
|
||||||
|
# Создаётся только если billing.enabled=true и existingSecret не указан
|
||||||
|
# Created: 2026-04-12
|
||||||
|
{{- if and .Values.billing.enabled (not .Values.billing.postgres.existingSecret) }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: shared-sqs-billing-pg
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "shared-sqs.labels" . | nindent 4 }}
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
password: {{ required "billing.postgres.password is required when billing is enabled" .Values.billing.postgres.password | quote }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# secret-redis.yaml — Secret с Redis credentials (addr + user + password)
|
||||||
|
# Created: 2026-04-11
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: shared-sqs-redis
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "shared-sqs.labels" . | nindent 4 }}
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
addr: {{ .Values.redis.addr | quote }}
|
||||||
|
user: {{ .Values.redis.user | quote }}
|
||||||
|
password: {{ .Values.redis.password | quote }}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# service.yaml — Service для shared-sqs
|
||||||
|
# Created: 2026-04-11
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: shared-sqs
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "shared-sqs.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
{{- include "shared-sqs.selectorLabels" . | nindent 4 }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 4100
|
||||||
|
targetPort: 4100
|
||||||
|
protocol: TCP
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
# values.yaml — параметры деплоя shared-sqs
|
||||||
|
# Updated: 2026-04-13
|
||||||
|
#
|
||||||
|
# ЧТО ЭТО:
|
||||||
|
# shared-sqs — AWS SQS-совместимый сервис очередей сообщений для Kubernetes.
|
||||||
|
# Работает как замена Amazon SQS: клиенты используют стандартный AWS SDK/CLI,
|
||||||
|
# просто указывая свой endpoint вместо amazonaws.com.
|
||||||
|
#
|
||||||
|
# ЧТО НУЖНО ЗАРАНЕЕ:
|
||||||
|
# 1. Redis — для хранения очередей и сообщений (любой Redis ≥ 6)
|
||||||
|
# 2. PostgreSQL — для биллинга (можно отключить: billing.enabled: false)
|
||||||
|
# 3. Ingress NGINX — установлен в кластере (принимает внешние запросы)
|
||||||
|
# 4. cert-manager — для автовыпуска TLS-сертификата (letsencrypt)
|
||||||
|
# 5. DNS-запись — ваш домен должен указывать на IP ingress-контроллера
|
||||||
|
#
|
||||||
|
# КАК ДЕПЛОИТЬ:
|
||||||
|
# helm install shared-sqs ./deploy -n shared-sqs --create-namespace
|
||||||
|
#
|
||||||
|
# КАК ОБНОВИТЬ:
|
||||||
|
# helm upgrade shared-sqs ./deploy -n shared-sqs
|
||||||
|
|
||||||
|
# Namespace в Kubernetes куда будет задеплоен сервис
|
||||||
|
namespace: shared-sqs
|
||||||
|
|
||||||
|
# Версия образа сервиса
|
||||||
|
image:
|
||||||
|
tag: "v0.1.24"
|
||||||
|
|
||||||
|
# Redis — хранит все очереди и сообщения.
|
||||||
|
# addr: адрес в формате host:port (внутренний K8s DNS или внешний IP)
|
||||||
|
# user: Redis-пользователь (по умолчанию "default" — стандартный встроенный пользователь Redis)
|
||||||
|
redis:
|
||||||
|
addr: "rfrm-redisk8s.54467f74-67f5-4ca7-9b4a-bdd50e8c23d6.svc:6379"
|
||||||
|
user: "default"
|
||||||
|
password: "your-redis-password"
|
||||||
|
|
||||||
|
# Ingress — домен и TLS сертификат
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
host: "qu.kube5s.ru"
|
||||||
|
tls:
|
||||||
|
enabled: true
|
||||||
|
issuer: "letsencrypt-prod"
|
||||||
|
|
||||||
|
# Токен для административного API (/admin/*).
|
||||||
|
# Используется для создания тенантов и управления ими.
|
||||||
|
admin:
|
||||||
|
token: "sqs-admin-7a7d8bd0c060a75c198d48680f34077a"
|
||||||
|
|
||||||
|
# Создать demo-тенанта при первом старте (удобно для проверки работы).
|
||||||
|
# В продакшне можно поставить false.
|
||||||
|
seedDemo: true
|
||||||
|
|
||||||
|
# Лимиты ресурсов для пода. Для начала этих значений достаточно.
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "64Mi"
|
||||||
|
cpu: "50m"
|
||||||
|
limits:
|
||||||
|
memory: "256Mi"
|
||||||
|
cpu: "500m"
|
||||||
|
|
||||||
|
# PostgreSQL — для биллинга
|
||||||
|
billing:
|
||||||
|
enabled: true
|
||||||
|
postgres:
|
||||||
|
host: "postgresqlk8s-master.dc5db45d-f8b4-4fd0-ad33-ec4dd017f2d5.svc.cluster.local"
|
||||||
|
port: 5432
|
||||||
|
database: "sqsdb"
|
||||||
|
user: "super"
|
||||||
|
sslmode: "require"
|
||||||
|
password: "your-postgres-password"
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# .env.local.example — Переопределения параметров тестов
|
||||||
|
# Скопируй в .env.local и измени значения если нужно
|
||||||
|
|
||||||
|
# Переопределить endpoint SQS (если другой домен)
|
||||||
|
# BASE_URL="https://my-custom-sqs.example.com"
|
||||||
|
|
||||||
|
# Переопределить admin token (если другой токен)
|
||||||
|
# ADMIN_TOKEN="my-custom-admin-token-123"
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
# Tests Deploy
|
||||||
|
|
||||||
|
Скрипты для verification и testing development deployment shared-SQS.
|
||||||
|
|
||||||
|
## ⚠️ ПЕРЕД ТЕСТАМИ: Деплой сервиса
|
||||||
|
|
||||||
|
### Шаг 1: Заполнить параметры
|
||||||
|
|
||||||
|
Отредактировать `deploy/values.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
redis:
|
||||||
|
addr: "your-redis-host:6379" # где Redis
|
||||||
|
user: "default"
|
||||||
|
password: "your-redis-password"
|
||||||
|
|
||||||
|
admin:
|
||||||
|
token: "sqs-admin-..." # токен для admin API
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
host: "your-domain.com" # домен для доступа к SQS
|
||||||
|
|
||||||
|
billing:
|
||||||
|
postgres:
|
||||||
|
host: "your-postgres-host" # где PostgreSQL
|
||||||
|
password: "your-postgres-password"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Шаг 2: Деплоить через Helm
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Из корня репозитория
|
||||||
|
helm install shared-sqs ./deploy \
|
||||||
|
-n shared-sqs \
|
||||||
|
--create-namespace
|
||||||
|
|
||||||
|
# Проверить что pod running
|
||||||
|
kubectl -n shared-sqs get pod
|
||||||
|
```
|
||||||
|
|
||||||
|
### Шаг 3: Когда pod ready (1/1) — запускать тесты
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd tests-deploy
|
||||||
|
bash run.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Быстрые тесты (7 операций SQS, ~30 сек)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd tests-deploy
|
||||||
|
bash run.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
**Что тестируется:**
|
||||||
|
- CreateQueue, DeleteQueue
|
||||||
|
- ListQueues, GetQueueUrl
|
||||||
|
- SendMessage, ReceiveMessage
|
||||||
|
- DeleteMessage
|
||||||
|
|
||||||
|
## Полный набор тестов (18 операций, batch, visibility, tags)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd tests-deploy
|
||||||
|
bash stress.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
**Дополнительно тестируется:**
|
||||||
|
- GetQueueAttributes, SetQueueAttributes
|
||||||
|
- TagQueue, ListQueueTags, UntagQueue
|
||||||
|
- ChangeMessageVisibility, ChangeMessageVisibilityBatch
|
||||||
|
- SendMessageBatch, ReceiveMessage batch
|
||||||
|
- DeleteMessageBatch
|
||||||
|
- PurgeQueue
|
||||||
|
|
||||||
|
## Как это работает
|
||||||
|
|
||||||
|
### Автоматическое извлечение параметров
|
||||||
|
|
||||||
|
`run.sh` и `stress.sh` автоматически читают параметры из `deploy/values.yaml`:
|
||||||
|
- `ingress.host` → BASE_URL для API
|
||||||
|
- `admin.token` → ADMIN_TOKEN
|
||||||
|
- Используются demo credentials для SQS операций (встроены)
|
||||||
|
|
||||||
|
### Проверка доступности
|
||||||
|
|
||||||
|
Перед запуском тестов скрипты проверяют доступность сервиса через `curl /health`.
|
||||||
|
|
||||||
|
### Override параметров
|
||||||
|
|
||||||
|
Если нужно использовать свои значения, создайте `.env.local`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# .env.local
|
||||||
|
export BASE_URL="https://your-domain.com"
|
||||||
|
export AWS_ACCESS_KEY_ID="your-access-key"
|
||||||
|
export AWS_SECRET_ACCESS_KEY="your-secret-key"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Файлы
|
||||||
|
|
||||||
|
- `run.sh` — запуск quick тестов
|
||||||
|
- `stress.sh` — запуск полного набора
|
||||||
|
- `quick.sh` — alias для run.sh
|
||||||
|
- `README.md` — эта инструкция
|
||||||
|
- `.env.local.example` — пример override-файла
|
||||||
|
|
||||||
|
## Требования
|
||||||
|
|
||||||
|
- bash 4.0+
|
||||||
|
- curl
|
||||||
|
- aws-cli
|
||||||
|
- Депложенный shared-SQS с ingress доступом
|
||||||
|
- kubectl (для проверки пода)
|
||||||
|
|
||||||
|
## Результаты
|
||||||
|
|
||||||
|
**Успехом считается:**
|
||||||
|
- PASS=7 FAIL=0 для quick tests
|
||||||
|
- PASS=18 FAIL=0 для stress tests
|
||||||
|
|
||||||
|
После тестов очереди автоматически удаляются.
|
||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# quick.sh — запуск быстрых тестов (7 основных операций SQS)
|
||||||
|
|
||||||
|
REPO_ROOT="$(dirname "$(cd "$(dirname "$0")" && pwd)")"
|
||||||
|
"$REPO_ROOT/tests-deploy/run.sh" 2>&1
|
||||||
Executable
+82
@@ -0,0 +1,82 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# run.sh — запуск тестов shared-sqs для verification деплоя
|
||||||
|
# 2026-04-13 — автоматическое извлечение параметров из deploy/values.yaml
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "shared-sqs Тесты"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Переход в корневую папку репозитория (parent от tests-deploy/)
|
||||||
|
REPO_ROOT="$(dirname "$(cd "$(dirname "$0")" && pwd)")"
|
||||||
|
VALUES_FILE="$REPO_ROOT/deploy/values.yaml"
|
||||||
|
QUICK_TEST="$REPO_ROOT/quick_test.sh"
|
||||||
|
ENV_LOCAL="$REPO_ROOT/tests-deploy/.env.local"
|
||||||
|
|
||||||
|
# Функция для извлечения параметров из YAML
|
||||||
|
extract_param() {
|
||||||
|
local file="$1"
|
||||||
|
local key="$2"
|
||||||
|
grep "$key:" "$file" | head -1 | sed -n "s/.*$key: \"\([^\"]*\).*/\1/p"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция для извлечения nested параметров (ingress.host)
|
||||||
|
extract_nested() {
|
||||||
|
local file="$1"
|
||||||
|
local section="$2"
|
||||||
|
local key="$3"
|
||||||
|
grep -A5 "^$section:" "$file" | grep "$key:" | sed -n "s/.*$key: \"\([^\"]*\).*/\1/p"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Проверка наличия файлов
|
||||||
|
if [ ! -f "$VALUES_FILE" ]; then
|
||||||
|
echo "❌ Ошибка: не найден $VALUES_FILE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$QUICK_TEST" ]; then
|
||||||
|
echo "❌ Ошибка: не найден $QUICK_TEST"
|
||||||
|
echo " Ожидался: $QUICK_TEST"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Читаю параметры из deploy/values.yaml..."
|
||||||
|
|
||||||
|
# Извлечение параметров
|
||||||
|
INGRESS_HOST=$(extract_nested "$VALUES_FILE" "ingress" "host")
|
||||||
|
ADMIN_TOKEN=$(extract_param "$VALUES_FILE" "token")
|
||||||
|
|
||||||
|
# Demo credentials — для ознакомительного тестирования
|
||||||
|
AWS_ACCESS_KEY_ID="SSAK-demo-shared-sqs"
|
||||||
|
AWS_SECRET_ACCESS_KEY="demo-secret-key-shared-sqs-ngcloud-2026"
|
||||||
|
AWS_DEFAULT_REGION="us-east-1"
|
||||||
|
BASE_URL="https://$INGRESS_HOST"
|
||||||
|
|
||||||
|
# Override из .env.local (если существует)
|
||||||
|
if [ -f "$ENV_LOCAL" ]; then
|
||||||
|
echo " → Загружу override из .env.local"
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
source "$ENV_LOCAL"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Параметры загружены:"
|
||||||
|
echo " BASE_URL: $BASE_URL"
|
||||||
|
echo " ADMIN_TOKEN: ${ADMIN_TOKEN:0:20}..."
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Проверка доступности сервиса
|
||||||
|
echo "🔍 Проверяю доступность..."
|
||||||
|
if ! curl -sf "$BASE_URL/health" > /dev/null 2>&1; then
|
||||||
|
echo "❌ Сервис недоступен по $BASE_URL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "✅ Сервис доступен"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Запуск тестов
|
||||||
|
echo "════════════════════════════════════════════"
|
||||||
|
echo "🚀 Запускаю quick_test.sh..."
|
||||||
|
echo "════════════════════════════════════════════"
|
||||||
|
|
||||||
|
export BASE_URL ADMIN_TOKEN AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION
|
||||||
|
bash "$QUICK_TEST"
|
||||||
Executable
+42
@@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# stress.sh — запуск полного набора тестов (18+ операций, batch operations, visibility change)
|
||||||
|
|
||||||
|
REPO_ROOT="$(dirname "$(cd "$(dirname "$0")" && pwd)")"
|
||||||
|
VALUES_FILE="$REPO_ROOT/deploy/values.yaml"
|
||||||
|
HARDCORE_TEST="$REPO_ROOT/hardcore_test.sh"
|
||||||
|
|
||||||
|
# Извлечение параметров (скопировано из run.sh)
|
||||||
|
extract_param() {
|
||||||
|
local file="$1"
|
||||||
|
local key="$2"
|
||||||
|
grep "$key:" "$file" | head -1 | sed -n "s/.*$key: \"\([^\"]*\).*/\1/p"
|
||||||
|
}
|
||||||
|
|
||||||
|
extract_nested() {
|
||||||
|
local file="$1"
|
||||||
|
local section="$2"
|
||||||
|
local key="$3"
|
||||||
|
grep -A5 "^$section:" "$file" | grep "$key:" | sed -n "s/.*$key: \"\([^\"]*\).*/\1/p"
|
||||||
|
}
|
||||||
|
|
||||||
|
INGRESS_HOST=$(extract_nested "$VALUES_FILE" "ingress" "host")
|
||||||
|
ADMIN_TOKEN=$(extract_param "$VALUES_FILE" "token")
|
||||||
|
|
||||||
|
AWS_ACCESS_KEY_ID="SSAK-demo-shared-sqs"
|
||||||
|
AWS_SECRET_ACCESS_KEY="demo-secret-key-shared-sqs-ngcloud-2026"
|
||||||
|
AWS_DEFAULT_REGION="us-east-1"
|
||||||
|
BASE_URL="https://$INGRESS_HOST"
|
||||||
|
|
||||||
|
# Override из .env.local
|
||||||
|
ENV_LOCAL="$REPO_ROOT/tests-deploy/.env.local"
|
||||||
|
if [ -f "$ENV_LOCAL" ]; then
|
||||||
|
source "$ENV_LOCAL"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "════════════════════════════════════════════"
|
||||||
|
echo "🧪 Полный набор тестов (stress)"
|
||||||
|
echo "════════════════════════════════════════════"
|
||||||
|
echo
|
||||||
|
|
||||||
|
export BASE_URL ADMIN_TOKEN AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION
|
||||||
|
bash "$HARDCORE_TEST"
|
||||||
Reference in New Issue
Block a user