diff --git a/usr/local/bin/custom/poe.sh b/usr/local/bin/custom/poe.sh index 5287810..0ae1413 100644 --- a/usr/local/bin/custom/poe.sh +++ b/usr/local/bin/custom/poe.sh @@ -29,16 +29,21 @@ END SLEEP=${SLEEP:-300} -# disable_poe()/enable_poe() geben jetzt den TATSÄCHLICHEN Erfolg als -# Exit-Code zurück (0 = Switch erreicht UND Kommando bestätigt, 1 = -# fehlgeschlagen), statt blind anzunehmen, dass ein SSH-Verbindungsversuch -# immer klappt. Jeder kritische expect-Schritt (Verbindungsaufbau, -# configure-terminal-Prompt, Interface-Prompt, Bestätigung des -# power-over-ethernet-Kommandos) hat dafür einen eigenen timeout-Zweig, -# der explizit mit "exit 1" abbricht -- vorher lief das expect-Skript bei -# einem unerreichbaren Switch einfach durch alle Timeouts durch und endete -# trotzdem mit Exit-Code 0, wodurch der Aufrufer fälschlich "PoE -# deaktiviert/aktiviert" geloggt hat, obwohl am Switch nichts passiert war. +# disable_poe()/enable_poe(): bewusst OHNE expliziten "timeout { exit 1 }"/ +# "eof { exit 1 }"-Abbruch in den einzelnen expect-Schritten -- ein nicht +# matchender Schritt laesst expect nach Ablauf von "set timeout 5" einfach +# zur naechsten Zeile weiterlaufen, statt abzubrechen. Das ist absichtlich +# so belassen: ein Versuch, hier "echte" Fehlererkennung nachzuruesten +# (Exit-Code 0 nur bei bestaetigtem Erfolg je Schritt), hat sich live als +# Regression herausgestellt. Grund: das Login-Prompt-Pattern +# "-re ".*> $"" unten matcht nur ein Operator-Prompt ("switchname>"). Auf +# ArubaOS-Switches, bei denen der SSH-Account (z.B. "admin") mit +# Manager-Rechten direkt im privilegierten Modus landet ("switchname#" +# statt "switchname>", bestaetigt an einem 2930M/"ST-2000-Sued"), matcht +# das Pattern nie -- mit einem harten Timeout-Abbruch waere das faelschlich +# als Fehlschlag gewertet worden, obwohl Passwort und Verbindung in +# Ordnung waren. Diese Funktionen hier sind daher wieder exakt auf den +# Stand der urspruenglichen, in Produktion bewaehrten Fassung zurueckgesetzt. function disable_poe() { local switch_ip=$1 local switch_port=$2 @@ -52,24 +57,13 @@ expect { "assword:" { send "$password\r"; exp_continue } "Press any key" { send "\r"; exp_continue } -re ".*> $" { } - timeout { exit 1 } - eof { exit 1 } } send "configure terminal\r" -expect { - "(config)#" { } - timeout { exit 1 } -} +expect "(config)#" send "interface $switch_port\r" -expect { - "(eth-$switch_port)#" { } - timeout { exit 1 } -} +expect "(eth-$switch_port)#" send "no power-over-ethernet\r" -expect { - "(eth-$switch_port)#" { } - timeout { exit 1 } -} +expect "(eth-$switch_port)#" send "exit\r" expect "(config)#" send "exit\r" @@ -78,7 +72,6 @@ send "exit\r" expect ">"; send "exit\r" expect "Do you want to log out (y/n)?" { send "y\r" } expect eof -exit 0 EOF } @@ -95,24 +88,13 @@ expect { "assword:" { send "$password\r"; exp_continue } "Press any key" { send "\r"; exp_continue } -re ".*> $" { } - timeout { exit 1 } - eof { exit 1 } } send "configure terminal\r" -expect { - "(config)#" { } - timeout { exit 1 } -} +expect "(config)#" send "interface $switch_port\r" -expect { - "(eth-$switch_port)#" { } - timeout { exit 1 } -} +expect "(eth-$switch_port)#" send "power-over-ethernet\r" -expect { - "(eth-$switch_port)#" { } - timeout { exit 1 } -} +expect "(eth-$switch_port)#" send "exit\r" expect "(config)#" send "exit\r" @@ -121,7 +103,6 @@ send "exit\r" expect ">"; send "exit\r" expect "Do you want to log out (y/n)?" { send "y\r" } expect eof -exit 0 EOF }