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.
4.7 KiB
Language / Язык: English | Русский
Operations
Day-2 commands (Compose)
make up # start stack
make down # stop stack
make restart
make logs
make db-migrate # idempotent migrations
make seed # minimal OpenStack seed
make seed-demo # demo cloud (~1000 servers)
make smoke # multi-service GET smoke
Migrations
Ordered SQL under app/db/migrations/ applies transactionally.
Re-running make db-migrate is safe. /health/ready stays unavailable until
migrations are applied. Helm runs the same migrate step as an initContainer.
Reseed
make seed # minimal
make seed-demo # replaces state with demo cloud
Or:
docker compose exec simulator python -m app.openstack.seed_cli --profile demo
Reseed truncates OpenStack lab tables and reloads. External automation that cached resource UUIDs must refresh.
OpenStack pack series
Cold start (env):
OPENSTACK_SERIES=caracal docker compose up -d
Helm:
--set config.openstackSeries=yoga
Hot-swap (Web UI or API):
curl -X POST http://127.0.0.1:5000/ui/api/openstack/contracts/activate \
-H 'Content-Type: application/json' \
-d '{"series":"dalmatian"}'
Series: yoga, antelope, caracal, dalmatian. Coverage:
api_coverage.md.
Regenerating contract packs
PYTHONPATH=tools python3 tools/os_api_inventory/generate_packs.py
PYTHONPATH=tools python3 tools/os_api_inventory/coverage_report.py
Request body schemas (console)
Write methods (POST/PUT/PATCH) expose full JSON Schema field lists in the
web console. Schemas live in contracts/openstack/request_bodies/<service>.json
and are merged onto pack operations at load time (shared across series).
make request-bodies-generate # rebuild from in-repo api-ref catalog
make request-bodies-import # overlay Tier-1 services from openstack-openapi
make request-bodies-coverage # assert every write op has a schema
Tier-1 OpenAPI import covers nova, neutron, keystone, glance, cinder, octavia, swift, and placement. Other services use the curated catalog generator.
Backing up lab state
PostgreSQL is the system of record. Use pg_dump / volume snapshots.
Application containers are disposable when the database volume remains.
Publishing to Docker Hub
docker login
make release
| Variable | Default | Meaning |
|---|---|---|
DOCKERHUB_USER |
inecs |
Docker Hub namespace |
IMAGE_NAME |
openstack-api-simulator |
Repository name |
VERSION |
from pyproject.toml |
Image tag |
make release VERSION=0.2.0
make release-build # local tags only
Kubernetes day-2
See kubernetes.md for logs, reseed via kubectl exec, and
uninstall.
Testing
| Location | What |
|---|---|
tests/unit/ |
Offline unit tests (ASGI / FakeDatabase) |
tests/openstack/ |
Pack contracts, registry, live surface / lifecycle |
tests/integration/ |
Postgres-backed integration |
tests/compatibility/ |
Surface probe + group smoke markers |
examples/python/openstack_smoke.py |
Host multi-port smoke (make smoke / make test-compatibility) |
examples/python/openstack_surface_probe.py |
Lifecycle probe every pack op × series |
pulumi-tests/ |
Pulumi Layer B + full HTTP matrix (yoga→dalmatian) |
make test # offline unit + contract (no Postgres)
make test-integration # -m integration (Postgres)
make test-surface # surface probe + tests/openstack against Compose
make test-compatibility # seed minimal + openstack_smoke.py
make pulumi-tests # full pulumi-tests suite (alias: make test-pulumi)
make test-pulumi-smoke # fast collection GET + HEAD only
Details for the Pulumi lab: hypervisor-lab.md.
Reports: pulumi-tests/reports/pulumi-report.html, pulumi-junit.xml, summary.json.
Latest lab results (2026-07-18)
| Suite | Result |
|---|---|
make test |
243 passed (34 deselected) |
make test-integration |
33 passed |
| Surface probe (yoga→dalmatian) | 1464 / 1530 / 1649 / 1871 ops — 0 fail |
make pulumi-tests (full matrix) |
HTTP 6514 / 6514, http_critical=0, pulumi 4 / 4 series |
| Compatibility smoke | OK (auto Keystone :5000 or local :15000) |
Regenerate the HTML report anytime with make -C pulumi-tests report after a suite run.
Upgrades
- Pull / build new image tag.
- Apply migrations (automatic on start / Helm initContainer).
- Optionally reseed if the seed schema changed.
- Re-run
make smokeor lifecycle probes.