fix(installer): --update-only ohne --token/--name auf bestehender Node
Zwei Fehler, gleiche Wurzel — die Werte aus /etc/default/telegraf wurden nur vom Auto-Updater gelesen, nicht von einem manuellen --update-only: 1. Abbruch "Kein Token", obwohl der Token auf der Maschine liegt. Der Weg fuer eine Reparatur auf einer laufenden Node war damit verschlossen. 2. Stiller: ohne --name fiel NODE_NAME auf den Hostnamen zurueck. Auf einem KeyHelp-Host (x22 vs x22.idx.wf-keyhelp) waere die Node unter falschem Label registriert worden; ein PVE-Knoten haette seine Rolle verloren (kein pvesh-Drop-in mehr). Fix: Token, NODE_NAME, ROLE, COLLECTOR, PVE_* aus der Datei nachladen, aber nur wenn die Kommandozeile nichts anderes sagt (NAME_GIVEN/ROLE_GIVEN). Zusaetzlich ein zweiter, ernster Fund aus dem Test: APACHE_FILES blieb leer, wenn ROLE=apache gesetzt war, Apache aber nicht erkannt wurde. Die Conf rendert dann zu "files = " -> ungueltiges TOML -> Telegraf startet nicht -> ALLE Metriken der Node aus. Berechnung jetzt unabhaengig vom Guard, plus Sicherheitsnetz vor dem Rendern.
This commit is contained in:
1 parent
24c04f8eff
commit
d684ce860d
1 file changed
+62
-5
+62
-5
@@ -41,6 +41,10 @@ COLLECTOR="${COLLECTOR:-}" # nur setzen fuer den Direktweg im NetBird
|
|||||||
TELEGRAF_TOKEN="${TELEGRAF_TOKEN:-}"
|
TELEGRAF_TOKEN="${TELEGRAF_TOKEN:-}"
|
||||||
NODE_NAME="${NODE_NAME:-$(hostname -s 2>/dev/null || hostname)}"
|
NODE_NAME="${NODE_NAME:-$(hostname -s 2>/dev/null || hostname)}"
|
||||||
ROLE="auto"
|
ROLE="auto"
|
||||||
|
# Wurden --name/--role auf der Kommandozeile gesetzt? Nur dann darf ein
|
||||||
|
# Update-Lauf die in /etc/default/telegraf hinterlegten Werte ueberschreiben.
|
||||||
|
NAME_GIVEN=0
|
||||||
|
ROLE_GIVEN=0
|
||||||
PVE_TOKEN="${PVE_TOKEN:-}"
|
PVE_TOKEN="${PVE_TOKEN:-}"
|
||||||
PVE_NODE="${PVE_NODE:-}"
|
PVE_NODE="${PVE_NODE:-}"
|
||||||
PVE_URL="${PVE_URL:-}"
|
PVE_URL="${PVE_URL:-}"
|
||||||
@@ -62,10 +66,10 @@ REMOVE_TIMER=0
|
|||||||
|
|
||||||
while [ $# -gt 0 ]; do
|
while [ $# -gt 0 ]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--name) NODE_NAME="$2"; shift 2 ;;
|
--name) NODE_NAME="$2"; NAME_GIVEN=1; shift 2 ;;
|
||||||
--collector) COLLECTOR="${2:-}"; shift 2 ;;
|
--collector) COLLECTOR="${2:-}"; shift 2 ;;
|
||||||
--token) TELEGRAF_TOKEN="$2"; shift 2 ;;
|
--token) TELEGRAF_TOKEN="$2"; shift 2 ;;
|
||||||
--role) ROLE="$2"; shift 2 ;;
|
--role) ROLE="$2"; ROLE_GIVEN=1; shift 2 ;;
|
||||||
--pve-token) PVE_TOKEN="$2"; shift 2 ;;
|
--pve-token) PVE_TOKEN="$2"; shift 2 ;;
|
||||||
--pve-node) PVE_NODE="$2"; shift 2 ;;
|
--pve-node) PVE_NODE="$2"; shift 2 ;;
|
||||||
--pve-url) PVE_URL="$2"; shift 2 ;;
|
--pve-url) PVE_URL="$2"; shift 2 ;;
|
||||||
@@ -90,6 +94,51 @@ done
|
|||||||
|
|
||||||
log() { printf '\033[1;34m[netbird-telegraf]\033[0m %s\n' "$*"; }
|
log() { printf '\033[1;34m[netbird-telegraf]\033[0m %s\n' "$*"; }
|
||||||
|
|
||||||
|
# --------------------------------------------------------------------------
|
||||||
|
# Bestehende Installation: Werte aus /etc/default/telegraf nachladen
|
||||||
|
#
|
||||||
|
# WARUM: Der Auto-Updater liest Token, NODE_NAME und ROLE aus dieser Datei und
|
||||||
|
# gibt sie dem Unterlauf mit. Ein MANUELLER `--update-only`-Lauf tat das nicht
|
||||||
|
# und brach an der Token-Pruefung ab ("Kein Token"), obwohl der Token auf der
|
||||||
|
# Maschine liegt. Die Datei ist die Quelle der Wahrheit fuer eine bereits
|
||||||
|
# eingerichtete Node — die Kommandozeile ueberschreibt sie nur, wenn sie
|
||||||
|
# ausdruecklich etwas anderes sagt.
|
||||||
|
#
|
||||||
|
# Zweiter, stiller Fehler derselben Ursache: ohne --name fiel NODE_NAME auf den
|
||||||
|
# Hostnamen zurueck. Auf einem KeyHelp-Host heisst der Host aber nicht wie die
|
||||||
|
# Node ('x22' vs 'x22.idx.wf-keyhelp') — ein Update-Lauf haette die Node unter
|
||||||
|
# falschem Label neu registriert. Ebenso haette ein PVE-Knoten ohne --role seine
|
||||||
|
# Rolle auf 'auto' verloren (kein pvesh-Drop-in mehr).
|
||||||
|
# --------------------------------------------------------------------------
|
||||||
|
_rd_default() {
|
||||||
|
sed -n "s/^$1=//p" /etc/default/telegraf 2>/dev/null | head -1 \
|
||||||
|
| sed "s/^['\"]//; s/['\"]$//"
|
||||||
|
}
|
||||||
|
if [ -r /etc/default/telegraf ]; then
|
||||||
|
if [ -z "$TELEGRAF_TOKEN" ]; then
|
||||||
|
TELEGRAF_TOKEN="$(_rd_default TELEGRAF_TOKEN)"
|
||||||
|
[ -n "$TELEGRAF_TOKEN" ] && log "Token aus /etc/default/telegraf uebernommen."
|
||||||
|
fi
|
||||||
|
[ -z "$COLLECTOR" ] && COLLECTOR="$(_rd_default COLLECTOR)"
|
||||||
|
if [ "$NAME_GIVEN" -eq 0 ]; then
|
||||||
|
_n="$(_rd_default NODE_NAME)"
|
||||||
|
if [ -n "$_n" ] && [ "$_n" != "$NODE_NAME" ]; then
|
||||||
|
log "Node-Name aus /etc/default/telegraf uebernommen: $_n"
|
||||||
|
NODE_NAME="$_n"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$ROLE_GIVEN" -eq 0 ]; then
|
||||||
|
_r="$(_rd_default ROLE)"
|
||||||
|
if [ -n "$_r" ] && [ "$_r" != "none" ]; then
|
||||||
|
log "Rolle aus /etc/default/telegraf uebernommen: $_r"
|
||||||
|
ROLE="$_r"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
[ -z "$PVE_NODE" ] && PVE_NODE="$(_rd_default PVE_NODE)"
|
||||||
|
[ -z "$PVE_URL" ] && PVE_URL="$(_rd_default PVE_URL)"
|
||||||
|
# APACHE_LOG kommt als gequotete Liste — die Quotes entfernt _rd_default.
|
||||||
|
fi
|
||||||
|
|
||||||
# /etc/default/telegraf robust einlesen. Ein direktes "." bricht die ganze
|
# /etc/default/telegraf robust einlesen. Ein direktes "." bricht die ganze
|
||||||
# Installation ab, wenn die Datei einen unquoted Wert mit Leerzeichen oder
|
# Installation ab, wenn die Datei einen unquoted Wert mit Leerzeichen oder
|
||||||
# Sonderzeichen enthaelt (alte APACHE_LOG-Zeile mit zwei Pfaden:
|
# Sonderzeichen enthaelt (alte APACHE_LOG-Zeile mit zwei Pfaden:
|
||||||
@@ -291,8 +340,13 @@ fi
|
|||||||
# APACHE_LOG kann mehrere, leerzeichengetrennte Pfade enthalten -> als
|
# APACHE_LOG kann mehrere, leerzeichengetrennte Pfade enthalten -> als
|
||||||
# TOML-Liste rendern. Achtung: Pfade mit Leerzeichen sind in Apache-Logs
|
# TOML-Liste rendern. Achtung: Pfade mit Leerzeichen sind in Apache-Logs
|
||||||
# ungewoehnlich; wir quoten jeden Eintrag einzeln.
|
# ungewoehnlich; wir quoten jeden Eintrag einzeln.
|
||||||
if [ "$HAS_APACHE" -eq 1 ]; then
|
# APACHE_FILES IMMER berechnen, NICHT nur bei erkanntem Apache.
|
||||||
APACHE_FILES=""
|
# Realer Fehler: bei ROLE=apache ohne Apache-Erkennung (z. B. httpd auf RHEL,
|
||||||
|
# oder Apache wurde entfernt) blieb die Variable leer. Die Conf rendert dann zu
|
||||||
|
# "files = " — ungueltiges TOML, Telegraf startet nicht mehr, ALLE Metriken aus.
|
||||||
|
# Der Guard war die Ursache; die Berechnung selbst ist harmlos.
|
||||||
|
APACHE_FILES=""
|
||||||
|
if [ "$HAS_APACHE" -eq 1 ] || [ "$ROLE" = "apache" ]; then
|
||||||
# set -f: Pfadnamen-Expansion abschalten! Sonst ersetzt die Shell die
|
# set -f: Pfadnamen-Expansion abschalten! Sonst ersetzt die Shell die
|
||||||
# Glob-Muster durch die aktuell vorhandenen Dateien — die Conf enthielte
|
# Glob-Muster durch die aktuell vorhandenen Dateien — die Conf enthielte
|
||||||
# feste Einzelpfade und jede NEUE Domain fiele heraus, bis der Installer
|
# feste Einzelpfade und jede NEUE Domain fiele heraus, bis der Installer
|
||||||
@@ -305,8 +359,11 @@ if [ "$HAS_APACHE" -eq 1 ]; then
|
|||||||
set +f
|
set +f
|
||||||
[ -n "$APACHE_FILES" ] || APACHE_FILES='"/var/log/apache2/access.log"'
|
[ -n "$APACHE_FILES" ] || APACHE_FILES='"/var/log/apache2/access.log"'
|
||||||
APACHE_FILES="[$APACHE_FILES]"
|
APACHE_FILES="[$APACHE_FILES]"
|
||||||
export APACHE_FILES
|
|
||||||
fi
|
fi
|
||||||
|
# Sicherheitsnetz: die Variable MUSS nicht-leer sein, bevor apache.conf gerendert
|
||||||
|
# wird. Ein leerer Wert erzeugt ungueltiges TOML und kostet die ganze Node.
|
||||||
|
[ -n "${APACHE_FILES:-}" ] || APACHE_FILES='["/var/log/apache2/access.log"]'
|
||||||
|
export APACHE_FILES
|
||||||
if [ "$ROLE" = "auto" ]; then
|
if [ "$ROLE" = "auto" ]; then
|
||||||
ROLE="none"
|
ROLE="none"
|
||||||
[ "$IS_PVE" -eq 1 ] && ROLE="proxmox"
|
[ "$IS_PVE" -eq 1 ] && ROLE="proxmox"
|
||||||
|
|||||||
Reference in new issue
Block a user