Add self-contained API simulators lab with Compose and Helm.

Ship Proxmox, oVirt, VMware, and OpenStack behind one Postgres stack,
Makefile helpers (up/clean/helm up|down/push), and a Helm chart with
namespace, Let's Encrypt ingresses, migrate inits, and skip-if-seeded jobs.
This commit is contained in:
2026-07-18 11:52:33 +03:00
commit a3ce2d473c
24 changed files with 1960 additions and 0 deletions
+163
View File
@@ -0,0 +1,163 @@
**Language / Язык:** [English](README.md) | [Русский](README.ru.md)
# Лаборатория API-симуляторов (автономная)
Четыре опубликованных симулятора и один PostgreSQL. Исходники репозиториев не нужны.
Локально — Docker Compose; в Kubernetes — Helm-чарт.
## Структура
```
simulators/
Makefile
docker-compose.yml
docker/
postgres-init/01-simulators.sql
tls/server.{crt,key} # общие lab TLS для Compose gateway
ovirt/ovirt-engine.conf
vmware/vmware-ports.conf
openstack/openstack-ports.conf
charts/api-simulators-lab/ # Helm: все четыре симулятора + Ingress
```
Образы: `inecs/proxmox-api-simulator`, `inecs/ovirt-api-simulator`,
`inecs/vmware-api-simulator`, `inecs/openstack-api-simulator`.
---
## Docker Compose
Данные Postgres — в Compose volume `postgres-data`.
```bash
cd /Users/inecs/Разработка/simulators
make help
make up # pull → migrate → apps → seed; печатает URL
make urls # снова вывести Compose-эндпоинты
make logs # или: make logs SERVICE=proxmox
make restart
make down # остановить контейнеры, volume БД сохранить
make clean # остановить + удалить volumes, мусор и сети проекта
make shell # или: make shell SERVICE=ovirt
make push # git add . → многострочный commit (Ctrl-D) → push origin
```
`make up` гоняет migrate/seed через `docker compose run --rm` (profile `init`),
поэтому эти контейнеры не остаются в статусе `Exited`.
Эквивалент через Compose:
```bash
docker compose pull
docker compose up -d
```
При первом старте БД создаются из `docker/postgres-init` (только на пустом
volume `postgres-data`). Seed выполняется один раз после готовности каждого симулятора.
Закрепить тег образа:
```bash
IMAGE_TAG=0.1.0 docker compose up -d
# или: IMAGE_TAG=0.1.0 make up
```
### Compose-эндпоинты
| Симулятор | URL |
|---|---|
| Proxmox | http://localhost:8006/ |
| oVirt Engine | https://localhost:7443/ |
| oVirt Web UI | http://localhost:7500/ |
| VMware (HTTPS) | https://localhost:8443/ |
| VMware (HTTP) | http://localhost:8081/ |
| OpenStack Keystone | http://localhost:9500/ |
| OpenStack Nova | http://localhost:8774/ |
| OpenStack HTTPS | https://localhost:9443/ |
| PostgreSQL | `127.0.0.1:5432` (пользователь `lab` / `lab`) |
### Сброс БД Compose
```bash
make clean
make up
# или: docker compose down -v && docker compose up -d
```
---
## Kubernetes (Helm)
Чарт: `charts/api-simulators-lab`.
Перед деплоем настройте: `charts/api-simulators-lab/values.yaml`
| Ключ | Назначение |
|---|---|
| `namespace` | Целевой namespace (`simulators` по умолчанию; `namespaceCreate: true`) |
| `ingresses` | Хосты, TLS secrets, annotations (по одному Ingress на запись) |
| `certManager` | Let's Encrypt через cert-manager (`letsencrypt-prod`) |
| `imageTag` / секреты / `postgres.persistence` | Образы, ключи, PVC |
Хосты Ingress по умолчанию (для Let's Encrypt замените на публичный DNS):
| Симулятор | Host |
|---|---|
| Proxmox | https://proxmox.lab.local/ |
| oVirt | https://ovirt.lab.local/ |
| VMware | https://vmware.lab.local/ |
| OpenStack | https://openstack.lab.local/ |
```bash
make helm up # предупреждение → подтверждение [y/N] → helm upgrade --install
make helm down # uninstall релиза
make helm-urls # хосты Ingress из values
make helm-template
make helm-lint
```
Без подтверждения (CI): `make helm-up HELM_YES=1`
Сменить namespace без правки файла: `HELM_NAMESPACE=other make helm-up`
Эквивалент Helm:
```bash
helm upgrade --install simulators charts/api-simulators-lab \
--namespace simulators --create-namespace --wait
```
### Как стартует чарт
1. **Namespace** — создаётся из `values.namespace`, если `namespaceCreate: true`.
2. **PostgreSQL** — StatefulSet + init SQL на четыре БД симуляторов.
3. **Симуляторы** — Deployments с init-контейнерами:
- `wait-postgres``migrate` (идемпотентно; ничего не делает, если схема уже актуальна).
4. **Seed** — Jobs post-install / post-upgrade на каждый симулятор.
- Job ждёт ready приложения, затем сидирует.
- `seed.skipIfSql` пропускает seed, если в БД уже есть лабораторные данные.
5. **Ingress** — TLS через аннотацию cert-manager `cert-manager.io/cluster-issuer`.
- `certManager.createClusterIssuer: true` и `certManager.email` — создать
ClusterIssuer из чарта; иначе ожидается уже существующий `letsencrypt-prod`.
- Let's Encrypt HTTP-01 требует **публичный DNS** на Ingress-контроллер
(не `*.lab.local`).
---
## Git
`origin` пушит в оба remote (как у остальных симуляторов):
- `git@github.com:sergeyantropoff/simulators.git`
- `ssh://git@git.antropoff.ru:30022/DevOpsTools/Simulators.git`
```bash
make push # stage all → многострочное сообщение (конец — Ctrl-D) → push origin
```
Тот же UX, что в `proxmox_api_simulator`.
---
Только лабораторные defaults — не выставляйте стек в публичный Интернет без смены
секретов (`ticketSigningKey`, пароли БД, хосты Ingress).