Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Beispiel: Verwenden Eines benutzerdefinierten YANG RPC zum Abrufen von Betriebsinformationen auf Junos-Geräten

Sie können YANG-Datenmodelle hinzufügen, die benutzerdefinierte RPCs auf Junos-Geräten definieren. Durch das Erstellen benutzerdefinierter RPCs können Sie die Eingabeparameter und Betriebsabläufe sowie die Ausgabefelder und die Formatierung für Ihre spezifischen Betrieblichen Aufgaben auf diesen Geräten genau definieren. In diesem Beispiel wird ein benutzerdefiniertes RPC- und Aktionsskript dargestellt, das Betriebsinformationen vom Gerät abruft und angepasste CLI-Ausgaben anzeigt.

Der RPC wird dem Junos OS-Schema auf dem Gerät hinzugefügt. Wenn der RPC in der CLI ausgeführt wird, gibt er den Namen und Betriebsstatus für die angeforderten physischen Schnittstellen aus.

Anforderungen

In diesem Beispiel werden die folgenden Hardware- und Softwarekomponenten verwendet:

  • Gerät mit Junos OS Version 17.3R1 oder höher, das das Laden benutzerdefinierter YANG-Datenmodelle unterstützt.

Übersicht über das RPC- und Aktionsskript

Das YANG-Modul in diesem Beispiel definiert einen benutzerdefinierten RPC, um den Namen und Betriebsstatus bestimmter physischer Schnittstellen zurückzugeben. Das YANG-Modul rpc-interface-status wird in der Datei rpc-interface-status.yang gespeichert. Das Modul importiert die Junos OS-Erweiterungsmodule, die die Erweiterungen bereitstellen, die zum Ausführen benutzerdefinierter RPCs auf dem Gerät und zur Anpassung der CLI-Ausgabe erforderlich sind.

Das Modul definiert den get-interface-status RPC. Das <get-interface-status> Anforderungs-Tag wird verwendet, um den RPC per Fernzugriff auf dem Gerät auszuführen. In der RPC-Definition definiert die junos:command Anweisung den Befehl, der verwendet wird, um den RPC in der CLI auszuführen, die in diesem Fall .show intf status

Die junos:action-execute Anweisungen definieren junos:script das Aktionsskript, das aufgerufen wird, wenn der RPC ausgeführt wird. In diesem Beispiel wird ein Python-Aktionsskript namens rpc-interface-status.py verwendet, um die für den RPC erforderlichen Informationen abzurufen und die XML-Ausgabeelemente wie in der RPC-Anweisung output definiert zurückzugeben.

Hinweis:

Ab Junos OS Version 17.3 ist die action-execute Anweisung eine Substatement zu command. In früheren Versionen werden die action-execute Anweisungen auf command der gleichen Ebene platziert, und die command Anweisung ist optional.

Der RPC hat einen Eingabeparameter namens , matchder bestimmt, welche Schnittstellen in die Ausgabe einbezogen werden sollen. Wenn Sie den RPC ausführen, fügen Sie eine Zeichenfolge ein, die auf den gewünschten Schnittstellen übereinstimmt, z. B. ge-0*. Eine leere Zeichenfolge ("") entspricht auf allen Schnittstellen. Das Aktionsskript definiert den Standardwert für match als leere Zeichenfolge. Wenn der Benutzer dieses Argument auslässt, enthält die Ausgabe Informationen für alle Schnittstellen.

Der RPC definiert auch die Ausgabeknoten, die vom entsprechenden Aktionsskript ausgegeben werden müssen. Der Root-Knoten ist das <interface-status-info> Element, das keine oder mehr <status-info> Elemente enthält, die die <interface> Knoten für <status> eine übereinstimmene Schnittstelle umschließen. Die junos-odl:format interface-status-info-format Anweisung definiert die Formatierung für die Ausgabe, die in der CLI angezeigt wird. Dieser Knoten wird nicht in der XML-Ausgabestruktur ausgegeben.

In diesem Beispiel werden zwei Versionen des Python-Aktionsskripts dargestellt. Die Skripte weisen unterschiedliche Mittel zum Abrufen der Betriebsbefehlsausgabe auf, aber beide Skripte geben identische RPC-Ausgabe aus. Das erste Aktionsskript verwendet das Python-Modul subprocess , um den show interfaces match-value | display xml Befehl auszuführen, und konvertiert dann die Zeichenfolgenausgabe in XML. Das zweite Aktionsskript verwendet Junos PyEZ , um das RPC-Äquivalent des show interfaces match-value Befehls auszuführen. Beide Skripte verwenden den gleichen Code, um die Befehlsausgabe zu analysieren und den Namen und Betriebsstatus für jede physische Schnittstelle zu extrahieren. Die Skripte erstellen das XML für die RPC-Ausgabe und drucken dann die Ausgabe, die die Informationen zurück an das Gerät zurückgibt. Die XML-Struktur muss genau mit der im RPC definierten Hierarchie übereinstimmen.

Hinweis:

Junos-Geräte definieren versionsabhängige Namespaces für viele Elemente in der Betriebsausgabe, einschließlich des <interface-information> Elements. Um die RPC Junos OS-Version unabhängig zu machen, verwendet der Code die local-name() Funktion in den XPath-Ausdrücken für diese Elemente. Sie können die Namespacezuordnung als Argument xpath() einschließen und die Elemente mit dem entsprechenden Namespace qualifizieren.

Das Modul, das den RPC und die Action-Skriptdatei enthält, wird dem Gerät als Teil eines neuen YANG-Pakets mit dem Namen intf-rpc.

YANG-Modul

YANG-Modul

Das YANG-Modul rpc-interface-status.yang definiert den RPC, den Befehl zum Ausführen des RPC in der CLI und den Namen des Aktionsskripts, das aufgerufen werden soll, wenn der RPC ausgeführt wird. Der Basisname der Datei muss mit dem Modulnamen übereinstimmen.

Aktionsskript

Das entsprechende Aktionsskript wird rpc-interface-status.py. In diesem Beispiel werden zwei Aktionsskripte dargestellt, die unterschiedliche Mittel zum Abrufen der Daten verwenden. Ein Skript verwendet das Python-Modul subprocess und das andere Skript die Junos PyEZ-Bibliothek. Beide Skripte geben dieselbe RPC-XML-Ausgabe aus.

Hinweis:

Ab Junos OS Version 21.2R1 und Junos OS Evolved Release 21.2R1 setzt das Gerät, wenn Befehlszeilenargumente an ein Python-Aktionsskript weiterleitet, einen einzelnen Bindestrich (-) zu einstelligen Argumentnamen vor und präfixiert zwei Bindestriche (-) zu mehrzeichenigen Argumentnamen.

Aktionsskript (Verwenden subprocess)

Das folgende Aktionsskript verwendet das Python-Modul subprocess , um den Betriebsbefehl auszuführen und die Daten abzurufen. In diesem Beispiel werden zwei Versionen des Skripts bereitgestellt, die die Befehlszeilenargumente des Skripts für die verschiedenen Versionen angemessen behandeln.

Junos OS Version 21.1 und früher

Junos OS Version 21.2R1 und höher

Aktionsskript (mit Junos PyEZ)

Das folgende Aktionsskript verwendet Junos PyEZ, um den Betriebsbefehl auszuführen und die Daten abzurufen. In diesem Beispiel werden zwei Versionen des Skripts bereitgestellt, die die Befehlszeilenargumente des Skripts für die verschiedenen Versionen angemessen behandeln.

Junos OS Version 21.1 und früher

Junos OS Version 21.2R1 und höher

Aktivieren der Ausführung von Python-Skripten

So ermöglichen Sie dem Gerät die Ausführung von unsignierten Python-Skripten:

  1. Konfigurieren Sie die language python language python3 Oder-Anweisung, wie für die Junos OS-Version geeignet.
    Hinweis:

    Ab Junos OS Version 20.2R1 und Junos OS Evolved Version 22.3R1 verwendet das Gerät Python 3, um YANG-Aktions- und Übersetzungsskripte auszuführen. In früheren Versionen verwendet Junos OS nur Python 2.7, um diese Skripte auszuführen, und Junos OS Evolved verwendet standardmäßig Python 2.7, um die Skripte auszuführen.

  2. Commit der Konfiguration.

Laden des RPC auf dem Gerät

So fügen Sie das RPC- und Aktionsskript zum Junos-Schema hinzu:

  1. Laden Sie das YANG-Modul und das Aktionsskript auf das Junos-Gerät herunter.
  2. Stellen Sie sicher, dass das Python-Aktionsskript die folgenden Anforderungen erfüllt:
    • Der Dateibesitzer ist entweder root oder ein Benutzer in der Junos OS-Anmeldeklasse super-user .

    • Nur der Dateibesitzer hat die Schreibberechtigung für die Datei.

    • Das Skript enthält die entsprechende Interpreter-Direktivenzeile, wie in Erstellen von Aktionsskripten für YANG-RPCs auf Junos-Geräten beschrieben.

  3. (Optional) Validieren Sie die Syntax für das YANG-Modul und das Aktionsskript.
  4. Fügen Sie das YANG-Modul und das Aktionsskript zu einem neuen YANG-Paket hinzu.
    Hinweis:

    Ab Junos OS Version 17.3R1 müssen Sie beim Laden benutzerdefinierter YANG-Datenmodelle auf das Gerät keine erforderlichen Junos OS-Erweiterungsmodule explizit laden. In früheren Versionen müssen Sie die Junos OS-Erweiterungsmodule für alle Pakete laden, die die Module verwenden.

  5. Wenn Sie vom System aufgefordert werden, junos OS CLI neu zu starten, drücken Enter Sie, um den Standardwert von yeszu akzeptieren, oder geben Sie ein yes und drücken Sie Enter.

Überprüfung des RPC

Zweck

Stellen Sie sicher, dass der RPC wie erwartet funktioniert.

Aktion

Führen Sie den RPC im Betriebsmodus in der CLI aus, indem Sie den Befehl ausstellen, der durch die junos:command Anweisung in der RPC-Definition definiert wird, und fügen Sie das match Eingabeargument ein. In diesem Beispiel wird das Argument match für alle Schnittstellen verwendet, die mit Ge-0 beginnen.

Sie können auch die Übereinstimmungsbedingung anpassen, um unterschiedliche Schnittstellensätze zurückzugeben. Zum Beispiel:

Um dieselbe Ausgabe im XML-Format zurückzugeben, hängen Sie den | display xml Filter an den Befehl an.

Hinweis:

Wenn Sie auf allen Schnittstellen übereinstimmen möchten, lassen Sie entweder das match Argument aus oder setzen den Wert des Arguments auf eine leere Zeichenfolge ("").

Bedeutung

Wenn Sie den RPC ausführen, ruft das Gerät das Aktionsskript auf. Das Aktionsskript führt den Betriebsbefehl aus, um die Schnittstelleninformationen vom Gerät abzurufen, analysiert die Ausgabe für die gewünschten Informationen und druckt die XML-Hierarchie für die RPC-Ausgabe, wie in der RPC-Anweisung output definiert. Wenn Sie den RPC in der CLI ausführen, verwendet das Gerät die im RPC definierte CLI-Formatierung, um die XML-Ausgabe in die angezeigte CLI-Ausgabe zu konvertieren. Um die ursprüngliche XML-Ausgabe zurückzugeben, hängen Sie den | display xml Filter an den Befehl an.

Hinweis:

Wenn der RPC remote mit dem RPC-Anforderungs-Tag ausgeführt wird, ist das Standardformat für die Ausgabe XML.

Fehlerbehebung bei RPC-Ausführungsfehlern

Problem

Beschreibung

Wenn Sie den RPC ausführen, generiert das Gerät den folgenden Fehler:

Ursache

Der Benutzer, der den RPC aufgerufen hat, verfügt nicht über die erforderlichen Berechtigungen, um das entsprechende Python-Aktionsskript auszuführen.

Lösung

Benutzer können nicht signierte Python-Skripte nur auf Junos-Geräten ausführen, wenn die Dateiberechtigungen des Skripts Leseberechtigungen für die erste Klasse enthalten, in der der Benutzer in der Reihenfolge von Benutzer, Gruppe oder anderen gehört.

Überprüfen Sie, ob das Skript über die erforderlichen Berechtigungen verfügt, damit dieser Benutzer das Skript ausführen kann, und passen Sie die Berechtigungen gegebenenfalls an. Wenn Sie die Berechtigungen aktualisieren, müssen Sie auch das YANG-Paket aktualisieren, damit diese Änderung wirksam wird. Zum Beispiel:

Tabelle "Versionshistorie"
Release
Beschreibung
21.2R1 und 21.2R1-EVO
Ab Junos OS Version 21.2R1 und Junos OS Evolved Release 21.2R1 setzt das Gerät, wenn Befehlszeilenargumente an ein Python-Aktionsskript weiterleitet, einen einzelnen Bindestrich (-) zu einstelligen Argumentnamen vor und präfixiert zwei Bindestriche (-) zu mehrzeichenigen Argumentnamen.