Files
inecs feb32e1285 Keep simulator API error bodies through Ingress instead of branded HTML.
Disable ingress-nginx intercept for 404/405 on all lab Ingresses and document
how to verify JSON/XML responses after upgrade.
2026-07-22 07:03:39 +03:00

171 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
**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`).
- На каждом Ingress стоят `proxy-intercept-errors: "false"` и
`custom-http-errors: "502,503"`, чтобы кластерный брендированный HTML
(например «DevOps спит») не подменял JSON/XML симулятора на 404/405/401.
**Не** добавляйте 404/405 в `custom-http-errors`. После `helm upgrade`
проверьте: `curl -sH 'Accept: application/json' https://<host>/…`
ожидайте тело ошибки API, не HTML. Если HTML остаётся — править
controller-level `custom-http-errors` у ingress-nginx (вне этого чарта).
---
## 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).