This document records the dependency chain, current implementation state, and hardware/media gating status for the VDI epic (issue #69).
The VDI epic waits on hardware and media prerequisites (#129 and #132). The core Phase 1 desktop pool primitives (pkg/vdi and cmd/corral-vdi) have landed, and so have the platform adapters that support them (pkg/snapshot, pkg/export, pkg/lifecycle, pkg/schedule, pkg/doctor). The unit tests in CI give them full coverage.
-
GPU / Device Passthrough (
#129):- Software-rendered desktops are a demonstration, not high-performance VDI.
- Blocked on hosts with spare passthrough-capable devices. If you bind a GPU to
vfio-pcion a workstation, the workstation loses its physical display. - The CI environment has no dedicated devices for GPU passthrough.
-
Windows Guests (
#132):- Blocked on non-redistributable Windows ISOs and
virtio-windrivers (we cannot host them in public CI repositories). - Each verification pass needs a long unattended install (30–60 minutes).
- Blocked on non-redistributable Windows ISOs and
-
Lifecycle at Pool Scale (
#133):- Partially unblocked.
pkg/lifecyclehandles power operations on the canonicalInstanceRef, andpkg/schedulemanages windowed start/stop execution across contexts.
- Partially unblocked.
- Phase 1 VDI Plugin (
pkg/vdi,cmd/corral-vdi): Static pools, golden VM clones viakubevirt.Client.Clone, label-based assignment (corral.dev/vdi-pool,corral.dev/vdi-assigned-to), and CLI lifecycle (pool create/list/delete,assign,unassign,connect). - Atomic claims (
#226): Onecoordination.k8s.ioLease for each pool member. The first writer wins, and Corral takes over an expired claim with aresourceVersioncompare-and-swap. A release deletes the Lease only with aresourceVersionprecondition (fixed in #530). - CT-backed ephemeral pools (
#230):corral vdi ct-poolandpkg/vdi/ctpool.go. A ConfigMap holds the pool definition and the recorded status. A reconciler creates, starts, replaces, and scales down CT members, and never destroys a claimed member. Claims use the#226Lease. A release destroys the member and creates it again from the image. A pool in persistent mode gives an explicit error. Guide: docs/vdi-ct-pools.md. - Self-service broker (
#227): Opt-in/api/vdi/routes incorral web(ADR-0013). An authenticated user claims, starts, inspects, and releases their own desktop from a VM or CT pool. The caller comes from the trusted identity headers, and the holder of the member's Lease is the owner. Admins inCORRAL_ADMINSmay act on any desktop. Guide: docs/vdi.md. - Session records and reclaim (
#228): The broker counts the open consoles of each desktop and records them on its Lease. It reclaims after an explicit release or at an optional maximum duration. It also reclaims at the end of a disconnect grace period, which a reconnect cancels. Persistent VM members stop. The broker creates ephemeral VM members (pool create --ephemeral) and CT members again. A restart keeps the recorded times. The broker does not detect idle input. - One-click connect (
#229): The broker resolves a desktop to RDP in the browser, VNC, or the terminal. It also gives the fallbacks and why it skipped a protocol. The web Desktops screen andcorral vdi connectuse the same answer. Only the holder and the admins can open the consoles of a claimed desktop. - In-Browser RDP Proxy: RDCleanPath proxy that supports IronRDP (ADR-0002 Phase 2).
- Disk Snapshot Adapters (
#134): Multi-backend snapshot/restore/retention inpkg/snapshot. - Export Adapters (
#131): Per-backend export of disk images inpkg/export. - Peer Diagnostics (
#135): Diagnostics for multi-site reachability and console routes inpkg/doctor.
| Issue | Scope | State |
|---|---|---|
#226 |
Atomic claim and release | Done |
#227 |
Authenticated self-service broker API | Done; ADR-0013 |
#228 |
Session tracking and reclaim | Done; docs/vdi.md |
#229 |
Protocol-aware one-click connect | Done; docs/vdi.md |
#230 |
CT-backed ephemeral pools | Done (#520, #528, #530, #544, #557) |
Keep issue #69 tracked as an epic until the hardware/media blockers in #129 and #132 have a resolution. pkg/vdi remains active in the codebase for static pool creation and manual assignment.