AUF DIESER SEITE
Beispiel: Verwenden von Junos PyEZ zum Zurücksetzen der Konfiguration
Mit der Junos PyEZ-Bibliothek können Sie Betriebs- und Konfigurationsaufgaben auf Junos-Geräten ausführen. In diesem Beispiel wird das Dienstprogramm Junos PyEZ jnpr.junos.utils.config.Config verwendet, um die Konfiguration auf einem Junos-Gerät zurückzusetzen.
Anforderungen
In diesem Beispiel werden die folgenden Hardware- und Softwarekomponenten verwendet:
Konfigurationsverwaltungsserver mit Python 3.5 oder höher und Junos PyEZ Version 2.0 oder höher
Junos-Gerät mit aktiviertem NETCONF und einem mit den entsprechenden Berechtigungen konfigurierten Benutzerkonto
Öffentliches/privates SSH-Schlüsselpaar, das für den entsprechenden Benutzer auf dem Server und dem Junos-Gerät konfiguriert ist
Übersicht
In diesem Beispiel wird eine Python-Anwendung vorgestellt, die das Dienstprogramm Junos PyEZ Config verwendet, um die Konfiguration auf dem angegebenen Gerät zurückzusetzen. Auf Junos-Geräten werden eine Kopie der zuletzt festgeschriebenen Konfiguration und bis zu 49 vorherige Konfigurationen gespeichert. Sie können zu jeder der gespeicherten Konfigurationen zurückkehren. Dies ist nützlich, wenn Konfigurationsänderungen zu unerwünschten Ergebnissen führen und Sie zu einer bekannten funktionierenden Konfiguration zurückkehren möchten. Das Zurücksetzen der Konfiguration ähnelt dem Verfahren zum Vornehmen von Konfigurationsänderungen auf dem Gerät, aber anstatt Konfigurationsdaten zu laden, führen Sie ein Rollback durch, bei dem die gesamte Kandidatenkonfiguration durch eine zuvor festgeschriebene Konfiguration ersetzt wird.
Die Python-Anwendung importiert die Klasse, die Device die Verbindung mit dem Junos-Gerät verarbeitet, die Klasse, die Config zum Ausführen von Konfigurationsmodusbefehlen auf dem Zielgerät verwendet wird, sowie erforderliche Ausnahmen aus dem jnpr.junos.exception Modul, das Ausnahmen enthält, die bei der Verwaltung von Junos-Geräten auftreten.
Nachdem die Device Instanz für das Zielgerät erstellt wurde, stellt die open() Methode eine Verbindung und eine NETCONF-Sitzung mit dem Gerät her. Die Config Hilfsmethoden werden dann die Kandidatenkonfiguration sperren, zurücksetzen, festschreiben und entsperren.
Die rollback() Methode verfügt über einen einzelnen Parameter, bei dem es sich um die Rollback-ID handelt, rb_iddie die zu ladende gespeicherte Konfiguration angibt. Gültige Werte sind 0 (Null für die Konfiguration mit dem letzten Commit) bis eins kleiner als die Anzahl der gespeicherten vorherigen Konfigurationen (maximal ist 49). Wenn Sie diesen Parameter im Methodenaufruf weglassen, wird er standardmäßig auf 0 gesetzt. In diesem Beispiel wird die Konfiguration mit der Rollback-ID 1 geladen, bei der es sich um die Konfiguration handelt, für die kurz vor der aktiven Konfiguration ein Commit ausgeführt wurde. Die rollback() Methode lädt die Konfiguration in die Kandidatenkonfiguration, die dann durch Aufrufen der commit() Methode aktiviert wird.
Nach dem Rollback und dem Commit der Konfiguration ruft die Anwendung die close() Methode zum Beenden der NETCONF-Sitzung und -Verbindung auf. Die Anwendung enthält Code zum Behandeln von Ausnahmen, z. B LockError . für Fehler, die beim Sperren der Konfiguration auftreten, und CommitError für Fehler, die während des Commit-Vorgangs auftreten. Die Anwendung enthält auch Code zum Behandeln zusätzlicher Ausnahmen, die auftreten können.
Konfiguration
Erstellen der Junos PyEZ-Anwendung
Schritt-für-Schritt-Anleitung
So erstellen Sie eine Python-Anwendung, die Junos PyEZ verwendet, um die Konfiguration auf einem Junos-Gerät zurückzusetzen:
Importieren Sie alle erforderlichen Module, Klassen und Objekte.
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import ConnectError from jnpr.junos.exception import LockError from jnpr.junos.exception import RpcError from jnpr.junos.exception import CommitError from jnpr.junos.exception import UnlockError
Fügen Sie alle erforderlichen Variablen ein, die in diesem Beispiel den Hostnamen des verwalteten Geräts enthalten.
host = 'dc1a.example.com'
Erstellen Sie eine Funktionsdefinition und einen
main()Funktionsaufruf, und platzieren Sie die restlichen Anweisungen in der Definition.def main(): if __name__ == "__main__": main()
Erstellen Sie eine Instanz der
DeviceKlasse, und geben Sie den Hostnamen und alle Parameter an, die für diese spezifische Verbindung erforderlich sind.dev = Device(host=host)
Öffnen Sie eine Verbindung, und stellen Sie eine NETCONF-Sitzung mit dem Gerät her.
# open a connection with the device and start a NETCONF session try: dev.open() except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) return
Erstellen Sie eine Instanz des
ConfigDienstprogramms.# Set up config object cu = Config(dev)
Sperren Sie die Konfiguration.
# Lock the configuration print ("Locking the configuration") try: cu.lock() except LockError as err: print ("Unable to lock configuration: {0}".format(err)) dev.close() return
Führen Sie ein Rollback aus, bestätigen Sie die Konfiguration und behandeln Sie alle Fehler.
# Roll back and commit configuration try: print ("Rolling back the configuration") cu.rollback(rb_id=1) print ("Committing the configuration") cu.commit() except CommitError as err: print ("Error: Unable to commit configuration: {0}".format(err)) except RpcError as err: print ("Unable to roll back configuration changes: {0}".format(err))
Entsperren Sie die Konfiguration, beenden Sie dann die NETCONF-Sitzung und schließen Sie die Verbindung mit dem Gerät.
finally: print ("Unlocking the configuration") try: cu.unlock() except UnlockError as err: print ("Unable to unlock configuration: {0}".format(err)) dev.close() return
Ergebnisse
Überprüfen Sie auf dem Konfigurationsverwaltungsserver die abgeschlossene Anwendung. Wenn die Anwendung nicht den gewünschten Code anzeigt, wiederholen Sie die Anweisungen in diesem Beispiel, um die Anwendung zu korrigieren.
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
from jnpr.junos.exception import ConnectError
from jnpr.junos.exception import LockError
from jnpr.junos.exception import RpcError
from jnpr.junos.exception import CommitError
from jnpr.junos.exception import UnlockError
host = 'dc1a.example.com'
def main():
dev = Device(host=host)
# open a connection with the device and start a NETCONF session
try:
dev.open()
except ConnectError as err:
print ("Cannot connect to device: {0}".format(err))
return
# Set up config object
cu = Config(dev)
# Lock the configuration
print ("Locking the configuration")
try:
cu.lock()
except LockError as err:
print ("Unable to lock configuration: {0}".format(err))
dev.close()
return
# Roll back and commit configuration
try:
print ("Rolling back the configuration")
cu.rollback(rb_id=1)
print ("Committing the configuration")
cu.commit()
except CommitError as err:
print ("Error: Unable to commit configuration: {0}".format(err))
except RpcError as err:
print ("Unable to roll back configuration changes: {0}".format(err))
finally:
print ("Unlocking the configuration")
try:
cu.unlock()
except UnlockError as err:
print ("Unable to unlock configuration: {0}".format(err))
dev.close()
return
if __name__ == "__main__":
main()
Ausführen des Junos PyEZ-Codes
Ausführen der Anwendung
So führen Sie den Junos PyEZ-Code aus:
-
Führen Sie die Anwendung auf dem Konfigurationsverwaltungsserver aus.
user@server:~$ python3 junos-pyez-config-rollback.py Locking the configuration Rolling back the configuration Committing the configuration Unlocking the configuration
Überprüfung
Überprüfen Sie die Konfiguration
Zweck
Vergewissern Sie sich, dass die Konfiguration auf dem Junos-Gerät ordnungsgemäß zurückgesetzt wurde.
Aktion
Melden Sie sich beim Junos-Gerät an, und zeigen Sie die Konfiguration oder Konfigurationsunterschiede sowie die Protokolldatei an. Zum Beispiel:
user@dc1a> show configuration | compare rollback 1
[edit system scripts op]
- file bgp-neighbors.slax;
[edit interfaces]
- ge-1/0/0 {
- unit 0 {
- family inet {
- address 198.51.100.1/26;
- }
- }
- }
+ ge-1/1/0 {
+ unit 0 {
+ family inet {
+ address 198.51.100.65/26;
+ }
+ }
+ }
user@dc1a> show log messages Sep 19 12:42:06 dc1a sshd[5838]: Accepted publickey for user from 198.51.100.1 port 58663 ssh2: RSA 02:dd:53:3e:f9:97:dd:1f:d9:31:e9:7f:82:06:aa:67 Sep 19 12:42:10 dc1a file[5841]: UI_LOAD_EVENT: User 'user' is performing a 'rollback 1' Sep 19 12:42:11 dc1a file[5841]: UI_COMMIT: User 'user' requested 'commit' operation (comment: none) Sep 19 12:42:26 dc1a file[5841]: UI_COMMIT_COMPLETED: commit complete
Bedeutung
Die Konfigurationsunterschiede und der Inhalt der Protokolldatei weisen darauf hin, dass für die Konfiguration erfolgreich ein Rollback durchgeführt und ein Commit auf dem Gerät ausgeführt wurde.