Benutzerdefinierte Geräteprofile
NetCrunch ermöglicht die Erstellung benutzerdefinierter Profile mithilfe einfacher YAML-Definitionen, die das Ausführen von Befehlen über SSH oder Telnet und die Verarbeitung von Ausgaben ermöglichen
Die NetCrunch-Konfigurationsmanagement-Engine wurde vom Open-Source-Projekt Oxidized inspiriert und verwendet ähnliche Konzepte zur Beschreibung von Sitzungsparametern und der Verarbeitung von Befehlsausgaben.
Es gibt jedoch wichtige Unterschiede.
- Wir haben uns entschieden, Geräteprofile deklarativ zu beschreiben, sodass keine Programmierung erforderlich ist
- Reguläre Ausdrücke werden in Javascript verarbeitet
Das einzige Wissen, das zur Beschreibung des Gerätekonfigurationsprofils erforderlich ist, ist ein gutes Verständnis und Wissen über reguläre Ausdrücke.
Aufforderung festlegen
Das Aufforderungsformat ist erforderlich, um zu erkennen, wann das Terminal bereit ist, den nächsten Befehl zu lesen und wann die Ausgabe des vorherigen Befehls endet. Sie können eine oder mehrere Aufforderungsausdrücke festlegen.
Einzelne Aufforderung
prompt: "/^(\r*[\w\s.@()/:-]+[#>]\s?)$/m"
Mehrere Aufforderungen
prompt: - /^(?:\x1b[..h)?[\w.-]+# $/m - /^\w+@\w+([-.]\w+)*>((?.+)?\s)?/m
Kommentar festlegen
Dies ist ein Kommentarpräfix, das zu einigen Befehlsausgaben wie show version hinzugefügt wird.
comment: "# "
Im obigen Fall haben wir ein zweistelliges Aufforderungspräfix # und ein einzelnes Leerzeichen definiert.
Ausgabeverarbeitungsblock
Nach jedem Befehl können wir beschreiben, wie die Ausgabe verarbeitet werden soll.
lines: range: 1..-1 reject: - /^\r$/ - /time/ comment:
Im obigen Beispiel wird die Engine:
- die erste und letzte Zeile entfernen (range: 1..-1)
- leere Zeilen (ablehnen) und diejenigen, die den Ausdruck time enthalten, überspringen
- alle Ausgaben kommentieren
Verarbeitung für alle Befehle
Es beginnt mit all: und dann können Sie den Verarbeitungsblock für jeden Befehl beschreiben. Es ist üblich, die erste und die letzte Zeile zu entfernen.
all: lines: # immer die erste und letzte Zeile abschneiden range: 1..-1
Verarbeitung von Geheimnissen
Wir können die Konfiguration so herunterladen, wie sie ist, oder Geheimnisse wie Passwörter, Sicherheitsschlüssel und andere entfernen, indem wir sie durch einen Text ersetzen.
Die Verarbeitung hängt vom Optionsstatus bei der Konfiguration des Device Config-Sensors für einen bestimmten Knoten ab.
secret: /^(create snmp community) \S+/gm: "$1 <removed>" /^(create snmp group) \S+/gm: "$1 <removed>"
Definition der auszuführenden Befehle
Es ist einfach. Im commands: Block fügen Sie jeden Befehl hinzu und beschreiben danach die Verarbeitung, falls erforderlich.
Befehlsausgabe kommentiert
commands: show inventory: comment:
Befehl mit Verarbeitungsblock
commands: show version: lines: reject: - /([Ss]ystem [Uu]p\s?[Tt]ime|[Uu]p\s?[Tt]ime is \d)/ comment:
Regulärer Befehl mit vollständiger Ausgabe
commands: "show running-config | nomore":
Sitzungs- und Protokollkonfiguration
Der Konfigurationsblock beginnt mit config: Dann wird der Block durch die Protokollliste beschrieben, auf die er sich bezieht.
Telnet
Telnet ist manchmal die einzige Möglichkeit, auf das Gerät zuzugreifen. Es erfordert die Einstellung von regulären Ausdrücken, um die Aufforderung für Benutzername und Passwort zu erkennen.
telnet: # Aufforderungen für interaktives Telnet-Login festlegen login: username: /Username:/ password: /Password:/
SSH
SSH spezifisch
ssh: # Terminaloptionen pty: charsWide: 1000
Ausführungsmodus
Befehle können in einer interaktiven Sitzung oder im exec Modus ausgeführt werden. Um den exec Modus zu aktivieren, fügen Sie hinzu
ssh: exec: true
Befehl, der zu Beginn und am Ende der Sitzung ausgeführt wird
ssh, telnet: # Befehle, die nach dem Login ausgeführt werden afterLogin: - "no page" # Befehle, die vor dem Logout ausgeführt werden beforeLogout: - logout y n
Umgang mit interaktiven Aufforderungen
Viele Geräte erlauben das Deaktivieren des Paging, indem sie nach dem Login einen Befehl aufrufen oder eine Pipe zum Befehl hinzufügen, aber einige fehlen diese Funktion. Für solche Gelegenheiten können Sie reguläre Ausdrücke definieren, um die Terminalausgabe zu überwachen und die Reaktion, die normalerweise das Senden eines Zeichens ist.
Zum Beispiel
expect: /Press any key to continue(\x1b[\??\d+(;\d+)[A-Za-z])$/m: send: " " replace: ""
In diesem Fall sendet das Programm, wenn die Nachricht erscheint, ein einzelnes Leerzeichen und entfernt dann die Aufforderung aus der Ausgabe.