Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

So verwenden Sie die Requests Library für Python auf Geräten, auf denen Junos OS ausgeführt wird

Die Anfragenbibliothek für Python ist auf bestimmten Geräten verfügbar, auf denen Junos OS ausgeführt wird und das Python-Erweiterungspaket unterstützt. Sie können das requests Modul in Python-Skripten verwenden, um HTTP/1.1-Anforderungen zu senden. Auf Geräten, auf denen Junos OS mit erweiterter Automatisierung ausgeführt wird, können Sie das requests Modul auch im interaktiven Python-Modus verwenden. Die Requests-Bibliothek bietet zusätzliche Methoden für die Unterstützung anfänglicher Bereitstellungen sowie für die Durchführung routinemäßiger Überwachung und Konfigurationsänderungen auf Geräten, auf denen Junos OS ausgeführt wird. Informationen zu dem requests Modul und seinen Funktionen finden Sie in der Anforderungsdokumentation unter http://docs.python-requests.org/.

Anfragen stellen

Sie können das requests Modul in Onbox-Python-Skripten verwenden, um HTTP/1.1-Anfragen zu senden. Um eine Anfrage zu stellen, importieren Sie das Modul in Ihr Skript und rufen die Funktion auf, die der gewünschten Anforderung entspricht. Das Modul unterstützt HTTP GET und POST Anfragen sowie HEAD, DELETEund PUT Anforderungen. Die Anforderung gibt ein Response-Objekt zurück, das die Antwort des Servers enthält. Standardmäßig werden Anforderungen über die Standard-Routing-Instanz gestellt.

Die Requests-Bibliothek kann verwendet werden, um RPCs auf Geräten mit Junos OS auszuführen, die den REST-API-Service unterstützen. Das Zielgerät muss mit den entsprechenden Anweisungen auf Hierarchieebene [edit system services rest] konfiguriert werden, um Junos OS-Befehle über HTTP oder HTTPS mit REST zu aktivieren.

Das folgende Op-Skript führt beispielsweise eine GET-Anforderung aus, die den get-software-information RPC auf einem Remotegerät mit Junos OS ausführt, auf dem der REST API-Service über HTTP am Standardport (3000) konfiguriert ist. Das Skript gibt den Antwortstatuscode aus, und wenn der Statuscode den Erfolg anzeigt, gibt es den Antwortinhalt aus.

Um nur die Header abzurufen, können Sie eine einfache HEAD Anfrage senden.

Wenn für eine GET-Anforderung zusätzliche Parameter erforderlich sind, können Sie entweder das params Argument einschließen und ein Wörterbuch oder eine Liste von Tupeln oder Bytes angeben, die in der Abfragezeichenfolge gesendet werden sollen, oder Sie können Schlüssel-Wert-Paare als Teil der URL übergeben. Ebenso können Sie benutzerdefinierte Header bereitstellen, indem Sie das headers Argument und ein Wörterbuch mit HTTP-Headern angeben.

Die folgende Anforderung führt den get-interface-information RPC mit der terse-Option für die angegebene Schnittstelle aus und gibt die Antwort im Textformat zurück:

Im folgenden Beispiel werden die Argumente als Schlüssel-Wert-Paare in der URL geliefert:

Um mehrere RPCs in derselben Anforderung auszuführen, initiieren Sie eine HTTP POST-Anfrage und legen den data Parameter fest, um auf die rpCs zu verweisen, die ausgeführt werden sollen. In den Abschnitten Ausführen von betrieblichen RPCs und Verwalten der Konfiguration finden Sie Beispiele für die Ausführung mehrerer RPCs.

Ausführen von betrieblichen RPCs

Sie können das requests Modul verwenden, um RPCs aus der Junos XML-API auf einem Remotegerät mit Junos OS auszuführen, auf dem der REST-API-Service aktiviert ist.

Das folgende Op-Skript verwendet das requests Modul, um das RPC-Äquivalent des Befehls für den show interfaces ge-2/0/1 terse Betriebsmodus auf dem Zielgerät auszuführen:

Das folgende Op-Skript sendet eine POST-Anforderung, die mehrere RPCs auf dem Zielgerät ausführt. Der data Parameter verweist auf die auszuführenden RPCs, die zur Lesbarkeit in einer mehrlineigen Zeichenfolge definiert sind.

Sie können auch ein generisches Op-Skript erstellen, für das der Benutzer die erforderlichen Variablen und die Skriptkonstrukte liefert und die Anforderung ausführt. Betrachten Sie die folgende Op-Skriptkonfiguration, die die hostArgumente , rpcund rpc_args Befehlszeilenargumente für das requests-rpc.py Op-Skript konfiguriert:

Das folgende Beispielskript verbindet sich mit einem Remotegerät mit Junos OS, das mit den entsprechenden Anweisungen auf [edit system services rest] Hierarchieebene konfiguriert wurde, um Junos OS-Befehle über HTTP mithilfe von REST zu aktivieren. Das Skript fordert das Verbindungskennwort ein und verbindet sich mit dem Host und Port, die über das host Argument bereitgestellt werden. Das Skript verwendet requests das Modul dann, um eine GET-Anforderung zu senden, die den RPC ausführt, der über die Befehlszeilenargumente bereitgestellt wurde.

Hinweis:

Ab Junos OS Version 21.2R1 und Junos OS Evolved Release 21.2R1 setzt das Gerät, wenn Befehlszeilenargumente an ein Python-Op-Skript weiterleitet, einen einzelnen Bindestrich (-) zu einstelligen Argumentnamen vor und präfixiert zwei Bindestriche (-) zu mehrzeichenigen Argumentnamen. In früheren Versionen präfixieren die Geräte allen Argumentnamen einen einzelnen Bindestrich (-).

Wenn Sie das Skript ausführen, führt es den RPC mit den angegebenen Optionen auf dem Remotegerät aus und gibt die Antwort auf die Standardausgabe aus.

Verwaltung der Konfiguration

Sie können das requests Modul verwenden, um die Konfiguration auf einem Gerät mit Junos OS, auf dem der REST-API-Dienst aktiviert ist, abzurufen oder zu ändern.

Das folgende Op-Skript ruft die [edit system] Hierarchie aus der Kandidatenkonfiguration mithilfe einer POST-Anforderung ab:

MIT HTTP POST-Anforderungen können Sie auch mehrere RPCs in einer einzigen Anforderung ausführen, z. B. zum Sperren, Laden, Commit und Entsperren einer Konfiguration.

Das folgende Beispielskript verbindet sich mit dem Remotegerät und konfiguriert eine Adresse auf der angegebenen Schnittstelle. Die Lock-, Load-, Commit- und Entsperrvorgänge werden aus Gründen der Lesbarkeit separat definiert, die RPCs jedoch in der Anfrage verkettt.

Wenn Sie das Op-Skript ausführen, gibt es die RPC-Ergebnisse für die Sperr-, Last-, Commit- und Entsperrvorgänge zurück. Bei einigen Geräten trennt die Antwortausgabe die einzelnen RPC-Antworten durch Randzeilen, die gefolgt von einer Begrenzungszeichenfolge und einem Content-Type Header enthalten--. Andere Geräte enthalten möglicherweise nur den Content-Type Header.

Verwenden von Zertifikaten in HTTPS-Anforderungen

Der grundlegende HTTP-Authentifizierungsmechanismus sendet Benutzeranmeldeinformationen als Base64-kodierte Klartextzeichenfolge. Um die Authentifizierungsnachweise vor Abhören zu schützen, empfehlen wir, den RESTful API-Service über HTTPS zu aktivieren, der die Kommunikation mit Transport Layer Security (TLS) oder Secure Sockets Layer (SSL) verschlüsselt. Informationen zur Konfiguration dieses Service finden Sie im Leitfaden zu Junos OS REST API.

Standardmäßig überprüft die Anforderungsbibliothek SSL-Zertifikate für HTTPS-Anforderungen. Sie können die Argumente und cert die verify Argumente in die Anforderung zur Steuerung der SSL-Überprüfungsoptionen einbeziehen. Ausführliche Informationen zu diesen Optionen finden Sie in der Dokumentation zu Anforderungen.

Hinweis:

Wenn Sie Python 2.7 verwenden, um ein Skript auszuführen, das das requests Modul zur Ausführung von HTTPS-Anforderungen verwendet, generiert InsecurePlatformWarning und SubjectAltNameWarning warnt das Skript.

Das folgende Op-Skript sendet eine GET-Anforderung über HTTPS und legt das verify Argument auf den Dateipfad eines CA-Pakets oder eines Verzeichnisses mit vertrauenswürdigen CA-Zertifikaten fest. Die angegebenen CA-Zertifikate werden verwendet, um das Zertifikat des Servers zu überprüfen.

Um ein lokales clientseitiges Zertifikat anzugeben, legen Sie das Argument gleich dem cert Pfad einer einzelnen Datei, die den privaten Schlüssel und das Zertifikat des Clients enthält, oder auf ein Tupel fest, das die Pfade des einzelnen Clientzertifikats und der Privaten Schlüsseldateien enthält.

Festlegen der Routing-Instanz

Standardmäßig werden Anfragen mit der Standard-Routing-Instanz ausgeführt. Sie können Anforderungen auch über die mgmt_junos Verwaltungsinstanz oder eine andere nicht standardmäßige Routing-Instanz ausführen. Wenn Sie Skripte über die Junos OS-Infrastruktur ausführen, können Sie die Routing-Instanz angeben, indem Sie die set_routing_instance() Funktion im Skript aufrufen. Bestimmte Geräte unterstützen auch das Festlegen der Routing-Instanz und die Ausführung eines Skripts in der Shell auf Unix-Ebene.

Hinweis:

Auf Geräten mit Junos OS Evolved unterstützt die Funktion nur die set_routing_instance() Verwendung der Management-Routing-Instanz.

Um eine Anforderung in einem Python-Skript mit einer nicht standardmäßigen Routinginstanz auszuführen, einschließlich der mgmt_junos Instanz:

  1. Importieren Sie das jcs Modul.
  2. Rufen Sie die set_routing_instance() Funktion auf, und geben Sie die Instanz an, die für die Verbindung verwendet werden soll.
  3. Stellen Sie die Verbindung mit dem Zielgerät her.

Das folgende Op-Skript verwendet die mgmt_junos Verwaltungsinstanz, um eine Verbindung mit dem Zielgerät herzustellen und Anforderungen auszuführen.

Informationen zur Verwendung der set_routing_instance() Funktion in Python-Skripten finden Sie unter set_routing_instance().

Zusätzlich zur Angabe der Routing-Instanz im Skript unterstützen bestimmte Geräte die Festlegung der Routing-Instanz und die Ausführung eines Skripts aus der Shell auf Unix-Ebene. Auf Geräten, auf denen Junos OS mit erweiterter Automatisierung (FreeBSD-Version 7.1 oder höher) ausgeführt wird, können Sie mit dem setfib Befehl Anfragen mit der jeweiligen Routing-Instanz ausführen, einschließlich der Verwaltungsinstanz und anderer nicht standardmäßiger Routing-Instanzen.

Das folgende Python-Skript führt den get-software-information RPC einfach auf einem Remotegerät aus und gibt die Antwort aus:

So führen setfib Sie das Skript mit einer nicht standardmäßigen Routing-Instanz auf einem Gerät aus, auf dem Junos OS mit erweiterter Automatisierung ausgeführt wird:

  1. Suchen Sie den Softwareindex, der der Routingtabelle für diese Instanz zugeordnet ist.

    Im folgenden Beispiel wird das Gerät so konfiguriert, dass es die nicht standardmäßig dedizierte Verwaltungsinstanz mgmt_junosverwendet. Der Routingtabellenindex wird in der Befehlsausgabe referenziert.

    Um das Op-Skript mit der angegebenen Routing-Instanz auszuführen, verwenden Sie den setfib Befehl, um das Skript auszuführen und auf den Index zu verweisen. Zum Beispiel:

    Im folgenden Beispiel wird das Gerät mit einer nicht standardmäßigen Routing-Instanz vr1 konfiguriert, und der Routingtabellenindex vr1.inet ist 8:

    Der folgende Befehl führt das Op-Skript mithilfe der Routing-Instanz vr1 aus:

Durchführung von ZTP-Vorgängen

Die vollständig automatisierte Bereitstellung (Zero Touch Provisioning, ZTP) ermöglicht ihnen die automatische Bereitstellung neuer Geräte von Juniper Networks in Ihrem Netzwerk mit minimalem manuellen Eingriff. Um ZTP zu verwenden, konfigurieren Sie einen Server so, dass er die erforderlichen Informationen bereitstellt, die ein Junos OS-Image und eine Konfigurationsdatei zum Laden oder ein Skript zur Ausführung enthalten können. Wenn Sie ein Gerät physisch mit dem Netzwerk verbinden und es mit einer werksseitigen Standardkonfiguration starten, ruft das Gerät die Informationen vom designierten Server ab, aktualisiert das Junos OS-Image je nach Bedarf und führt das Skript aus oder lädt die Konfigurationsdatei.

Wenn Sie eine Verbindung herstellen und ein neues Netzwerkgerät starten, wird die erste Zeile der Datei untersucht, wenn Junos OS eine Datei auf dem Server erkennt. Wenn Junos OS die Zeichen #! gefolgt von einem Interpreter-Pfad, behandelt die Datei als Skript und führt sie mit dem angegebenen Interpreter aus. Sie können die Anfragenbibliothek in ausgeführten Skripten verwenden, um den ZTP-Prozess zu optimieren.

Betrachten Sie beispielsweise das folgende Python-Beispielskript, das das neue Gerät während des ZTP-Prozesses herunterlädt und ausführt. Wenn das Skript ausgeführt wird, lädt es zuerst das CA-Zertifikat vom Speicherort auf dem angegebenen Server herunter ca_cert_remote und speichert es lokal im ca_cert_local Speicherort. Das Skript verbindet sich dann mit dem Konfigurationsserver auf Port 8000 und gibt eine GET-Anforderung aus, um die neue Gerätekonfiguration abzurufen. Die Anforderung enthält den Pfad zum CA-Zertifikat, das zur Überprüfung des Serverzertifikats während des Austauschs verwendet wird. Das Skript verwendet dann die Junos PyEZ-Bibliothek, um die Konfiguration auf das Gerät zu laden und zu bestätigen.