PDF

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.