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
+179
View File
@@ -0,0 +1,179 @@
**Language / Язык:** [English](../getting-started.md) | [Русский](getting-started.md)
# Быстрый старт
Поднимите локальный лабораторный кластер, пройдите аутентификацию и выполните первый
цикл чтения/мутации против симулятора.
## Требования
- Docker и Docker Compose
- `make` (необязательно, но используется в документированных командах)
Python, линтеры и тесты запускаются **внутри** контейнеров. Для повседневной работы
локальный Python-инструментарий не нужен.
## Выберите путь
| Путь | Когда использовать |
|---|---|
| [Опубликованный образ](#1a-опубликованный-образ-docker-hub) | Самый быстрый старт с `inecs/proxmox-api-simulator` |
| [Helm / Kubernetes](kubernetes.md) | Установка в кластер с Ingress + Let's Encrypt |
| [Checkout для разработки](#1b-checkout-для-разработки) | Вклад в проект / bind-mount исходников / HTTPS-шлюз на `:8006` |
## 1a. Опубликованный образ (Docker Hub)
Используется [`docker-compose.release.yml`](../../docker-compose.release.yml) —
PostgreSQL + runtime-симулятор из Hub + лабораторный HTTPS-шлюз. Нужен checkout
с `docker/tls/` (self-signed материалы). Сборка исходников не требуется.
> Только лаборатория / CI — перед shared или сетевым демо смените
> `TICKET_SIGNING_KEY` и пароль БД. См. [SECURITY.md](../../SECURITY.md).
```bash
# из этого репозитория (compose + docker/tls/)
docker compose -f docker-compose.release.yml pull
docker compose -f docker-compose.release.yml up -d
docker compose -f docker-compose.release.yml run --rm --entrypoint python \
simulator -m app.simulation.seed_cli
```
Закрепите версию:
```bash
IMAGE_TAG=0.1.0 docker compose -f docker-compose.release.yml up -d
```
Make-цели (git checkout):
```bash
make release-up
make release-seed PROFILE=small
```
| Порт хоста | Сервис |
|---|---|
| `8006` | HTTPS API + Web UI через лабораторный TLS-шлюз (как у реального PVE) |
| `5432` | PostgreSQL (только localhost) |
Миграции выполняются автоматически через одноразовый сервис `migrate`.
Далее переходите к разделу [Дождитесь готовности](#2-дождитесь-готовности).
## 1b. Checkout для разработки
```bash
make install
make up
```
Сервисы:
| Порт хоста | Сервис |
|---|---|
| `8006` | HTTPS API + Web UI через nginx TLS-шлюз (как у реального PVE) |
| `5432` | PostgreSQL (только localhost) |
У реального Proxmox VE REST API доступен **только** как
`https://<host>:8006/api2/json/...`. Лаборатория публикует то же: HTTPS на
хосте `:8006` через development TLS-шлюз; см.
[Порты и TLS](configuration.md#порты-и-tls). Хост **`:8007` не используется**
(на железе это обычно PBS, не API PVE).
Миграции применяются автоматически до того, как симулятор станет готов.
## 2. Дождитесь готовности
```bash
curl -sS http://localhost:8006/health/live
curl -sS http://localhost:8006/health/ready
```
`/health/ready` возвращает HTTP 503, пока PostgreSQL недоступен **и** не применена
последняя упакованная миграция.
## 3. Загрузите профиль seed
```bash
make seed PROFILE=small
```
`small` создаёт узел `pve01`, две QEMU-гостевые ВМ (`100`, `101`), один LXC (`200`),
локальные хранилища и стандартных development-принципалов. Другие размеры — в
[Профилях seed](seed-profiles.md).
## 4. Проверьте версию API
```bash
curl -sS http://localhost:8006/api2/json/version | jq .
```
При холодном старте контракт по умолчанию — встроенный снимок PVE **9.2.3** в Docker
Compose. Переключайте мажорные версии 6–9 из Web UI или через
[Версии API](api-versions.md).
## 5. Пройдите аутентификацию
```bash
curl -sk -X POST \
-d 'username=root@pam&password=secret' \
http://localhost:8006/api2/json/access/ticket | jq .
```
Сохраните `ticket` и `CSRFPreventionToken` из `data`. Для мутаций отправляйте:
- Cookie: `PVEAuthCookie=<ticket>`
- Header: `CSRFPreventionToken: <token>`
Подробнее: [Аутентификация](authentication.md).
## 6. Получите список гостей и запустите одного
```bash
# замените TICKET / CSRF из предыдущего ответа
curl -sk -H "Cookie: PVEAuthCookie=$TICKET" \
http://localhost:8006/api2/json/nodes/pve01/qemu | jq .
curl -sk -X POST \
-H "Cookie: PVEAuthCookie=$TICKET" \
-H "CSRFPreventionToken: $CSRF" \
http://localhost:8006/api2/json/nodes/pve01/qemu/100/status/start | jq .
```
Асинхронные операции возвращают строку UPID. Опрашивайте, пока задача не завершится:
```bash
curl -s -H "Cookie: PVEAuthCookie=$TICKET" \
"http://localhost:8006/api2/json/nodes/pve01/tasks/${UPID}/status" | jq .
```
## 7. Откройте Web UI
Перейдите на [http://localhost:8006/](http://localhost:8006/) — интерактивная
консоль, каталог контрактов (PVE 6–9), представление совместимости, применение runtime-
контракта и управление demo-кластером. Скриншоты светлой/тёмной темы и полный список
возможностей — в [Web UI](web-ui.md).
## 8. Попробуйте клиентскую библиотеку
```bash
# из корня репозитория после make up + seed
python examples/python/proxmoxer_cookbook.py
```
Другие стеки: [Клиенты](clients.md) и [`examples/`](../../examples/README.ru.md).
## Готово, когда…
- `/health/ready` возвращает `{"status":"ok"}` (или эквивалентное OK-тело)
- `/api2/json/version` сообщает активную версию контракта
- Вход по тикету для `root@pam` успешен
- `nodes/pve01/qemu` перечисляет seeded ВМ
- Хотя бы один путь power или create возвращает UPID, который успешно завершается
## Дальнейшие шаги
- [Конфигурация](configuration.md) — env vars, workers, путь к контракту
- [Версии API](api-versions.md) — горячая замена мажоров 6–9
- [Клиенты](clients.md) — Ansible, Terraform, Pulumi, Go, Java, Perl
- [Эксплуатация](operations.md) — reseed, migrate, обновления