147f04c9a2
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.
157 lines
5.7 KiB
Markdown
157 lines
5.7 KiB
Markdown
**Language / Язык:** [English](../operations.md) | [Русский](operations.md)
|
||
|
||
# Эксплуатация
|
||
|
||
## Day-2 команды (Compose)
|
||
|
||
```bash
|
||
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
|
||
```
|
||
|
||
## Миграции
|
||
|
||
Упорядоченный SQL в `app/db/migrations/` применяется транзакционно.
|
||
Повторный запуск `make db-migrate` безопасен. `/health/ready` остаётся недоступным,
|
||
пока миграции не применены. Helm выполняет тот же migrate-шаг как initContainer.
|
||
|
||
## Reseed
|
||
|
||
```bash
|
||
make seed # minimal
|
||
make seed-demo # replaces state with demo cloud
|
||
```
|
||
|
||
Или:
|
||
|
||
```bash
|
||
docker compose exec simulator python -m app.openstack.seed_cli --profile demo
|
||
```
|
||
|
||
Reseed **очищает** лабораторные таблицы OpenStack и перезагружает данные. Внешняя
|
||
автоматизация с закэшированными UUID ресурсов должна обновить их.
|
||
|
||
## OpenStack pack series
|
||
|
||
Cold start (env):
|
||
|
||
```bash
|
||
OPENSTACK_SERIES=caracal docker compose up -d
|
||
```
|
||
|
||
Helm:
|
||
|
||
```bash
|
||
--set config.openstackSeries=yoga
|
||
```
|
||
|
||
Hot-swap (Web UI или API):
|
||
|
||
```bash
|
||
curl -X POST http://127.0.0.1:5000/ui/api/openstack/contracts/activate \
|
||
-H 'Content-Type: application/json' \
|
||
-d '{"series":"dalmatian"}'
|
||
```
|
||
|
||
Серии: `yoga`, `antelope`, `caracal`, `dalmatian`. Покрытие:
|
||
[api_coverage.md](api_coverage.md).
|
||
|
||
## Перегенерация contract-пакетов
|
||
|
||
```bash
|
||
PYTHONPATH=tools python3 tools/os_api_inventory/generate_packs.py
|
||
PYTHONPATH=tools python3 tools/os_api_inventory/coverage_report.py
|
||
```
|
||
|
||
## Схемы Request body (консоль)
|
||
|
||
Для `POST`/`PUT`/`PATCH` консоль показывает полные JSON Schema поля.
|
||
Схемы лежат в `contracts/openstack/request_bodies/<service>.json` и
|
||
подмешиваются к операциям пака при загрузке (общие для всех серий).
|
||
|
||
```bash
|
||
make request-bodies-generate # пересобрать из api-ref каталога
|
||
make request-bodies-import # наложить Tier-1 из openstack-openapi
|
||
make request-bodies-coverage # проверить, что у всех write-op есть схема
|
||
```
|
||
|
||
Tier-1: nova, neutron, keystone, glance, cinder, octavia, swift, placement.
|
||
Остальные сервисы — курируемый генератор каталога.
|
||
|
||
## Резервное копирование состояния лаборатории
|
||
|
||
PostgreSQL — источник истины. Используйте `pg_dump` / снимки volume.
|
||
Контейнеры приложения одноразовые, если volume БД сохранён.
|
||
|
||
## Публикация на Docker Hub
|
||
|
||
```bash
|
||
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 |
|
||
|
||
```bash
|
||
make release VERSION=0.2.0
|
||
make release-build # local tags only
|
||
```
|
||
|
||
## Kubernetes day-2
|
||
|
||
См. [kubernetes.md](kubernetes.md) для логов, reseed через `kubectl exec` и
|
||
удаления.
|
||
|
||
## Тестирование
|
||
|
||
| Где | Что |
|
||
|---|---|
|
||
| `tests/unit/` | Офлайн unit (ASGI / FakeDatabase) |
|
||
| `tests/openstack/` | Pack-контракты, registry, live surface / lifecycle |
|
||
| `tests/integration/` | Интеграция с PostgreSQL |
|
||
| `tests/compatibility/` | Surface probe и group smoke |
|
||
| `examples/python/openstack_smoke.py` | Host multi-port smoke (`make smoke` / `make test-compatibility`) |
|
||
| `examples/python/openstack_surface_probe.py` | Lifecycle-probe каждой pack-операции × серии |
|
||
| [`pulumi-tests/`](../../pulumi-tests/README.ru.md) | Pulumi Layer B + полная HTTP-матрица (yoga→dalmatian) |
|
||
|
||
```bash
|
||
make test # офлайн unit + contract (без Postgres)
|
||
make test-integration # -m integration (Postgres)
|
||
make test-surface # surface probe + tests/openstack против Compose
|
||
make test-compatibility # seed minimal + openstack_smoke.py
|
||
make pulumi-tests # полный сьют pulumi-tests (alias: make test-pulumi)
|
||
make test-pulumi-smoke # быстрый режим: collection GET + HEAD
|
||
```
|
||
|
||
Подробнее о Pulumi-лаборатории: [hypervisor-lab.md](hypervisor-lab.md).
|
||
Отчёты: `pulumi-tests/reports/pulumi-report.html`, `pulumi-junit.xml`, `summary.json`.
|
||
|
||
### Последние результаты лаборатории (2026-07-18)
|
||
|
||
| Сьют | Результат |
|
||
|---|---|
|
||
| `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` (полная matrix) | HTTP **6514 / 6514**, `http_critical=0`, pulumi **4 / 4** серии |
|
||
| Compatibility smoke | OK (авто Keystone `:5000` или локальный `:15000`) |
|
||
|
||
Пересобрать HTML-отчёт: `make -C pulumi-tests report` после прогона.
|
||
|
||
## Обновления
|
||
|
||
1. Pull / build нового тега образа.
|
||
2. Примените миграции (автоматически при старте / Helm initContainer).
|
||
3. Опционально reseed, если изменилась seed-схема.
|
||
4. Повторите `make smoke` или lifecycle probes.
|