- CPU: max speed, bus MHz, L1/L2/L3 cache (from sysfs), voltage, socket type; /proc/cpuinfo fallback for non-root
- Memory sticks: DDR type, form factor, part number, rank, data width, theoretical bandwidth
- GPU: new part type discovered via lspci + /sys/class/drm + nvidia-smi; shows VRAM and display outputs
- discover-only tree updated to show all new fields
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
build-cli.sh
Simple shell script that builds inventory-cli inside Docker and
extracts the binary to build/ (or a custom path). Replaces the
need to use the heavier build-and-load.sh just to compile the CLI.
--help
Replaced the terse usage() stub with a full UNIX man-page style
reference covering NAME, SYNOPSIS, DESCRIPTION, GLOBAL OPTIONS,
COMMANDS (grouped by area), PART TYPES, FIELD KEYS, EXAMPLES,
and NOTES.
discover-only [--type <type>]
New command that runs local hardware discovery without contacting
the inventory server and prints results as an ASCII tree rooted at
the hostname. Each section (CPUs, CPU Slots, Memory Sticks, Memory
Slots, Disks, NICs) lists discovered components with key attributes
inline. Useful for inspection and troubleshooting.
discovery.cpp: store interface name in K_NAME for NICs
ifname (e.g. "nic0", "eno1") is now emitted so discover-only and
the server-side UI can display the kernel device name.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- discovery.cpp: remove K_SERIAL emission from dmidecode CPU "ID" field
(it is the CPUID instruction result, identical across matching processors
in a multi-socket system, not a unique per-slot serial number)
→ upsert_part now falls through to K_SOCKET natural key, correctly
inserting both "Proc 1" and "Proc 2" as separate records
- discovery.cpp: skip memory slot blocks with missing or empty Locator
(HP ProLiant firmware returns a phantom type-17 block with no Locator;
this was causing a 19th slot record to be inserted with empty locator
that could never be deduplicated on subsequent runs)
Verified on HP ProLiant DL360 G7:
cpu=2, cpu_slots=2, memory_sticks=12, memory_slots=18, disks=5, nics=4
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add soft,timeo=30 mount options to all nfs-subdir-external-provisioner
Helm values files so that newly created PVs use non-blocking NFS mounts.
StorageClasses have been patched directly in the cluster.
Motivation: a USB drive disconnect on kube-node-1 caused the NFS server
to go down for ~2.5 days. The HP Proxmox host had hard NFS mounts to
the Dell which blocked df -h indefinitely until the NFS server recovered.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- web-ui/main.go: full CRUD REST API + dark-theme SPA (servers, parts, part-types)
- Dockerfile.cli: add pciutils runtime dep for lspci NIC enrichment
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- media-pool/jellyfin renamed to media-pool/media (mountpoint /data/media unchanged)
- media-pool/immich renamed to media-pool/photos (mountpoint /data/photos unchanged)
- media-pool/minecraft → media-pool/games/minecraft (child of games)
- media-pool/factorio → media-pool/games/factorio (child of games)
- media-pool/openttd → media-pool/games/openttd (child of games)
- Individual game quotas removed; single 1T quota set on media-pool/games
- Removed stale legacy /media-pool/jellyfin etc. from HP /etc/exports
- Updated pvs.yaml section headers to reflect new ZFS dataset names
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add Hook interface (filter + execute contract) in server/hooks/hook.h
- Add HookRunner in server/hooks/hook_runner.h: spawns a detached thread
per matching hook, with try/catch protection against crashes
- Add DnsUpdaterHook in server/hooks/dns_updater_hook.{h,cpp}:
triggers on server name changes, logs in to Technitium, deletes the
old A record (ignores 404), and adds the new A record
Config via env vars: TECHNITIUM_HOST/PORT/USER/PASS/ZONE, DNS_TTL
- Add Database::get_nics_for_server() to resolve a server's IPv4 address
- Wire HookRunner into InventoryServer; cmd_edit_server now fires hooks
with before/after Server snapshots
- Update CMakeLists.txt to include dns_updater_hook.cpp
- Document env vars in Dockerfile
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>