Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Verwendung von RPCs und Betriebsmodusbefehlen in Op-Skripten

Die meisten Junos OS-Befehle im Betriebsmodus verfügen über XML-Äquivalente. Op-Skripte können diese XML-Befehle auf einem lokalen oder remoten Gerät mithilfe des Remote Procedure Call (RPC)-Protokolls ausführen. Alle Befehle im Betriebsmodus mit XML-Äquivalenten sind in der Junos XML API Operational Developer Reference aufgeführt.

Die Verwendung von RPCs und Betriebsmodusbefehlen in Op-Skripten wird in den folgenden Abschnitten ausführlicher erörtert:

Verwenden von RPCs in Op-Skripten

Um eine RPC in einem SLAX- oder XSLT-Op-Skript zu verwenden, fügen Sie die RPC in eine Variablendeklaration ein, und rufen Sie dann die RPC mit der Erweiterungsfunktion mit der jcs:invoke() jcs:execute() RPC-Variable als Argument auf. Die jcs:invoke() Funktion führt die RPC auf dem lokalen Gerät aus. Die jcs:execute() Funktion führt in Verbindung mit einem Verbindungshandgriff die RPC auf einem Remotegerät aus.

Das folgende Snippet, das eine RPC auf dem lokalen Gerät aufruft, wird erweitert und in Beispiel vollständig beschrieben : Anpassen der Ausgabe der Showschnittstellen terse Command Using an Op Script:

XSLT-Syntax

SLAX-Syntax

Das folgende Snippet ruft die gleiche RPC auf einem Remotegerät auf:

XSLT-Syntax

SLAX-Syntax

In Python-Op-Skripten sind RPCs mit Junos PyEZ-APIs einfach auszuführen. Jede Instanz der Junos PyEZ-Klasse Device hat eine rpc Eigenschaft, mit der Sie jede über die Junos XML API verfügbare RPC ausführen können. Nachdem Sie eine Sitzung mit einem lokalen oder remoten Gerät etabliert haben, können Sie die RPC ausführen, indem Sie die Eigenschaft und den rpc RPC-Methodennamen an die Geräteinstanz anfügen. Der Rückgabewert ist ein XML-Objekt, das am ersten Element unter dem <rpc-reply> Tag beginnt.

Um die RPC auf dem lokalen Gerät auszuführen, erstellen Sie die Device Instanz mit einer leeren Argumentliste. Um die RPC auf einem Remotegerät auszuführen, erstellen Sie eine Instanz mit Device den entsprechenden Argumenten, um eine Verbindung zu diesem Gerät herzustellen.

Der folgende Code ruft eine RPC auf dem lokalen Gerät auf und druckt die Antwort:

Python-Syntax

Der folgende Code ruft die gleiche RPC auf einem Remotegerät auf und gibt die Antwort aus:

Python-Syntax

Um eine RPC auf einem Remotegerät auszuführen, muss eine SSH-Sitzung eingerichtet werden. Damit das Skript die Verbindung herstellt, müssen Sie entweder die SSH-Hostschlüsselinformationen für das Remotegerät auf dem lokalen Gerät konfigurieren, auf dem das Skript ausgeführt wird, oder die SSH-Hostschlüsselinformationen für das Remotegerät müssen in der bekannten Hosts-Datei des Benutzers, der das Skript ausführt, vorhanden sein. Konfigurieren Sie für jedes Remotegerät, auf dem eine RPC ausgeführt wird, die SSH-Hostschlüsselinformationen mit einer der folgenden Methoden:

  • Um SSH-bekannte Hosts auf dem lokalen Gerät zu konfigurieren, fügen Sie die host Anweisung ein, und geben Sie die Optionen für Hostnamen und Hostschlüssel für das Remotegerät auf der [edit security ssh-known-hosts] Hierarchieebene der Konfiguration an.

  • Um SSH-Hostschlüsselinformationen manuell abzurufen, geben Sie den set security ssh-known-hosts fetch-from-server hostname Konfigurationsmodus-Befehl aus, um Junos OS anzuweisen, sich mit dem Remotegerät zu verbinden und den Schlüssel hinzuzufügen.

  • Zum manuellen Importieren von SSH-Hostschlüsselinformationen aus einer Datei verwenden Sie den set security ssh-known-hosts load-key-file filename Konfigurationsmodusbefehl und geben Sie die Datei mit bekannten Hosts an.

  • Alternativ kann sich der Benutzer, der das Skript ausführt, bei dem lokalen Gerät, SSH beim Remotegerät anmelden und dann manuell den Hostschlüssel akzeptieren, der der bekannten Hosts-Datei dieses Benutzers hinzugefügt wird. Im folgenden Beispiel ist root bei Router1 angemeldet. Um eine Remote-RPC auf Router2 auszuführen, fügt root den Hostschlüssel von Router2 hinzu, indem der Befehl im ssh router2 Betriebsmodus ausgegeben und der Schlüssel manuell akzeptiert wird.

RPC-Tags für einen Befehl anzeigen

Sie können die RPC-XML-Tags für Befehle im Betriebsmodus in der BEFEHLSZEILE des Geräts anzeigen. Um die RPC XML-Tags für einen Befehl anzuzeigen, geben Sie nach dem Pipe-Symbol (|) ein display xml rpc .

Im folgenden Beispiel werden die RPC-Tags für den show route Befehl angezeigt:

SLAX- und XSLT-Skripte können RPCs mit den RPC XML-Tags ausführen. Python-Skripte müssen die RPC-Tags und Befehlsoptionen in ein für Python geeignetes Format konvertieren. Weitere Informationen zur Verwendung von Junos PyEZ zur Ausführung von RPCs und zur Zuordnung von RPC-Tags zur entsprechenden Python-Methode und methodenargumenten finden Sie unter Verwenden von Junos PyEZ zur Ausführung von RPCs auf Geräten, auf denen Junos OS ausgeführt wird.

Verwendung von Betriebsmodusbefehlen in Op-Skripten

Einige Befehle im Betriebsmodus verfügen nicht über XML-Äquivalente. SLAX- und XSLT-Skripte können Befehle ausführen, die mit dem <command> Element nicht XML-äquivalent sind. Python-Skripte können diese Befehle mit der in der Device Klasse definierten Junos PyEZ-Methode cli() ausführen.

Wenn ein Befehl nicht in der Junos XML API Operational Developer Reference aufgeführt ist, verfügt der Befehl nicht über ein XML-Äquivalent. Eine weitere Möglichkeit, zu bestimmen, ob ein Befehl über eine XML-Äquivalente verfügt, besteht darin, den Befehl, gefolgt vom | display xml Befehl, auszugeben, z. B.:

Wenn die Ausgabe nur Tag-Elemente wie <output>, <cli>und <banner>enthält der Befehl möglicherweise keine XML-Äquivalente. Im folgenden Beispiel gibt die Ausgabe an, dass der show host Befehl keine XML-Äquivalente hat:

Hinweis:

Bei einigen Befehlen mit einem XML-Äquivalent enthält die Ausgabe des Piped-Befehls | display xml keine anderen Tag-Elemente als <output>, <cli>und <banner> nur, weil die entsprechende Funktion nicht konfiguriert ist. Der Befehl verfügt beispielsweise über ein XML-Äquivalent, show services cos statistics forwarding-class das die <service-cos-forwarding-class-statistics> Ausgabe im Antwort-Tag zurückgibt, aber wenn die Konfiguration keine Anweisungen auf Hierarchieebene [edit class-of-service] enthält, gibt es keine tatsächlichen Daten, die der show services cos statistics forwarding-class | display xml Befehl anzeigen kann. Die Ausgabe ähnelt folgendem:

Aus diesem Grund sind die Informationen in der Junos XML API Operational Developer Reference in der Regel zuverlässiger.

SLAX- und XSLT-Op-Skripte können Befehle enthalten, die keine XML-Äquivalente haben. Verwenden Sie die <command>, <xsl:value-of>und <output> die Elemente im Skript, wie im folgenden Codeausschnitt dargestellt. Dieses Snippet wird in Beispiel: Anzeige von DNS-Hostnameninformationen mithilfe eines Op-Skripts erweitert und vollständig beschrieben.

Python-Op-Skripte können Befehle ausführen, die keine XML-Äquivalente haben, indem Sie Junos PyEZ-APIs verwenden. Die cli() in der Device Klasse definierte Methode führt einen Befehl im Betriebsmodus aus und gibt die Ausgabe im Textformat zurück. Zum Beispiel:

Sie können auch festlegen format='xml' , dass die Ausgabe als XML-Elemente von Junos OS zurückgegeben wird. Weitere Informationen zur Junos PyEZ-Methode cli() finden Sie unter http://junos-pyez.readthedocs.org/en/latest/_modules/jnpr/junos/device.html#Device.cli .