Files
homelab-monitor/config/hosts.yaml
T
jhodgkin 04282232cc
CI / web (push) Successful in 17s
CI / api (push) Successful in 23s
Add LAN device discovery (ping sweep + ARP, known/unknown labeling)
Runs as a host-level systemd timer on CT122 (scripts/discover-devices.sh)
rather than inside the api container, since real ARP entries live in the
host's network namespace, not Docker's bridge network. See
docs/device-discovery.md for the full writeup, including why literal
passive-only ARP reading was dropped (near-empty result in practice).

API reads the resulting JSON file each poll cycle, cross-references
config/hosts.yaml's knownDevices list by IP, and serves /api/devices.
Dashboard gets a new "Network Devices" table.

Closes #9.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-12 20:49:22 -06:00

86 lines
2.4 KiB
YAML

# Declares what the dashboard monitors. No secrets here — credentials come from
# environment variables (see .env.example) so this file can be committed safely.
proxmox:
host: 192.168.1.144
node: pve
# Bare-metal boxes Proxmox can't see. Connects with the dedicated
# `monitor` SSH key (see docs/ssh-collector-key-setup.md), read-only commands only.
sshHosts:
- id: omv
displayName: omv
group: Bare Metal
host: 192.168.1.180
username: root
diskPaths:
- path: /
label: os
- path: /srv/mergerfs/media
label: media
- id: ripper
displayName: ripper
group: Bare Metal
host: 192.168.1.171
username: jhodgkin
diskPaths:
- path: /
label: os
# LAN device discovery reads devices-raw.json (produced by scripts/discover-devices.sh
# via a systemd timer on the deploy host, see docs/device-discovery.md) and labels any
# IP found here as "known" instead of "unknown". Keyed by IP since these are all DHCP
# reservations, not truly static — update if a reservation ever changes.
knownDevices:
- ip: 192.168.1.144
name: pve (Proxmox host)
- ip: 192.168.1.180
name: omv (NAS)
- ip: 192.168.1.171
name: ripper (DVD ripper)
- ip: 192.168.1.103
name: homelab-monitor (this dashboard, CT122)
- ip: 192.168.1.226
name: audiobookshelf (CT100)
- ip: 192.168.1.119
name: nextcloud (CT101)
- ip: 192.168.1.185
name: nginxproxymanager (CT102)
- ip: 192.168.1.125
name: immich (CT103)
- ip: 192.168.1.243
name: jellyfin (CT104)
- ip: 192.168.1.245
name: rclone (CT105)
- ip: 192.168.1.168
name: booklore (CT106)
- ip: 192.168.1.200
name: actualbudget (CT107)
- ip: 192.168.1.135
name: graylog (CT108)
- ip: 192.168.1.172
name: zabbix (CT109)
- ip: 192.168.1.215
name: cloudflared (CT110)
- ip: 192.168.1.246
name: pve-runner / lisilou-portfolio (CT111)
- ip: 192.168.1.237
name: thatguylaserworks (CT112)
- ip: 192.168.1.149
name: n8n (CT113)
- ip: 192.168.1.236
name: keycloak (CT114, being decommissioned)
- ip: 192.168.1.184
name: postgresql (CT115)
- ip: 192.168.1.186
name: gitea (CT116)
- ip: 192.168.1.247
name: gitea-runner (CT117)
- ip: 192.168.1.187
name: homeassistant (CT118)
- ip: 192.168.1.183
name: mosquitto (CT119)
- ip: 192.168.1.241
name: vaultwarden (CT120)
- ip: 192.168.1.208
name: authentik (CT121)