Files
openstack-api-simulator/README.ru.md
T
inecs 147f04c9a2 Fix Nova/Cinder stateful CRUD so the full surface and Pulumi matrix pass clean.
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.
2026-07-18 09:38:45 +03:00

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).

Web-консоль

Быстрый старт (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

Подробнее: Быстрый старт.

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.