Persist aggregates and server security groups in domain tables, add Cinder quota show from DB-backed defaults, align unit tests with OpenStack series, auto-pick Keystone :5000/:15000 for smoke, and document test locations plus 6514/6514 results.
9.3 KiB
Language / Язык: English | Русский
openstack-api-simulator
Лабораторный stateful-симулятор OpenStack API: аутентификация Keystone, multi-port шлюз на стандартных портах OpenStack, специализированные обработчики Nova/Neutron/Glance/Cinder/Heat/Swift/Ironic/Octavia и schema-complete покрытие остальных сервисов каталога (Yoga → Dalmatian).
Быстрый старт (Compose)
Опубликованный образ (Docker Hub)
Клонируйте репозиторий (nginx-конфиг api-gateway и лабораторные TLS-файлы
монтируются из ./docker/), затем скачайте и запустите опубликованный
runtime-образ — без локальной сборки приложения:
git clone https://github.com/inecs/openstack-api-simulator.git
cd openstack-api-simulator
docker compose -f docker-compose.release.yml up -d --wait
# или: make release-up
curl -sf http://127.0.0.1:5000/health/ready
# Опционально: полное синтетическое облако (~1000 серверов)
make release-seed PROFILE=demo
Образ: inecs/openstack-api-simulator
(публикация: make release, когда будете готовы).
Development checkout
cp .env.example .env
docker compose up -d --build --wait
# Опционально: полное синтетическое облако (~1000 серверов)
make seed-demo
# Полный multi-service smoke
make smoke
- Консоль: http://localhost:5000/
- OpenAPI: http://localhost:5000/docs
Подробнее: Быстрый старт.
Helm (Kubernetes + Ingress + Let's Encrypt)
helm upgrade --install os-sim ./helm/openstack-api-simulator \
-n openstack-sim --create-namespace \
-f ./helm/openstack-api-simulator/values-ingress-example.yaml \
--set certManager.email=you@example.com \
--set ingress.hosts[0].host=os-sim.example.com \
--set ingress.tls[0].hosts[0]=os-sim.example.com \
--set secret.ticketSigningKey="$(openssl rand -hex 32)" \
--set postgresql.auth.password="$(openssl rand -hex 16)"
Подробности: Kubernetes / Helm · README чарта:
helm/openstack-api-simulator.
Минимальный ClusterIP + port-forward:
helm upgrade --install os-sim ./helm/openstack-api-simulator \
-n openstack-sim --create-namespace \
--set secret.ticketSigningKey="$(openssl rand -hex 32)" \
--set seed.enabled=true --set seed.profile=minimal
kubectl -n openstack-sim port-forward \
svc/os-sim-openstack-api-simulator-gateway \
5000:5000 8774:8774 9696:9696 9292:9292 8776:8776
Учётные данные (seed)
Minimal seed (по умолчанию при старте):
| Пользователь | Пароль | Проект | Роль |
|---|---|---|---|
admin |
secret |
admin / demo |
admin |
demo |
secret |
demo |
member |
Demo cloud (Data drawer → Load demo cloud / make seed-demo): ~1000 серверов,
16 гипервизоров, 3 AZ, 5 проектов, сети/порты/FIP, 600 томов, LB, стеки,
Ironic, Swift.
| Пользователь | Пароль | Типичные проекты |
|---|---|---|
admin |
secret |
все проекты |
ops |
secret |
production, staging |
developer |
secret |
development, staging |
demo / auditor |
secret |
demo / production |
Домен: Default.
Пример аутентификации
curl -i -X POST http://localhost:5000/v3/auth/tokens \
-H 'Content-Type: application/json' \
-d '{
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"name": "demo",
"domain": {"name": "Default"},
"password": "secret"
}
}
},
"scope": {
"project": {"name": "demo", "domain": {"name": "Default"}}
}
}
}'
# Используйте X-Subject-Token как X-Auth-Token.
curl -sH "X-Auth-Token: $TOKEN" -H "OpenStack-API-Version: compute 2.79" \
http://localhost:8774/v2.1/servers/detail
curl -sH "X-Auth-Token: $TOKEN" http://localhost:9696/v2.0/routers
Документация
Документация двуязычная. Переключатель Language / Язык — в первой строке каждой страницы; английский корень — README.md. Оглавление: docs/README.md · docs/ru/README.md.
| Руководство | Тема |
|---|---|
| Быстрый старт | Первая лабораторная сессия (Compose) |
| Kubernetes / Helm | Установка в кластер, Ingress, cert-manager |
| Конфигурация | Переменные окружения, Compose, Helm |
| Аутентификация | Токены Keystone и seed-пользователи |
| Порты | Реальные порты API OpenStack (публикация 1:1) |
| API surface | Специализированные vs schema-пакеты |
| Версии API | Серии Yoga → Dalmatian |
| Покрытие API | Счётчики операций |
| Seed-профили | minimal / demo |
| Клиенты | SDK / CLI |
| Web UI | Консоль и drawers |
| Эксплуатация | Day-2, релиз, reseed |
| Архитектура | Компоненты и путь запроса |
| Безопасность | Threat model лаборатории |
| Наблюдаемость | Health и логи |
| Устранение неполадок | Типичные сбои |
| FAQ | Краткие ответы |
| Домены | Заметки по сервисам |
| Примеры | Cookbook'и клиентов |
| Hypervisor-lab | Pulumi-покрытие API (все ops × серии) |
Лаборатория покрытия API (Pulumi)
Сьют в pulumi-tests/ максимально использует pulumi_openstack,
затем HTTP-probe pack-операций с проверкой непустых тел для yoga → dalmatian.
make pulumi-tests # из корня репозитория
# или:
cd pulumi-tests && make test-pulumi-smoke && make test-pulumi
open pulumi-tests/reports/pulumi-report.html
Подробности: docs/ru/hypervisor-lab.md.
Последний полный прогон (2026-07-18): HTTP 6514 / 6514, http_critical=0
(yoga→dalmatian). Карта pytest / smoke: docs/ru/operations.md — Тестирование.
Полная матрица реальных портов OpenStack по умолчанию, публикуемых 1:1
(Keystone :5000, Nova :8774, Neutron :9696, Glance :9292, Cinder :8776, …):
см. docs/ru/ports.md.
Nginx выставляет X-OpenStack-Service / X-Forwarded-Port. Приложение
переписывает путь в /_os/<service>/…, чтобы /v3 (Keystone vs Cinder) и /v1
(Heat vs Swift) не конфликтовали.
Реализованная поверхность API
Пакеты контрактов в contracts/openstack/<series>/ дают 1300+ операций
по 28 сервисам (Yoga → Dalmatian). Schema-движок монтирует каждую операцию
пакета; специализированные роутеры сохраняют stateful happy-path'ы.
| Инструмент | Назначение |
|---|---|
PYTHONPATH=tools python3 tools/os_api_inventory/generate_packs.py |
Перегенерация series-пакетов |
python3 tools/os_api_inventory/coverage_report.py |
Запись docs/api_coverage.md |
python3 examples/python/openstack_smoke.py |
Multi-port GET smoke |
python3 examples/python/openstack_surface_probe.py |
Полный lifecycle-probe |
WebUI: Environment → OpenStack API pack — активация серии и microversions.
Это лабораторный surface-complete симулятор (ответы в форме API-ref), а не бит-в-бит идентичный upstream OpenStack.
Drawers консоли, параметры запроса и скриншоты: Web UI.
Лицензия
Apache-2.0 — см. LICENSE.
