Files
Simulators/README.ru.md
T
inecs a3ce2d473c 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.
2026-07-18 11:52:33 +03:00

6.0 KiB
Raw Blame History

Language / Язык: English | Русский

Лаборатория 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.

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:

docker compose pull
docker compose up -d

При первом старте БД создаются из docker/postgres-init (только на пустом volume postgres-data). Seed выполняется один раз после готовности каждого симулятора.

Закрепить тег образа:

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

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/
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:

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-postgresmigrate (идемпотентно; ничего не делает, если схема уже актуальна).
  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
make push   # stage all → многострочное сообщение (конец — Ctrl-D) → push origin

Тот же UX, что в proxmox_api_simulator.


Только лабораторные defaults — не выставляйте стек в публичный Интернет без смены секретов (ticketSigningKey, пароли БД, хосты Ingress).