fix(setup): comprehensive repair logic for existing sensor-proxy installations
Addresses all issues found in Codex review: 1. Prevent double-install: Check SUMMARY_PROXY_INSTALLED to distinguish between fresh installs (skip repair) vs existing installs (run repair) 2. Fix clustered node failures: Explicitly detect deployment type and bail out with clear error message if neither --ctid nor --standalone can be determined 3. Add health validation: Mirror main install path - verify service active, socket exists, and fetch SSH public key after repair 4. Capture installer output: Show full diagnostics on failure (tail -20) 5. Better error messages: Provide specific manual repair commands when deployment type cannot be auto-detected This ensures the turnkey repair experience works reliably without regressing fresh install UX.
This commit is contained in:
parent
217ed67ee6
commit
6367c7265f
1 changed files with 96 additions and 37 deletions
|
|
@ -4289,49 +4289,108 @@ fi
|
|||
|
||||
# Single temperature monitoring prompt
|
||||
if [ "$SKIP_TEMPERATURE_PROMPT" = true ]; then
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "🔧 Refreshing pulse-sensor-proxy installation"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
echo "Existing proxy detected - updating to refresh tokens and control-plane settings..."
|
||||
echo ""
|
||||
# Check if this is a fresh install from this run (don't repair what we just installed)
|
||||
if [ "$SUMMARY_PROXY_INSTALLED" = "true" ]; then
|
||||
# Socket existed before this script ran - this is a repair scenario
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "🔧 Refreshing pulse-sensor-proxy installation"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
echo "Existing proxy detected - updating to refresh tokens and control-plane settings..."
|
||||
echo ""
|
||||
|
||||
# Download and run installer to refresh config
|
||||
PROXY_INSTALLER="/tmp/install-sensor-proxy-repair-$$.sh"
|
||||
INSTALLER_URL="%s/api/install/install-sensor-proxy.sh"
|
||||
# Download and run installer to refresh config
|
||||
PROXY_INSTALLER="/tmp/install-sensor-proxy-repair-$$.sh"
|
||||
INSTALLER_URL="%s/api/install/install-sensor-proxy.sh"
|
||||
|
||||
if curl --fail --silent --location "$INSTALLER_URL" -o "$PROXY_INSTALLER" 2>/dev/null; then
|
||||
chmod +x "$PROXY_INSTALLER"
|
||||
if curl --fail --silent --location "$INSTALLER_URL" -o "$PROXY_INSTALLER" 2>/dev/null; then
|
||||
chmod +x "$PROXY_INSTALLER"
|
||||
|
||||
# Determine correct installer mode based on how it was originally deployed
|
||||
if [ "$PULSE_IS_CONTAINERIZED" = true ] && [ -n "$PULSE_CTID" ]; then
|
||||
# Was deployed for containerized Pulse - use --ctid mode
|
||||
"$PROXY_INSTALLER" --ctid "$PULSE_CTID" --pulse-server "%s"
|
||||
elif [ "$IS_STANDALONE_NODE" = true ]; then
|
||||
# Standalone node - use --standalone --http-mode
|
||||
"$PROXY_INSTALLER" --standalone --http-mode --pulse-server "%s"
|
||||
# Determine correct installer mode based on how it was originally deployed
|
||||
# Priority: use PULSE_CTID if available, otherwise check standalone status
|
||||
INSTALLER_ARGS=""
|
||||
if [ "$PULSE_IS_CONTAINERIZED" = true ] && [ -n "$PULSE_CTID" ]; then
|
||||
# Was deployed for containerized Pulse - use --ctid mode
|
||||
INSTALLER_ARGS="--ctid $PULSE_CTID --pulse-server %s"
|
||||
elif [ "$IS_STANDALONE_NODE" = true ]; then
|
||||
# Standalone node - use --standalone --http-mode
|
||||
INSTALLER_ARGS="--standalone --http-mode --pulse-server %s"
|
||||
else
|
||||
# Cannot determine deployment type - bail out
|
||||
echo ""
|
||||
echo "⚠️ Cannot determine proxy deployment type (no CTID, not standalone)"
|
||||
echo " Manual repair required. Run one of:"
|
||||
echo " • For container: $PROXY_INSTALLER --ctid <CTID> --pulse-server %s"
|
||||
echo " • For standalone: $PROXY_INSTALLER --standalone --http-mode --pulse-server %s"
|
||||
echo ""
|
||||
rm -f "$PROXY_INSTALLER"
|
||||
INSTALLER_ARGS=""
|
||||
fi
|
||||
|
||||
if [ -n "$INSTALLER_ARGS" ]; then
|
||||
# Run installer and capture output for diagnostics
|
||||
INSTALL_OUTPUT=$("$PROXY_INSTALLER" $INSTALLER_ARGS 2>&1)
|
||||
REPAIR_STATUS=$?
|
||||
|
||||
if [ -n "$INSTALL_OUTPUT" ]; then
|
||||
echo "$INSTALL_OUTPUT"
|
||||
fi
|
||||
|
||||
if [ $REPAIR_STATUS -eq 0 ]; then
|
||||
# Verify proxy health (same checks as main install path)
|
||||
PROXY_HEALTHY=false
|
||||
if systemctl is-active --quiet pulse-sensor-proxy 2>/dev/null; then
|
||||
PROXY_HEALTHY=true
|
||||
echo ""
|
||||
echo "✓ pulse-sensor-proxy refreshed successfully"
|
||||
echo ""
|
||||
else
|
||||
echo ""
|
||||
echo "⚠️ pulse-sensor-proxy service is not active. Check logs with:"
|
||||
echo " journalctl -u pulse-sensor-proxy -n 40"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
if [ "$PROXY_HEALTHY" = true ] && [ ! -S /run/pulse-sensor-proxy/pulse-sensor-proxy.sock ]; then
|
||||
echo " ✗ Proxy socket not found at /run/pulse-sensor-proxy/pulse-sensor-proxy.sock"
|
||||
echo " Check logs with: journalctl -u pulse-sensor-proxy -n 40"
|
||||
PROXY_HEALTHY=false
|
||||
fi
|
||||
|
||||
if [ "$PROXY_HEALTHY" = true ]; then
|
||||
# Fetch the proxy's SSH public key
|
||||
echo " • Fetching SSH public key from proxy..."
|
||||
TEMPERATURE_PROXY_KEY=$(curl -s -f "$PROXY_KEY_URL" 2>/dev/null || echo "")
|
||||
if [ -n "$TEMPERATURE_PROXY_KEY" ] && [[ "$TEMPERATURE_PROXY_KEY" =~ ^ssh-(rsa|ed25519) ]]; then
|
||||
SSH_SENSORS_PUBLIC_KEY="$TEMPERATURE_PROXY_KEY"
|
||||
SSH_SENSORS_KEY_ENTRY="command=\"sensors -j\",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty $TEMPERATURE_PROXY_KEY # pulse-sensor-proxy"
|
||||
echo " ✓ SSH public key retrieved from proxy"
|
||||
else
|
||||
echo " ⚠️ Could not fetch SSH key from proxy"
|
||||
fi
|
||||
TEMPERATURE_ENABLED=true
|
||||
fi
|
||||
else
|
||||
echo ""
|
||||
echo "⚠️ Proxy repair failed"
|
||||
if [ -n "$INSTALL_OUTPUT" ]; then
|
||||
echo ""
|
||||
echo "$INSTALL_OUTPUT" | tail -n 20
|
||||
fi
|
||||
echo ""
|
||||
fi
|
||||
|
||||
rm -f "$PROXY_INSTALLER"
|
||||
fi
|
||||
else
|
||||
# Clustered node without container - use default mode
|
||||
"$PROXY_INSTALLER" --pulse-server "%s"
|
||||
fi
|
||||
|
||||
REPAIR_STATUS=$?
|
||||
rm -f "$PROXY_INSTALLER"
|
||||
|
||||
if [ $REPAIR_STATUS -eq 0 ]; then
|
||||
echo ""
|
||||
echo "✓ pulse-sensor-proxy refreshed successfully"
|
||||
echo ""
|
||||
TEMPERATURE_ENABLED=true
|
||||
else
|
||||
echo ""
|
||||
echo "⚠️ Proxy repair had issues - check logs with: journalctl -u pulse-sensor-proxy -n 40"
|
||||
echo "⚠️ Could not download installer from $INSTALLER_URL"
|
||||
echo " Keeping existing configuration"
|
||||
echo ""
|
||||
fi
|
||||
else
|
||||
echo "⚠️ Could not download installer from $INSTALLER_URL"
|
||||
echo " Keeping existing configuration"
|
||||
echo ""
|
||||
# Fresh install from this run - skip repair
|
||||
echo "Temperature monitoring configured via pulse-sensor-proxy"
|
||||
TEMPERATURE_ENABLED=true
|
||||
fi
|
||||
elif [ "$SSH_ALREADY_CONFIGURED" = true ]; then
|
||||
TEMPERATURE_ENABLED=true
|
||||
|
|
@ -4967,7 +5026,7 @@ fi
|
|||
tokenName, tokenName, tokenName, tokenName, tokenName, tokenName,
|
||||
authToken, pulseURL, serverHost, tokenName, tokenName, storagePerms,
|
||||
sshKeys.ProxyPublicKey, sshKeys.SensorsPublicKey, minProxyReadyVersion,
|
||||
pulseURL, pulseURL, pulseURL, pulseURL, pulseURL, pulseURL, authToken, pulseURL, authToken, pulseURL, pulseURL, pulseURL, pulseURL, pulseURL, pulseURL, tokenName)
|
||||
pulseURL, pulseURL, pulseURL, pulseURL, pulseURL, pulseURL, authToken, pulseURL, authToken, pulseURL, pulseURL, pulseURL, pulseURL, pulseURL, pulseURL, pulseURL, tokenName)
|
||||
|
||||
} else { // PBS
|
||||
script = fmt.Sprintf(`#!/bin/bash
|
||||
|
|
|
|||
Loading…
Reference in a new issue