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.
6.0 KiB
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
Как стартует чарт
- Namespace — создаётся из
values.namespace, еслиnamespaceCreate: true. - PostgreSQL — StatefulSet + init SQL на четыре БД симуляторов.
- Симуляторы — Deployments с init-контейнерами:
wait-postgres→migrate(идемпотентно; ничего не делает, если схема уже актуальна).
- Seed — Jobs post-install / post-upgrade на каждый симулятор.
- Job ждёт ready приложения, затем сидирует.
seed.skipIfSqlпропускает seed, если в БД уже есть лабораторные данные.
- 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.gitssh://git@git.antropoff.ru:30022/DevOpsTools/Simulators.git
make push # stage all → многострочное сообщение (конец — Ctrl-D) → push origin
Тот же UX, что в proxmox_api_simulator.
Только лабораторные defaults — не выставляйте стек в публичный Интернет без смены
секретов (ticketSigningKey, пароли БД, хосты Ingress).