# Hardware reference — boma > Hand-maintained source of truth for **physical** compute + network gear and > **workload placement intent**. The two machine-readable tables (Node capacity, > Workload placement) are parsed by `scripts/capacity-scan.py` — keep their > headers intact. Evaluated by `/capacity-review`. See ADR-012. > > _Status: skeleton. Replace example rows with real hardware once the cluster is > stood up (STATUS.md tracks real-vs-planned)._ ## 1. Physical compute ### pve0 - **Model / form factor:** _TBD (e.g. Minisforum MS-01, mini-PC)_ - **CPU:** _TBD (e.g. i9-13900H, 14C/20T)_ - **RAM:** _TBD total; max _; free DIMM slots _ - **Storage:** _TBD (disks → pools, e.g. 2× 2 TB NVMe → `local-zfs`)_ - **NICs:** _eno1 trunk (vmbr0), eno2 corosync (vmbr1)_ - **Notes:** _warranty, quirks_ ### ubongo (control node — outside the cluster) - **Model / form factor:** _TBD (x86-64 mini-PC / USFF, e.g. N100 or refurb micro)_ - **CPU:** _TBD (target 4 cores, x86-64)_ - **RAM:** _TBD (target 16 GB)_ - **Storage:** 1 TB NVMe (ThinkCentre M70q Tiny; i3-10100T, 16 GB) — over-spec for Tier-1 restore-verify (ADR-022) - **NICs:** _wired GbE_ - **Notes:** _always-on; control plane + AI-worker + local test runner (ADR-015); not a Proxmox guest_ ### fisi (backup node — outside the cluster; provisional) - **Model / form factor:** HP Elite 600 G9 (tower) - **CPU:** i-series (12th-gen), x86-64 — featherweight for a data-only restic node - **RAM:** 16 GB+ (TBD exact) - **Storage:** OS NVMe + **2× 8 TB HDD in a mirror** (ZFS/mdraid → 8 TB usable, survives one disk) - **NICs:** wired GbE - **Notes:** off-cluster pull backup node (ADR-022); owns the restic repo, runs rclone→pCloud, docks the rotated USB air-gap drives. **Pending:** SATA power cable to the HDDs. Crown-jewel host → full `base` hardening. Assignment provisional (revisit when all hardware on hand). _(repeat for pve1, pve2, askari)_ ## 2. Network gear | device | model | ports | poe | throughput | uplinks | notes | |----------|-------|-------|-----|------------|---------|-------| | opnsense | _TBD_ | _TBD_ | n/a | _TBD_ | WAN+LAN | dedicated hardware | | switch | _TBD_ | _TBD_ | _TBD_ | _TBD_ | trunk | managed, 802.1q | | ap1 | _TBD_ | _TBD_ | _TBD_ | _TBD_ | trunk | multi-SSID per VLAN | ## 3. Workload placement & intent The numeric columns (`cores, ram_mb, disk_gb`) feed `capacity-scan.py`; the free-text columns feed `/capacity-review`'s judgement. | workload | node | cores | ram_mb | disk_gb | criticality | ha_intent | profile | constraints | growth | |----------|------|-------|--------|---------|-------------|-----------|---------|-------------|--------| | dns1 | pve0 | 1 | 512 | 10 | high | pair/dns2 | tiny/steady | anti-affinity: dns2 on a different node | flat | | dns2 | pve1 | 1 | 512 | 10 | high | pair/dns1 | tiny/steady | anti-affinity: dns1 on a different node | flat | ## 4. Node capacity (machine-readable) Physical totals per node. Integers; `ram_gb` and `disk_gb` may be decimals. | node | cores | ram_gb | disk_gb | |------|-------|--------|---------| | pve0 | 20 | 64 | 4000 | | pve1 | 20 | 64 | 4000 | | ubongo | 4 | 16 | 1000 | | fisi | 4 | 16 | 8000 | ## 5. Capacity notes Free-text running notes for the evaluator (trends, planned moves, upgrade ideas).