diff --git a/ansible/plays/install-edge-host.yml b/ansible/plays/install-edge-host.yml index cb00babb..6ce73805 100644 --- a/ansible/plays/install-edge-host.yml +++ b/ansible/plays/install-edge-host.yml @@ -1,5 +1,6 @@ --- -# Bare-metal Arch Linux edge host (N100) — replaces the k8s-edge Talos VM +# Bare-metal Arch Linux edge host (Dell Wyse 3040, internal eMMC) — replaces +# the k8s-edge Talos VM # (opentofu vm_153) as the home for hardware-bound services: # - zwave-js-ui (ZWA-2 Z-Wave USB radio, docker compose) # - sml2mqtt (FTDI power-meter reader, docker compose) diff --git a/ansible/roles/edge-host/README.md b/ansible/roles/edge-host/README.md index 6c1c2478..8e461592 100644 --- a/ansible/roles/edge-host/README.md +++ b/ansible/roles/edge-host/README.md @@ -1,4 +1,4 @@ -# edge-host — bare-metal Arch N100 (replaces the k8s-edge Talos VM) +# edge-host — bare-metal Arch thin client (replaces the k8s-edge Talos VM) Runs the hardware-bound services that used to be pinned to the `k8s-edge` Talos node (opentofu `vm_153_k8s_edge.tf`), plus the new CAN bridge: @@ -11,8 +11,13 @@ Talos node (opentofu `vm_153_k8s_edge.tf`), plus the new CAN bridge: Everything else that once lived on k8s-edge (HA core, matter-server, OTBR, music-assistant) already moved to the general node pool and stays in the -cluster — they need VLAN L2 presence, not USB, so a single LAN NIC on the -N100 is sufficient. +cluster — they need VLAN L2 presence, not USB, so a single LAN NIC is +sufficient. + +The deployed unit is a **Dell Wyse 3040** (Atom x5-Z8350, 2 GB RAM) on a +~7.3 GB internal **eMMC** (`/dev/mmcblk0`) — see "Logging & eMMC" for the +flash-wear handling that hardware implies. The installer also supports an +N100/NVMe box; it autodetects the target disk, so either works. Rationale for leaving Kubernetes for the CAN part: the stock Talos kernel ships with `CONFIG_CAN` unset (siderolabs/talos#7686), so SocketCAN cannot @@ -24,8 +29,9 @@ Build and boot the dedicated installer image — see `images/edge-host-iso/README.md`. Short version: 1. `sudo pacman -S archiso && sudo images/edge-host-iso/build.sh` -2. Write ISO to a USB stick, boot the N100 from it, run `edge-install` - (partitions the NVMe, installs the ansible-ready base system with SSH +2. Write ISO to a USB stick, boot the target box from it, run `edge-install` + (partitions the internal disk — NVMe if present, else the eMMC; the + installer autodetects — installs the ansible-ready base system with SSH keys, DHCP, docker — asks for confirmation before wiping). 3. Add the DHCP reservation/DNS entry for `edge-1.srv.renner.uno` on the UDM, confirm `ssh root@edge-1.srv.renner.uno` works. @@ -69,7 +75,7 @@ The Z-Wave network keys do NOT need separate handling — they live in ## Cutover checklist (service downtime: minutes, do per-service) Preparation: -- [ ] `vault.yml` populated (above), play runs green against the N100 +- [ ] `vault.yml` populated (above), play runs green against edge-1 - [ ] CAN: Innomaker adapter connected to the VX3 external CAN port, `ip -details link show can0` shows `state ERROR-ACTIVE bitrate 250000`, `candump can0 -n 5` shows frames @@ -78,7 +84,7 @@ zwave-js (order matters — never two servers on one radio): - [ ] Copy the store out of the PVC while the pod still runs: `kubectl -n home-assistant exec deploy/zwave-js -- tar cf - -C /usr/src/app store | tar xf - -C /opt/edge-host/zwave-js/` - [ ] Scale down in-cluster: `kubectl -n home-assistant scale deploy/zwave-js --replicas 0` -- [ ] Move the ZWA-2 stick to the N100, `docker compose up -d zwave-js` +- [ ] Move the ZWA-2 stick to edge-1, `docker compose up -d zwave-js` - [ ] Point HA `zwave_js` integration at `ws://edge-1.srv.renner.uno:3000` - [ ] Nodes alive in the UI on :8091 → remove the flux kustomization `home-assistant-zwavejs` + PVC in a follow-up PR diff --git a/ansible/roles/edge-host/defaults/main.yml b/ansible/roles/edge-host/defaults/main.yml index 50e3c803..846ee02a 100644 --- a/ansible/roles/edge-host/defaults/main.yml +++ b/ansible/roles/edge-host/defaults/main.yml @@ -29,7 +29,7 @@ edge_mqtt_host: mqtt.renner.uno edge_mqtt_port: 1883 # --- USB devices (stable by-id symlinks). After physically moving the -# sticks to the N100, verify with `ls -l /dev/serial/by-id/` — the by-id +# sticks to edge-1, verify with `ls -l /dev/serial/by-id/` — the by-id # names travel with the device, not the host, so these should not change. edge_zwave_device: /dev/serial/by-id/usb-Nabu_Casa_ZWA-2_80B54EE15720-if00 edge_stromzaehler_device: /dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_DK0E1GP5-if00-port0