Prepare 0.1.0 for lab release: durable handlers, HTTP Compose, CI, and pulumi-tests.

- Harden DB-backed handlers and seed profiles; align client wire shapes for
  cluster resources, QEMU config, and node SSL fields
- Serve plain HTTP on Compose :8006; keep TLS optional (--profile tls) and
  terminate HTTPS at Kubernetes Ingress
- Add pulumi-tests (full contract surface majors 6–9 + BPG lifecycle) and
  make pulumi-tests
- Ship bilingual docs, CHANGELOG, SECURITY, CONTRIBUTING, and GitHub Actions
  (make ci + Compose/Helm validation)
This commit is contained in:
Sergey Antropoff
2026-07-18 04:18:05 +03:00
parent 777926487b
commit 48df10b17e
172 changed files with 7528 additions and 1208 deletions
+28
View File
@@ -0,0 +1,28 @@
**Language / Язык:** [English](../../domains/README.md) | [Русский](README.md)
# Руководства по доменам
Эти страницы описывают устойчивую семантику по областям API. Для исчерпывающих
списков методов используйте каталог Web UI или OpenAPI (`/docs`) для активной
major-версии — заявленное покрытие составляет **100%** для PVE 69.
| Руководство | Темы |
|---|---|
| [Core и кластер](core-cluster.md) | version, nodes, cluster resources/options/status |
| [Access](access.md) | users, groups, roles, ACL, realms, tokens, TFA, OpenID |
| [QEMU](qemu.md) | guests, power, disks, snapshots, clone/migrate, agent |
| [LXC](lxc.md) | containers and parallel lifecycle operations |
| [Storage и backup](storage-backup.md) | storages, content, vzdump / backup jobs |
| [Firewall](firewall.md) | cluster / node / guest firewall objects |
| [HA](ha.md) | groups, resources, status |
| [Ceph](ceph.md) | simulated Ceph configuration and status |
| [Pools](pools.md) | pools and membership |
| [SDN](sdn.md) | zones, VNets, subnets, controllers, IPAM |
| [Cluster extras](cluster-extras.md) | notifications, ACME, mapping, metrics servers |
| [Tasks](tasks.md) | UPID workers, status, logs |
## Карта персистентности
- Guests / HA / storage / identity → нормализованные таблицы
- Свободная конфигурация кластера → `clusters.metadata` jsonb
- Операции на уровне узла (network, disks, apt, …) → `nodes.metadata` под ключом `ops`
+21
View File
@@ -0,0 +1,21 @@
**Language / Язык:** [English](../../domains/access.md) | [Русский](access.md)
# Access
Устойчивая идентификация и авторизация: users, groups, roles, ACL entries,
realms, passwords, API tokens, permissions queries, tickets, TFA, OpenID,
VNC tickets.
## Основное
- Ticket login и CSRF — см. [Authentication](../authentication.md).
- При создании token секрет возвращается один раз; в хранилище сохраняются только
хеши.
- Наследование ACL и пересечение привилегий token ∩ owner.
- Состояние realm / TFA / OpenID **локальное**; живые вызовы каталога или IdP не
выполняются.
## Предзаполненные персоны
`root@pam`, `auditor@pve`, `operator@pve`, `storage@pve` — пароли и tokens см. в
руководстве по authentication.
+9
View File
@@ -0,0 +1,9 @@
**Language / Язык:** [English](../../domains/ceph.md) | [Русский](ceph.md)
# Ceph
Пути API, связанные с Ceph, сохраняют симулированное состояние кластера, pool,
OSD и monitor. Они не обращаются к живому кластеру Ceph.
Устаревшие алиасы путей (например, исторические написания `ceph/pools`) мапятся
на общие handlers, чтобы старые major-версии оставались полностью маршрутизируемыми.
+13
View File
@@ -0,0 +1,13 @@
**Language / Язык:** [English](../../domains/cluster-extras.md) | [Русский](cluster-extras.md)
# Cluster extras
Дополнительные домены на уровне кластера с устойчивыми handlers:
- **Notifications** — состояние конфигурации endpoints и targets
- **ACME** — симуляция account/plugin/certificate (без реальной регистрации в CA)
- **Mapping** — PCI / USB / resource mappings
- **Metrics servers** — симуляция конфигурации и экспорта PVE metrics-server
- **Custom CPU models** и массовые guest actions — как заявлено в контракте
Точные пути для активной major-версии смотрите в каталоге Web UI.
+25
View File
@@ -0,0 +1,25 @@
**Language / Язык:** [English](../../domains/core-cluster.md) | [Русский](core-cluster.md)
# Core и кластер
## Version
`GET /version` отражает `source_version` **активного** контракта (cold-start
snapshot или hot-swapped major).
## Nodes
- Endpoints списка и статуса устойчивы и формируются из seeded / созданных nodes.
- Имя node по умолчанию в seed-профиле `small`: **`pve01`**.
- Операционные мутации node (network, apt, disks, services, DNS/time/hosts,
certificates, …) сохраняются в `nodes.metadata.ops`.
## Cluster
- `/cluster/resources` и связанные inventory views читают guests и storages из
PostgreSQL.
- Cluster options, status, tasks, logs, replication, config/join helpers
сохраняют cluster metadata и связанные таблицы.
Работает для всех заявленных методов на major 6–9 для этих путей. Используйте
каталог Web UI, чтобы проверить различия параметров между версиями.
+10
View File
@@ -0,0 +1,10 @@
**Language / Язык:** [English](../../domains/firewall.md) | [Русский](firewall.md)
# Firewall
Конфигурация firewall на уровне cluster, node и guest — rules, aliases, IP sets,
security groups — в основном сохраняется через cluster/node metadata и связанные
структуры.
Handlers покрывают заявленную firewall-поверхность для major 6–9. Примените
нужную major-версию перед проверкой имён полей, специфичных для версии.
+10
View File
@@ -0,0 +1,10 @@
**Language / Язык:** [English](../../domains/ha.md) | [Русский](ha.md)
# HA
High-availability groups, resources, status и rules сохраняются в cluster
metadata / таблицах HA.
Используйте профиль `ha-demo` (medium + HA resource для VM 100) или demo cluster
для более богатых fixtures. HA здесь оркестрирует **симулированное** состояние
размещения guest — реальные nodes не изолируются (fencing не выполняется).
+15
View File
@@ -0,0 +1,15 @@
**Language / Язык:** [English](../../domains/lxc.md) | [Русский](lxc.md)
# LXC
Container API повторяют паттерны жизненного цикла QEMU там, где это заявлено
контрактом: CRUD, power, clone/migrate, snapshots, volume operations, consoles,
RRD и firewall objects.
Мутации сохраняются в нормализованные container tables и связанные metadata.
Асинхронные пути возвращают UPID по той же модели leased-worker, что и QEMU.
Seed-профили:
- `small` — CT `200` на `pve01`
- `medium` / `large` / `demo-cluster` — множество containers
+6
View File
@@ -0,0 +1,6 @@
**Language / Язык:** [English](../../domains/pools.md) | [Русский](pools.md)
# Pools
Pool CRUD и membership ресурсов полностью покрыты и устойчивы. Seed `medium`
включает development pool для экспериментов с membership.
+19
View File
@@ -0,0 +1,19 @@
**Language / Язык:** [English](../../domains/qemu.md) | [Русский](qemu.md)
# QEMU
Полная contract-поверхность для QEMU guests на активной major, включая:
- Create / sync & async config update / delete (UPID для async)
- Power: start, stop, shutdown, reboot, reset, suspend, resume
- Явная state machine + per-VM PostgreSQL lock
- Snapshots (create/delete/rollback как tasks)
- Clone и local migration (UPID)
- Disk resize (sync; shrink отклоняется) и disk move (task)
- Pending config view
- Guest agent read-only subset (info, OS/hostname, network, time, ping) при
`agent=1` и запущенном guest
- Cloud-init, consoles, RRD, guest firewall objects — как заявлено в контракте
Индексированные поля контракта, такие как `scsi[n]`, принимают конкретные имена
(`scsi0`, …). Неизвестные version-dependent parameters сохраняются в JSONB.
+10
View File
@@ -0,0 +1,10 @@
**Language / Язык:** [English](../../domains/sdn.md) | [Русский](sdn.md)
# SDN
Handlers software-defined networking покрывают заявленные zones, VNets, subnets,
controllers, IPAM, DNS, fabrics, locks и связанные dry-run/rollback операции для
активной major.
Состояние локально в базе симулятора. Переключение major 6–9 меняет набор SDN
methods на wire; все заявленные реализованы.
+18
View File
@@ -0,0 +1,18 @@
**Language / Язык:** [English](../../domains/storage-backup.md) | [Русский](storage-backup.md)
# Storage и backup
## Storage
- Cluster и node storage inventories сохраняются в нормализованных storage tables.
- Content listings и мутации обновляют `storage_contents` (и связанные строки).
- Seed `broken-storage` помечает `local-lvm` недоступным для тестирования сбоев.
## Backup
- Backup jobs, metadata и task-пути в стиле `vzdump` создают устойчивые task rows
и backup records.
- Workers выполняют leased backup tasks аналогично guest operations.
Реальные удалённые backup targets не вызываются; состояние объектов остаётся
внутри PostgreSQL.
+25
View File
@@ -0,0 +1,25 @@
**Language / Язык:** [English](../../domains/tasks.md) | [Русский](tasks.md)
# Tasks
Долгие операции возвращают **UPID** в стиле Proxmox. Task rows, events,
опциональные resource locks и idempotency metadata фиксируются вместе.
## Паттерн для клиента
1. `POST`/`DELETE` mutation → прочитать UPID из `data`
2. Опрашивать `GET /nodes/{node}/tasks/{upid}/status` до завершения
3. При необходимости запросить `.../log`
## Workers
- Claim через `FOR UPDATE SKIP LOCKED`
- Возобновляемые leases (`TASK_LEASE_SECONDS`)
- Progress + append-only logs
- Recovery после сбоя процесса
Длительность симуляции учитывает `SIMULATION_TIME_SCALE`. Безопасность lease
worker использует wall-clock time, чтобы ускоренный сценарий не нарушал
семантику распределённого claim.
См. [API surface](../api-surface.md) и [Operations](../operations.md).