Verwenden von Junos PyEZ zum Commit der Konfiguration
Mit Junos PyEZ können Sie strukturierte und unstrukturierte Konfigurationsänderungen auf Junos-Geräten vornehmen. Nachdem Sie eine Verbindung mit dem Gerät hergestellt und die Konfiguration geändert haben, müssen Sie die Konfiguration bestätigen, um sie zu aktivieren. In diesem Thema wird erläutert, wie die Konfiguration festgeschrieben wird und welche Commit-Optionen in Junos PyEZ-Anwendungen unterstützt werden.
So bestätigen Sie die Kandidatenkonfiguration
Wenn Sie das Dienstprogramm Junos PyEZ jnpr.junos.utils.config.Config verwenden, um unstrukturierte Konfigurationsänderungen auf einem Gerät vorzunehmen, bestätigen Sie die Kandidatenkonfiguration durch Aufrufen der Config Instanzmethode commit() . Zum Beispiel:
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
from jnpr.junos.exception import ConfigLoadError, CommitError
with Device(host='router1.example.com') as dev:
with Config(dev, mode='exclusive') as cu:
try:
cu.load(path='configs/mx_config.conf', merge=True)
cu.commit()
except (ConfigLoadError, CommitError) as err:
print (err)
Um die Syntax der Konfiguration zu überprüfen, ohne sie zu bestätigen, rufen Sie die commit_check() Methode anstelle der commit() Methode auf.
cu.commit_check()
Wenn Sie Junos PyEZ-Konfigurationstabellen und -ansichten verwenden, um strukturierte Konfigurationsänderungen auf einem Gerät vorzunehmen, bestätigen Sie die Kandidatenkonfiguration, indem Sie entweder die set() Methode aufrufen, die automatisch die lock()load()commit() , und unlock() Methoden aufruft, oder indem Sie die verschiedenen Methoden einzeln aufrufen. Zum Beispiel:
from jnpr.junos import Device
from myTables.UserConfigTable import UserConfigTable
with Device(host='router1.example.com') as dev:
userconfig = UserConfigTable(dev)
# ...set the values for the configuration data...
userconfig.append()
userconfig.set(merge=True)
Auf ähnliche Weise können Sie die einzelnen Methoden aufrufen, wie im folgenden Beispiel:
from jnpr.junos import Device
from myTables.UserConfigTable import UserConfigTable
with Device(host='router1.example.com') as dev:
userconfig = UserConfigTable(dev)
# ...set the values for the configuration data...
userconfig.append()
userconfig.lock()
userconfig.load(merge=True)
userconfig.commit()
userconfig.unlock()
Wenn Sie einen Kontext-Manager verwenden, um das Config oder Table-Objekt zu erstellen, und das mode Argument auf private, exclusive, dynamic, batchoder ephemeralsetzen, rufen Sie nur die load() und-Methoden commit() auf, um das Gerät zu konfigurieren. Der Kontext-Manager verarbeitet das Öffnen und Sperren sowie das Schließen und Entsperren der Datenbank, sodass Aufrufe der lock()unlock(), oder-Methoden set() in einem dieser Modi zu einer LockError-Ausnahme führen.
Festlegen von Commit-Optionen
Die Junos CLI bietet Optionen für den Commit-Vorgang, wie z. B. das Hinzufügen eines Commit-Kommentars oder das Synchronisieren der Konfiguration auf mehreren Routing-Engines. Junos PyEZ unterstützt viele dieser Commit-Optionen und einige zusätzliche Optionen, die Sie in Ihrer Junos PyEZ-Anwendung verwenden können, indem Sie die entsprechenden Argumente in die commit() Argumentliste or set() method aufnehmen. Tabelle 1 beschreibt die unterstützten Commit-Optionen und stellt den entsprechenden CLI-Befehl bereit.
| Argument für die Commit-Option |
Beschreibung |
CLI-Befehl |
|---|---|---|
|
|
Protokollieren Sie einen Kommentar für diesen Commitvorgang in der Systemprotokolldatei und im Commitverlauf des Geräts. |
|
|
|
Erfordern, dass ein Commitvorgang innerhalb eines bestimmten Zeitraums nach dem ersten Commit bestätigt wird. Andernfalls führen Sie ein Rollback auf die zuvor festgeschriebene Konfiguration durch. Legen Sie das Argument auf fest, um die Standardzeit von 10 Minuten zu |
|
|
|
Geben Sie ein XML-Objekt mit detaillierten Informationen über den Commit-Prozess zurück. |
|
|
|
Synchronisieren und bestätigen Sie die Konfiguration auf beiden Routing-Engines, auch wenn die andere Routing-Engine über offene Konfigurationssitzungen oder nicht festgeschriebene Konfigurationsänderungen verfügt. |
|
|
|
Ignorieren Sie Warnungen, die während des Commitvorgangs ausgelöst werden. Legen Sie das Argument auf |
– |
|
|
Synchronisieren und bestätigen Sie die Konfiguration auf beiden Routing-Engines. |
|
|
|
Warten Sie auf den Abschluss des Vorgangs mit dem angegebenen Wert als Zeitüberschreitung. |
– |
Kommentar bestätigen
Wenn Sie die Konfiguration bestätigen, können Sie einen kurzen Kommentar einfügen, um den Zweck der festgeschriebenen Änderungen zu beschreiben. Um einen Kommentar zu protokollieren, der die Änderungen beschreibt, fügen Sie den comment Parameter und eine Meldungszeichenfolge ggf. in die commit() Argumentliste or set() method ein. Zum Beispiel:
cu.commit(comment='Configuring ge-0/0/0 interface')
Das Einfügen des comment Arguments entspricht der Ausgabe des Konfigurationsmodusbefehls commit comment in der CLI. Der Kommentar wird in der Systemprotokolldatei protokolliert und in den Commitverlauf des Geräts aufgenommen, den Sie durch Ausführen des show system commit Befehls in der CLI anzeigen können.
Commit Bestätigen
Um zu erzwingen, dass ein Commitvorgang innerhalb eines bestimmten Zeitraums nach dem ersten Commit bestätigt werden muss, schließen Sie das confirm=minutes Argument ggf. in die commit() Argumentliste oder set() method ein.
cu.commit(confirm=15)
Wenn der Commit nicht innerhalb des angegebenen Zeitlimits bestätigt wird, führt das Gerät automatisch ein Rollback zur zuvor festgeschriebenen Konfiguration durch und sendet eine Broadcast-Nachricht an alle angemeldeten Benutzer. Der zulässige Bereich liegt zwischen 1 und 65.535 Minuten. Sie können auch confirm=True angeben, dass die Standard-Rollbackzeit von 10 Minuten verwendet werden soll. Um den Commitvorgang zu bestätigen, rufen Sie entweder die commit() Methode or commit_check() auf.
Der bestätigte Commit-Vorgang ist nützlich, um zu überprüfen, ob eine Konfigurationsänderung ordnungsgemäß funktioniert und den Verwaltungszugriff auf das Gerät nicht verhindert. Wenn die Änderung den Zugriff verhindert oder andere Fehler verursacht, ermöglicht das automatische Rollback auf die vorherige Konfiguration den Zugriff auf das Gerät, nachdem der Rollback-Stichtag abgelaufen ist. Wenn Sie die Verbindung zum Gerät verlieren, müssen Sie die Junos PyEZ-Methode open() ausführen, um die Verbindung wiederherzustellen.
Detail bestätigen
Sie können die Details des gesamten Commitvorgangs überprüfen, indem Sie das detail=True Argument in die commit() Argumentliste oder set() method aufnehmen. Wenn Sie dieses Argument angeben, gibt die Methode ein XML-Objekt mit detaillierten Informationen zum Commit-Prozess zurück. Der Rückgabewert entspricht dem Inhalt, der vom <commit-results> Element in der Ausgabe des commit | display detail | display xml Befehls in der CLI eingeschlossen ist.
from lxml import etree
...
commit_detail = cu.commit(detail=True)
print (etree.tostring(commit_detail, encoding='unicode'))
Commit Synchronisieren
Wenn das Gerät über zwei Routing-Engines verfügt, können Sie die Konfiguration auf beiden Routing-Engines synchronisieren und bestätigen, indem Sie das sync=True Argument in die commit() Argumentliste oder set() method aufnehmen.
cu.commit(sync=True)
Wenn Sie das sync=True Argument angeben, kopiert das Gerät die auf der lokalen Routing-Engine gespeicherte Kandidatenkonfiguration auf die andere Routing-Engine, überprüft die syntaktische Richtigkeit des Kandidaten und führt einen Commit auf beiden Routing-Engines durch. Um zu erzwingen, dass der commit synchronize Vorgang auch dann erfolgreich ist, wenn es offene Konfigurationssitzungen oder Konfigurationsänderungen ohne Commit auf der anderen Routing-Engine gibt, verwenden Sie das force_sync=True Argument, das das Gerät veranlasst, alle Konfigurationssitzungen auf der anderen Routing-Engine zu beenden, bevor die Konfiguration synchronisiert und festgeschrieben wird.
cu.commit(force_sync=True)
Commit- und Commit-Check-Timeout
Die Standardzeit für ein RPC-Timeout beträgt 30 Sekunden. Große Konfigurationsänderungen können diesen Wert überschreiten, was zu einer Zeitüberschreitung bei einem Commit- oder Commitüberprüfungsvorgang führt, bevor die Konfiguration hochgeladen, überprüft und committ werden kann. Um Konfigurationsänderungen zu berücksichtigen, die möglicherweise eine Commit-Prüfung oder eine Commit-Zeit erfordern, die länger als das Standard-Timeout-Intervall ist, fügen Sie das timeout=seconds Argument in die commit_check()Argumentliste von , commit() oder set() method ein, und legen Sie das Timeout-Intervall auf einen geeigneten Wert fest. Zum Beispiel:
cu.commit_check(timeout=60)
cu.commit(timeout=360)
Warnungen ignorieren
Junos PyEZ löst eine RpcError Ausnahme aus, wenn die RPC-Antwort Elemente mit dem Schweregrad "Warnung" oder höher enthält<rpc-error>. In Fällen, in denen es notwendig oder wünschenswert ist, die RpcError Ausnahmen zu unterdrücken, die als Reaktion auf Warnungen ausgelöst werden, können Sie den Parameter der ignore_warning commit() Methode einschließen. Zum Beispiel:
cu.commit(ignore_warning=True)
Weitere Informationen zur Verwendung des ignore_warning Parameters finden Sie unter Unterdrücken von RpcError-Ausnahmen, die für Warnungen in Junos PyEZ-Anwendungen ausgelöst wurden.