From 07ad445777fdc8cc3721aaaf067f21299b431ad1 Mon Sep 17 00:00:00 2001 From: reachableceo Date: Wed, 26 Aug 2026 17:46:14 -0500 Subject: [PATCH] fix(audit): scope refinements + authoritative DNS checks [#446] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Exclude the Reston prod VPS (tsys-cloudron-new) from all future audits, mark Home Assistant and Umbrel as by-design no-SSH appliances, and query Technitium directly (dig @netinfra-01) instead of getent so local /etc/hosts entries cannot produce false mismatches. Drops aliases made obsolete by the sectestbed-hfnoc-uisp rename. 💘 Generated with Crush Assisted-by: Crush:glm-5.2 --- scripts/audit-fleet.sh | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/scripts/audit-fleet.sh b/scripts/audit-fleet.sh index 4934cc4..8a6d5f7 100755 --- a/scripts/audit-fleet.sh +++ b/scripts/audit-fleet.sh @@ -11,6 +11,8 @@ # # Emits pipe-delimited results on stdout (one line per host), progress on # stderr, per-host SSH stderr into $1 (default /tmp/fleet-audit-errors.log). +# Scope: tsys-cloudron-new (Reston prod VPS) is excluded entirely; +# homeassistant/umbrel get DNS/name checks but no SSH probe (appliance OSes). # Example: bash scripts/audit-fleet.sh > /tmp/fleet-audit.tsv # set -uo pipefail @@ -19,6 +21,7 @@ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" REMOTE="$REPO_ROOT/tests/remote.sh" REMOTE_DNS="$REPO_ROOT/netinfra/dns-cluster-setup/remote-dns.sh" DNS_SUFFIX="knel.net" +DNS_SERVER="pfv-netinfra-01.knel.net" PROX_NODES=(pfv-tsys1 pfv-tsys3 pfv-tsys4 pfv-tsys5 pfv-tsys6 pfv-tsys7 pfv-tsys9) PROBE='id -un; hostname; sudo -n id -un 2>/dev/null || echo SUDO_FAIL' @@ -29,8 +32,6 @@ knel_alias() { homeassistant) printf '%s' "pfv-bms" ;; umbrel) printf '%s' "tsys-umbrel" ;; ultixfield) printf '%s' "ultix-field" ;; - sectestbed-hfnoc) printf '%s' "sectestbed-hfnoc-uisp" ;; - tsys-cloudron-new) printf '%s' "tsys-cloudron" ;; *) printf '%s' "$1" ;; esac } @@ -54,7 +55,7 @@ classify() { dns_lookup() { local fqdn="$1" want="$2" got - got="$(getent ahostsv4 "$fqdn" 2>/dev/null | awk 'NR==1 {print $1}')" + got="$(dig +short "@$DNS_SERVER" "$fqdn" A 2>/dev/null | tail -n 1)" if [ -z "$got" ]; then printf '%s' "NXDOMAIN" elif [ "$got" = "$want" ]; then @@ -104,12 +105,23 @@ while IFS=$'\t' read -r host ts_ip online; do vm_name="PHYSICAL_OR_MISSING" fi + case "$host" in + tsys-cloudron-new) continue ;; # Reston prod VPS — out of audit scope + esac + if [ "$online" != "true" ]; then printf '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n' \ "$host" "$ts_ip" "$online" "$fqdn" "$dns_result" "$vm_name" "-" "OFFLINE" "-" "-" continue fi + case "$host" in + homeassistant|umbrel) + printf '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n' \ + "$host" "$ts_ip" "$online" "$fqdn" "$dns_result" "$vm_name" "-" "BY_DESIGN_NO_SSH" "-" "-" + continue ;; + esac + read -r user mode <<< "$(classify "$host")" case "$mode" in