Alt und neu
Früher war alles besser - oder zumindest: anders. Um ein Cisco IOS(-XE) Gerät bequem über Nacht einzuspiele genügte es, die Bootvariable auf das neue Image zeigen zu lassen und mit reload in oder reload at einen Neustart des Gerätes zu planen. Das direkte Laden des Imagefiles nennt Cisco mittlerweile den Bundle Mode.
Mit Einführung des Install-Modes werden die Images nicht mehr direkt geladen, sondern im Vorfeld entpackt. Das soll den Bootvorgang beschleunigen und die Belegung des Arbeitsspeichers verringern. Allerdings gibt es keine eingebaute Methode, den fälligen Neustart durch das Update in die Nachtstunden zu verlegen. Man müsste also die Installation des Updates in der Nacht starten - ziemlich unkomfortabel, wenn man eine Flotte an Geräten updaten will.
EEM Skript
Doch es gibt Abhilfe: Wir bedienen uns hier des Embedded Event Managers. Das kleine Skript führt die Installation des Updates zeitgesteuert aus.
event manager applet NIGHTLY_UPGRADE
event timer cron cron-entry "0 2 * * *" maxrun 3600
action 1.0 cli command "enable"
action 2.0 cli command "configure terminal"
action 2.1 cli command "no event manager applet NIGHTLY_UPGRADE"
action 2.2 cli command "end"
action 2.3 cli command "write memory"
action 3.0 cli command "install add file flash:<IMAGE>.bin activate commit prompt-level none"
Der Zeitpunkt wird in Cron-Syntax mitgegeben. Im Beispiel um 2:00 Uhr nachts. Über maxrun wird die erlaubte Ausführungszeit in Sekunden angegeben. Der Defaultwert wären 20s, was für das Update viel zu wenig ist.
Zunächst löscht sich das Skript selbst wieder aus der Konfig und speichert ab. Wir wollen das Update ja nur einmal ausführen. Das sind alle Actions unter der Nummer 2. Die laufende Ausführung wird durch das Löschen nicht beeinchträchtigt.
Die Action 3.0 installiert dann das Update. Durch prompt-level none läuft die Ausführung im nicht-interaktiven Modus und verlangt keine Bestätigung mehr. Das Update wird installiert und anschließend erfolgt direkt der Neustart.