AUF DIESER SEITE
Beispiel: Ändern der Konfiguration mithilfe von Python-Op-Skripten
Mit Op-Skripten können Sie kontrollierte Änderungen an der Junos OS-Konfiguration vornehmen. Op-Skripte sind von Vorteil, da sie Betriebsinformationen über ein Gerät sammeln und die Konfiguration basierend auf diesen Informationen aktualisieren können. Erfahrene Benutzer, die mit Junos OS vertraut sind, können Op-Skripte schreiben, die zur Eingabe der relevanten Konfigurationsinformationen auffordern und die Konfiguration entsprechend ändern. Auf diese Weise können Benutzer, die weniger Erfahrung mit Junos OS haben, die Konfiguration mithilfe des Skripts sicher ändern. In diesem Beispiel wird veranschaulicht, wie Sie mithilfe eines Python-Skripts , das Junos PyEZ-APIs nutzt, Änderungen an der Junos OS-Konfiguration vornehmen.
Anforderungen
In diesem Beispiel werden die folgenden Hardware- und Softwarekomponenten verwendet:
Router der MX-Serie mit Junos OS Version 16.1R3 oder höher, der das Python-Erweiterungspaket enthält.
Übersicht und Op-Skript
Python-Op-Skripte können mithilfe des Dienstprogramms Junos PyEZ Änderungen an der Junos OS-Konfiguration jnpr.junos.utils.config.Config
vornehmen. Das Dienstprogramm Junos PyEZ Config
stellt Instanzmethoden bereit, um die Konfiguration zu sperren, die Konfigurationsdaten zu laden und anzugeben, wie sie in die Konfiguration integriert, die Konfiguration festgeschrieben und die Konfiguration entsperrt werden sollen. Weitere Informationen zur Verwendung von Junos PyEZ zur Konfiguration von Junos-Geräten finden Sie unter Verwenden von Junos PyEZ zum Konfigurieren von Junos-Geräten. Das Python-Op-Skript in diesem Beispiel veranschaulicht, wie die Konfiguration aktualisiert wird, um eine Schnittstelle auf dem lokalen Gerät zu deaktivieren.
Das Python-Op-Skript importiert Folgendes:
Device
-Klasse: Verwaltet die Verbindung zum Junos-GerätConfig
class: Führt Konfigurationsmodusbefehle auf dem Zielgerät ausjnpr.junos.exception
-Modul: Enthält Ausnahmen, die bei der Verwaltung von Junos-Geräten aufgetreten sind.jcs
Modul: Ermöglicht dem Skript die Ausführung unterstützter Erweiterungsfunktionen
In diesem Beispiel wird die usage
Variable mit einer allgemeinen Beschreibung der Funktion des Skripts initialisiert. Wenn das Skript ausgeführt wird, gibt das Skript die Verwendungsbeschreibung in der CLI aus, damit der Benutzer den Zweck dieses Skripts überprüfen kann.
Das Skript ruft die Erweiterungsfunktion auf, die jcs.get_input()
den Benutzer auffordert, den Namen der zu deaktivierenden Schnittstelle einzugeben, und speichert den Schnittstellennamen in der interface
Variablen. Die config_xml
Variable ist eine XML-Zeichenfolge, die die Konfigurationsänderungen definiert.
Das Skript stellt beim Erstellen der Device
Instanz keinen Hostparameter bereit, wodurch die open()
Methode eine Verbindung mit dem lokalen Gerät herstellt. In diesem Beispiel wird die Instanz mithilfe eines Kontext-Managers mit mode='exclusive'
erstellt, um eine exklusive Sperre für die Config
Konfiguration zu erhalten, während sie geändert wird. In diesem Modus übernimmt der Kontextmanager automatisch das Sperren und Entsperren der Kandidatenkonfiguration. Die Config
Hilfsmethoden laden die Konfigurationsänderungen als load merge
Vorgang in die Kandidatenkonfiguration und führen einen Commit für die Konfiguration aus. Die dev.close()
Methode schließt die Verbindung.
Python-Skript
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import * import jcs import sys def main(): usage = """ This script disables the specified interface. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. """ print (usage) interface = jcs.get_input("Enter interface to disable: ") if not interface: print ("invalid interface") sys.exit(1) config_xml = """ <configuration> <interfaces> <interface> <name>{0}</name> <disable/> </interface> </interfaces> </configuration> """.format(interface).strip() dev = Device() dev.open() try: with Config(dev, mode="exclusive") as cu: print ("Loading and committing configuration changes") cu.load(config_xml, format="xml", merge=True) cu.commit() except Exception as err: print (err) dev.close() return dev.close() if __name__ == "__main__": main()
Konfiguration
Schritt-für-Schritt-Anleitung
So laden Sie das Skript herunter, aktivieren und testen es:
-
Kopieren Sie das Skript in eine Textdatei, benennen Sie die Datei config-change.py und kopieren Sie sie in das Verzeichnis / var/db/scripts/op/ auf dem Gerät.
Hinweis:Nicht signierte Python-Skripts müssen entweder root oder einem Benutzer in der Junos OS-Anmeldeklasse
super-user
gehören, und nur der Dateibesitzer kann Schreibberechtigungen für die Datei haben. -
Fügen Sie die
file config-change.py
Anweisung im Konfigurationsmodus auf Hierarchieebene[edit system scripts op]
ein.[edit system scripts] user@host# set op file config-change.py
-
Aktivieren Sie die Ausführung von nicht signierten Python-Skripten auf dem Gerät.
[edit system scripts] user@host# set language python
Hinweis:Konfigurieren Sie die Anweisung so, dass Python 3 zum Ausführen von Python-Skripten verwendet wird, oder konfigurieren Sie die
language python3
language python
Anweisung so, dass Python 2.7 zum Ausführen von Python-Skripten verwendet wird. Weitere Informationen finden Sie unter Sprache. -
Geben Sie den Befehl ein, um die Konfiguration zu bestätigen und in den
commit and-quit
Betriebsmodus zurückzukehren.[edit] user@host# commit and-quit
-
Geben Sie vor dem Ausführen des Skripts den Befehl operational mode ein, und notieren Sie den
show interfaces interface-name
aktuellen Status der Schnittstelle, die durch das Skript deaktiviert wird. -
Führen Sie das Op-Skript aus, indem Sie den
op config-change.py
Befehl operational mode eingeben.user@host> op config-change.py This script disables the specified interface. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. Enter interface to disable: so-0/0/0 Loading and committing configuration changes
Überprüfung
Verifizieren des Commits
Zweck
Vergewissern Sie sich, dass der Commit erfolgreich war.
Aktion
Sie sollten Code in Ihr Skript einfügen, der alle Warnungen oder Fehler im Zusammenhang mit dem Ändern und Ausführen eines Commits der Konfiguration abfängt. Auf diese Weise können Sie leichter feststellen, ob der Commit erfolgreich war. Wenn keine Warn- oder Fehlermeldungen angezeigt werden, können Sie den Erfolg des Commits auf verschiedene Arten überprüfen.
Überprüfen Sie das Commit-Protokoll, um sicherzustellen, dass der Commit erfolgreich war.
user@host> show system commit 0 2010-09-22 17:08:17 PDT by user via netconf
Überprüfen Sie die Syslog-Meldungsdatei, um sicherzustellen, dass der Commit-Vorgang protokolliert wurde. In diesem Fall wird auch eine
SNMP_TRAP_LINK_DOWN
Meldung für die deaktivierte Schnittstelle angezeigt. Abhängig von Ihren Konfigurationseinstellungen für Trace-Optionen wird diese Meldung möglicherweise nicht in der Protokolldatei angezeigt.user@host> show log messages | last Sep 22 17:08:13 host file[7319]: UI_COMMIT: User 'user' requested 'commit' operation Sep 22 17:08:16 host xntpd[1386]: ntpd exiting on signal 1 Sep 22 17:08:16 host xntpd[1386]: ntpd 4.2.0-a Fri Jun 25 13:48:13 UTC 2010 (1) Sep 22 17:08:16 host mib2d[1434]: SNMP_TRAP_LINK_DOWN: ifIndex 526, ifAdminStatus down(2), ifOperStatus down(2), ifName so-0/0/0
Überprüfen der Konfigurationsänderungen
Zweck
Stellen Sie sicher, dass die richtigen Änderungen in die Konfiguration integriert sind.
Aktion
Zeigen Sie die Konfiguration an, und überprüfen Sie, ob die Änderungen für die angegebene Schnittstelle sichtbar sind.
user@host> show configuration interfaces so-0/0/0 disable;
In diesem Beispiel können Sie auch den
show interfaces interface-name
Befehl Betriebsmodus ausführen, um zu überprüfen, ob die Schnittstelle deaktiviert wurde. In diesem Fall zeigt die Ausgabe, die vor dem Deaktivieren der Schnittstelle erfasst wurdeEnabled
, dass die Schnittstelle .user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Enabled, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:27 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None
Die Ausgabe, die nach dem Ausführen des Skripts zum Deaktivieren der Schnittstelle erfasst wurde, zeigt, dass die Schnittstelle jetzt
Administratively down
.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Administratively down, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Down Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:40 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None