Cloud Pool Manager

Cloud Pool Manager

On-demand pools of teaching virtual machines — in the browser, with zero install.

A teacher creates a pool for a course; the platform provisions a fleet of identical VMs on OpenStack; each student opens JupyterLab, VS Code or a terminal straight from their browser.

OpenStackJupyterLabVS Code nbgraderMoodlereal-timeGo · SvelteKit

What it does

From a teacher's one click to a whole class working in the browser — in minutes, not hours.

Pools of VMs by course

One action provisions N identical machines from a golden image. Asynchronous job queue and a desired-vs-real reconciliation loop — self-healing, with pool pre-warming.

🖥

Browser access, no install

Per-student JupyterLab, VS Code (code-server) and a Guacamole terminal, reverse-proxied over HTTPS. The VMs are never exposed directly.

🔑

Identity & enrolment

OIDC (Dex/GLAuth), GitHub OAuth, SSH keys, and Moodle / “cours de l'X” course import — the student roster is pulled automatically.

Grading with nbgrader

Distribute, collect and auto-grade assignments, then push marks back to Moodle.

Real-time collaboration

Live co-editing of a shared session (JupyterLab RTC) brokered on a dedicated VM, plus password-based VS Code sharing between students.

📈

Operable & secure

Prometheus, Loki, Grafana and OpenTelemetry. Every API route authenticated with role checks, server-side identity and input validation.

Architecture

Three tiers, gRPC throughout; a Caddy reverse proxy fronts HTTPS, gRPC-Web and the app proxies.

SvelteKit frontend  ──gRPC-Web──▶  Control Center (Go)  ──gRPC──▶  OpenStack microservice (Go)
                                         │                                  │
                                  PostgreSQL  (state,                  OpenStack API
                                   LISTEN/NOTIFY → live UI)            (gophercloud)

Real-time pool & VM state streamed to the UI via PostgreSQL LISTEN/NOTIFY — no refresh.