Skip to main content

pvesh-like CLI for Proxmox API with multi-backend support, performance profiling, and advanced configuration management

Project description

proxmox-openapi

Schema-driven FastAPI package for Proxmox API: OpenAPI generation, mock data, and in-memory CRUD operations.

📚 Full Documentation

Features

  • Dual Mode: Mock mode (default) for development, Real mode for production Proxmox integration
  • 646 Endpoints: Pre-generated Proxmox VE 8.1 API with full OpenAPI schema
  • Mock Data: Automatically generate mock data for all endpoints with in-memory CRUD
  • Real API Proxy: Validated proxy to real Proxmox VE API with request/response validation
  • Code Generation: Automatically crawl Proxmox API Viewer and convert to OpenAPI schema
  • Multi-version Support: Select multiple Proxmox versions with latest mapped to official Proxmox API viewer
  • Swagger Docs: FastAPI auto-generates OpenAPI documentation at /docs

Installation

pip install proxmox-openapi

Quick Start

Mock Mode (Default)

# Install
pip install proxmox-openapi

# Start server
uvicorn proxmox_openapi.main:app --reload

# View Swagger docs
# Open http://localhost:8000/docs

SDK Direct Usage (No Server Required)

from proxmox_openapi.sdk import ProxmoxSDK

# Async with mock data
async with ProxmoxSDK.mock() as proxmox:
    nodes = await proxmox.nodes.get()

# Or sync (blocking)
with ProxmoxSDK.sync_mock() as proxmox:
    nodes = proxmox.nodes.get()

CLI TUI

# Install with CLI extras
pip install proxmox-openapi[cli]

# Production TUI
pbx tui

# Mock TUI
pbx tui mock

Real Mode (Connect to Proxmox)

# Configure credentials
export PROXMOX_API_MODE=real
export PROXMOX_URL=https://proxmox.example.com:8006
export PROXMOX_API_TOKEN=PVEAPIToken=user@realm!tokenid=uuid

# Start server
uvicorn proxmox_openapi.main:app --reload

See the Quick Start Guide for more details.

Documentation

Environment Variables

Mock Mode

  • PROXMOX_API_MODE - Set to "mock" (default) or "real"
  • PROXMOX_MOCK_SCHEMA_VERSION - Version tag to use (default: "latest")
  • PROXMOX_MOCK_DATA_PATH - Path to custom mock data file (default: "/etc/proxmox-openapi/mock-data.json")

Real Mode

  • PROXMOX_API_MODE - Set to "real" to enable Proxmox integration
  • PROXMOX_URL - Proxmox server URL (e.g., "https://proxmox.example.com:8006")
  • PROXMOX_API_TOKEN - API token (recommended, format: "PVEAPIToken=user@realm!tokenid=uuid")
  • PROXMOX_USERNAME - Username (fallback, format: "user@realm")
  • PROXMOX_PASSWORD - Password (fallback)
  • PROXMOX_API_VERIFY_SSL - Verify SSL certificates (default: true)

Server

  • HOST - Host to bind to (default: "0.0.0.0")
  • PORT - Port to bind to (default: "8000")

Development

# Install dependencies
uv sync --extra test

# Run tests
pytest

# Run linting
ruff check .
ruff format --check .

Docker

All images are Alpine-based (smaller footprint), built from this repository with uv and uv.lock in a multi-stage Dockerfile. Three variants are published to Docker Hub:

Variant Tags Description
Raw (default) latest, <version> Pure uvicorn, HTTP only. Smallest image.
Nginx latest-nginx, <version>-nginx nginx terminates HTTPS via mkcert; proxies to uvicorn.
Granian latest-granian, <version>-granian Granian (Rust ASGI server) with native TLS via mkcert. No nginx.

Upgrade note: before v0.0.2, only runtime+mkcert images existed. From v0.0.2+, latest is the raw uvicorn image. Pull latest-nginx for HTTPS with nginx.

Raw image (default)

Plain uvicorn on HTTP — the simplest option for local dev or when you put your own proxy in front.

docker pull emersonfelipesp/proxmox-openapi:latest
docker run -d -p 8000:8000 --name proxmox-openapi emersonfelipesp/proxmox-openapi:latest

Build from source:

docker build -t proxmox-openapi:raw .
docker run -d -p 8000:8000 proxmox-openapi:raw

Nginx image (nginx + mkcert HTTPS + uvicorn)

nginx terminates HTTPS on PORT (default 8000) using certificates from mkcert and proxies to uvicorn on 127.0.0.1:8001. supervisord manages both processes.

docker pull emersonfelipesp/proxmox-openapi:latest-nginx
docker run -d -p 8443:8000 --name proxmox-openapi-nginx \
  emersonfelipesp/proxmox-openapi:latest-nginx

Build from source:

docker build --target nginx -t proxmox-openapi:nginx .
docker run -d -p 8443:8000 proxmox-openapi:nginx

Granian image (granian + mkcert HTTPS)

Granian is a Rust-based ASGI server with native HTTP/2, WebSocket, and TLS support. This variant eliminates nginx and supervisord — a single granian process handles everything.

docker pull emersonfelipesp/proxmox-openapi:latest-granian
docker run -d -p 8443:8000 --name proxmox-openapi-granian \
  emersonfelipesp/proxmox-openapi:latest-granian

Build from source:

docker build --target granian -t proxmox-openapi:granian .
docker run -d -p 8443:8000 proxmox-openapi:granian

mkcert environment variables (nginx and granian images)

Variable Default Description
PORT 8000 Port the server listens on
MKCERT_CERT_DIR /certs Directory where certs are stored
MKCERT_EXTRA_NAMES Extra SANs (commas or spaces), e.g. proxmox-api.lan,10.0.0.5
CAROOT Mount a volume here to persist the local CA across container restarts
APP_MODULE proxmox_openapi.mock_main:app ASGI app to run (change to proxmox_openapi.main:app for real mode)
docker run -d -p 8443:8000 --name proxmox-openapi-tls \
  -e MKCERT_EXTRA_NAMES='myhost.local,192.168.1.10' \
  -e APP_MODULE='proxmox_openapi.main:app' \
  emersonfelipesp/proxmox-openapi:latest-nginx

To run a shell instead of starting the server, pass a command (the entrypoint delegates to it):

docker run --rm emersonfelipesp/proxmox-openapi:latest-nginx sh

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

proxmox_sdk-0.0.2.tar.gz (212.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

proxmox_sdk-0.0.2-py3-none-any.whl (246.8 kB view details)

Uploaded Python 3

File details

Details for the file proxmox_sdk-0.0.2.tar.gz.

File metadata

  • Download URL: proxmox_sdk-0.0.2.tar.gz
  • Upload date:
  • Size: 212.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for proxmox_sdk-0.0.2.tar.gz
Algorithm Hash digest
SHA256 81bb7fbb552f636d9a4b38a7bd6a58a5b7cc174d45d2163540e2658f0827cf12
MD5 3c2ccc2d33d5db30c226135fb43f1c2c
BLAKE2b-256 8ac1f4d35898865a38e1c4cc046b21e8f3d8e8a20cc8f66aa2b01937940a52a8

See more details on using hashes here.

File details

Details for the file proxmox_sdk-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: proxmox_sdk-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 246.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for proxmox_sdk-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d946eebc45e5f922ed1bc58d5484de8679e19c603c428a3b3b532bb787e13c30
MD5 ef5bd35e4bfcd3eccefb9877da6cc2ff
BLAKE2b-256 6d43088cfbfb15dc0c02df7e609534f8369b3e7a97160803c98c3a2170ed9b39

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page