VIRTUALIZATION.md: phase 2 deployed as v0.1.0-188 and verified live; what is left
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
80a5b4b464
commit
a0ce3e5eb9
@@ -787,8 +787,8 @@ what it has moved.
|
|||||||
filed under "decided, no action", and this is the change that would make closing it
|
filed under "decided, no action", and this is the change that would make closing it
|
||||||
free.
|
free.
|
||||||
|
|
||||||
- **A Virtualization tab** — asked for 2026-09-23; **scoped 2026-10-09 in `VIRTUALIZATION.md`**,
|
- **A Virtualization tab** — asked for 2026-09-23; **scoped, built and deployed 2026-10-09 — see
|
||||||
not started. Incus 6.0 LTS as the engine; the tab detects per machine whether Incus is
|
`VIRTUALIZATION.md`** for what shipped (phases 1 and 2) and what is left. Incus 6.0 LTS as the engine; the tab detects per machine whether Incus is
|
||||||
running, installable, or unavailable, and whether KVM is there, and acts on the machine in
|
running, installable, or unavailable, and whether KVM is there, and acts on the machine in
|
||||||
the switcher — never a default host. Containers and VMs in one list, console/shell through
|
the switcher — never a default host. Containers and VMs in one list, console/shell through
|
||||||
the terminal machinery, snapshots, exports, and the old Proxmox estate on `tank` as a later
|
the terminal machinery, snapshots, exports, and the old Proxmox estate on `tank` as a later
|
||||||
|
|||||||
+16
-16
@@ -1,20 +1,20 @@
|
|||||||
# Virtualization tab — plan (2026-10-09; phase 1 built the same day)
|
# Virtualization tab — plan (2026-10-09; phase 1 built the same day)
|
||||||
|
|
||||||
**Status:** phase 1 is **deployed to all five machines as v0.1.0-184** (2026-10-09) and
|
**Status:** phases 1 and 2 are **deployed to all five machines as v0.1.0-188** (2026-10-09).
|
||||||
**Install has run for real on `grid`**: Incus 6.0.4, a zfs pool on a 197 GiB sparse file in
|
Incus runs on `grid` (installed from the tab); the other machines show Install or, on `gate`,
|
||||||
`~/apps/hamlab/virt/`, `incusbr0` at `172.16.100.1/24`, the two `DOCKER-USER` rules, the
|
unavailable. Phase 2 verified live on `grid` through the hub: ISO fetched by URL with its
|
||||||
`incus-admin` group and Ham Lab's restart — one task, 90 seconds, exit 0. Verified
|
sha256 checked, **New VM from ISO** booted Alpine with Secure Boot off, **the VGA console
|
||||||
afterwards: a Debian 13 container and a Debian 13 VM created from the hub, both got a lease,
|
drew it in a real browser** (headless Chromium, 1280×800 canvas, keyboard and mouse live),
|
||||||
DNS and the internet through Docker's `FORWARD DROP`, the VM's agent answered `exec`;
|
a virtiofs mount appeared in a running VM, an export tarball landed in `virt/exports/` and the
|
||||||
snapshot create/restore/delete, limits and a snapshot schedule, a shell as a Terminal tab
|
nightly cron line is written, `instance.*` sensors flow and the "VM or container down" alert
|
||||||
through the hub, the catalogue (98 x86_64 container images, 1.1 s then cached), and the
|
default is in. Two things found and fixed on the way: spice-html5 wants the `binary`
|
||||||
refusals (bad names, wrong delete confirmation, a size that isn't one). Both test instances
|
websocket subprotocol agreed; and it opens one websocket per SPICE channel, so the bridge
|
||||||
were deleted again; the two Debian images stay in the store. One bug found and fixed on the
|
holds **one console operation per VM** and gives each channel its own data websocket on it
|
||||||
way: `description` is an instance field, not a config key (v0.1.0-184). Detection on the
|
(Incus refuses a second operation as "already connected"). **Left from phase 2:** the LAN
|
||||||
other four: `core`, the Mac mini and `hamtv` show **Install**; `gate` shows **unavailable**
|
bridge step (`br0` on the uplink — needs a live test on a machine that can afford to drop
|
||||||
(OpenWrt's apk has no incus, no KVM). Not built yet from the phase-1 list: the `instance.*`
|
off the network for a moment, which is a decision, not a build), cloud-init presets beyond
|
||||||
sensors and the Alerts default — next session. The write-back for `grid` is in
|
"Use my SSH keys", and a backup line for `grid`'s `virt/exports/` (see `hamlet/docs/backups.md`).
|
||||||
`hamlet/docs/hosts.md`, `docker.md` and `gotchas.md`.
|
`t-alpine` on `grid` is the live example; delete it from the tab when done.
|
||||||
|
|
||||||
A tab for creating, watching, consoling into and deleting **LXC containers and KVM virtual
|
A tab for creating, watching, consoling into and deleting **LXC containers and KVM virtual
|
||||||
machines**, the way Proxmox does with `pct` and `qm` — **per machine, like every other
|
machines**, the way Proxmox does with `pct` and `qm` — **per machine, like every other
|
||||||
@@ -307,7 +307,7 @@ confs), 118 GiB of `vzdump` archives, and three raw VM disks. Latest of each:
|
|||||||
| Phase | What | Effort |
|
| Phase | What | Effort |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| **1 — detection, Install, the tab** | `internal/incus` (detection, CLI wrapper, JSON types, `incus monitor` for live state, the preseed builder and subnet picker), `internal/api/virt.go` (routes below), `Virtualization.tsx` (the three page states; list, detail, create dialog, snapshot panel), rail entry `virt`, terminal integration, sensors, and the Library's **Images** shelf (browse and download from `images:`, local store, import, publish). **Tested by clicking Install on `grid` first, then `core`** — two different pool drivers, both with Docker present. Then the Mac for the arm64 path. `gate` for the unavailable state. | 2–3 sessions |
|
| **1 — detection, Install, the tab** | `internal/incus` (detection, CLI wrapper, JSON types, `incus monitor` for live state, the preseed builder and subnet picker), `internal/api/virt.go` (routes below), `Virtualization.tsx` (the three page states; list, detail, create dialog, snapshot panel), rail entry `virt`, terminal integration, sensors, and the Library's **Images** shelf (browse and download from `images:`, local store, import, publish). **Tested by clicking Install on `grid` first, then `core`** — two different pool drivers, both with Docker present. Then the Mac for the arm64 path. `gate` for the unavailable state. | 2–3 sessions |
|
||||||
| **2 — operations** | The Library's **ISO** shelf (directory, upload/URL/path, attach, New VM from ISO) **with the VGA console** (`spice-html5`), snapshot schedules UI, nightly exports with retention and the per-machine export directory, limits editor, bind mounts, the LAN-bridge step, instance alert default, cloud-init presets. | 1–2 sessions |
|
| **2 — operations (done 2026-10-09, except the LAN bridge)** | The Library's **ISO** shelf (directory, upload/URL/path, attach, New VM from ISO) **with the VGA console** (`spice-html5`), snapshot schedules UI, nightly exports with retention and the per-machine export directory, limits editor, bind mounts, the LAN-bridge step, instance alert default, cloud-init presets. | 1–2 sessions |
|
||||||
| **3 — the rest** | Proxmox import (archives become Library images), GPU device for containers, Windows via `distrobuilder repack-windows`, GPU passthrough to a VM with its warning. | as wanted |
|
| **3 — the rest** | Proxmox import (archives become Library images), GPU device for containers, Windows via `distrobuilder repack-windows`, GPU passthrough to a VM with its warning. | as wanted |
|
||||||
|
|
||||||
### API sketch
|
### API sketch
|
||||||
|
|||||||
Reference in New Issue
Block a user