Files
openstack-api-simulator/docs/architecture.md
T
inecs 6033967e6a Initial commit: stateful OpenStack API laboratory simulator.
Ship Keystone auth, multi-service handlers (Yoga→Dalmatian), Compose/Helm
packaging, API contract packs, and pytest/Pulumi coverage labs.
2026-07-18 04:26:48 +03:00

2.4 KiB

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

Architecture

Components

┌─────────────┐     ┌──────────────────┐     ┌────────────┐
│  Clients    │────▶│  api-gateway     │────▶│ simulator  │
│  SDK / CLI  │     │  nginx multi-port│     │ FastAPI    │
│  Web UI     │     │  :5000,:8774,…   │     │ :8080      │
└─────────────┘     └──────────────────┘     └─────┬──────┘
                                                    │
                                              ┌─────▼──────┐
                                              │ PostgreSQL │
                                              └────────────┘
Piece Responsibility
api-gateway Publish OpenStack default ports; set X-OpenStack-Service / X-Forwarded-Port
ServiceDispatchMiddleware Rewrite to /_os/<service>/…
Specialized routers Stateful Keystone, Nova, Neutron, Glance, Cinder, Heat, Swift, Ironic, Octavia, Placement
Schema engine Surface-complete ops from contracts/openstack/<series>/
PostgreSQL Identity, IaaS tables, os_api_objects generic store

Request lifecycle

  1. Client hits e.g. http://host:8774/v2.1/servers.
  2. Gateway injects service headers.
  3. Dispatch mounts the request under /_os/nova/….
  4. Specialized Nova handler or schema pack operation runs.
  5. Reads/writes go to PostgreSQL (typed tables or os_api_objects).

Contract packs

  • Generated inventory → contracts/openstack/{yoga,antelope,caracal,dalmatian}/
  • Hot-swap via Web UI / /ui/api/openstack/contracts/activate
  • Coverage report: api_coverage.md

Seed profiles

Profile Contents
minimal Small Keystone + few IaaS resources
demo ~1000 servers, multi-project topology, nested collections

Details: seed-profiles.md.

Deployment model

Mode Gateway DB
Compose nginx container bundled Postgres
Helm nginx Deployment + multi-port Service bundled StatefulSet or external
Ingress TLS terminates at Ingress → gateway:5000

See kubernetes.md.