Verwenden des Junos PyEZ Config-Dienstprogramms zum Konfigurieren von Junos-Geräten
Mit Junos PyEZ können Sie strukturierte und unstrukturierte Konfigurationsänderungen auf Junos-Geräten vornehmen. In diesem Thema wird erläutert, wie Sie mit dem jnpr.junos.utils.config.Config
Dienstprogramm unstrukturierte Konfigurationsänderungen vornehmen können, die aus statischen oder vorlagenbasierten Konfigurationsdaten bestehen, die als ASCII-Text, Junos XML-Elemente, Junos OS-Befehle set
oder JavaScript Object Notation (JSON) formatiert sind. Mit dem Config
Dienstprogramm können Sie auch zu einer zuvor festgeschriebenen Konfiguration zurückkehren oder zu einer Rettungskonfiguration zurückkehren.
Übersicht über den Konfigurationsprozess
Nachdem Sie erfolgreich eine Verbindung zu einem Junos-Gerät hergestellt haben und das Gerät mithilfe des Config
Dienstprogramms konfigurieren möchten, erstellen Sie zunächst ein Config
Objekt und ordnen es der Device
Instanz zu. Zum Beispiel:
from jnpr.junos import Device from jnpr.junos.utils.config import Config dev = Device(host='dc1a.example.com').open() cu = Config(dev)
Standardmäßig aktualisiert Junos PyEZ die globale Kandidatenkonfiguration (auch als freigegebene Konfigurationsdatenbank bezeichnet). Der grundlegende Prozess zum Vornehmen von Konfigurationsänderungen besteht darin, die Konfigurationsdatenbank zu sperren, die Konfigurationsänderungen zu laden, die Konfiguration zu bestätigen, um sie zu aktivieren, und dann die Konfigurationsdatenbank zu entsperren. Wenn Sie das Dienstprogramm Junos PyEZ Config
verwenden, um unstrukturierte Konfigurationsänderungen in der gemeinsam genutzten Konfigurationsdatenbank vorzunehmen, können Sie die folgenden Aktionen ausführen, indem Sie die entsprechenden Instanzmethoden aufrufen, die hier beschrieben werden:
-
Sperren Sie die Konfiguration mit
lock()
-
Ändern Sie die Konfiguration, indem Sie eine der folgenden Aktionen ausführen:
-
Rufen Sie
load()
auf, wenn eine neue vollständige Konfiguration geladen oder bestimmte Teile der Konfiguration geändert werden -
Rufen Sie
rollback()
auf, um eine zuvor festgeschriebene Konfiguration wiederherzustellen, wie unter Zurücksetzen der Konfiguration beschrieben -
Aufruf
rescue()
zum Laden der Rescue-Konfiguration, wie unter Laden der Rescue-Konfiguration beschrieben
-
-
Bestätigen Sie die Konfiguration mit
commit()
, wie unter Bestätigen der Konfiguration und Verwenden von Junos PyEZ zum Festschreiben der Konfiguration beschrieben -
Entsperren Sie die Konfiguration mit
unlock()
Sie können auch einen Kontextmanager (with
... as
-Syntax) verwenden, um eine Config
Objektinstanz zu erstellen, und bestimmte Konfigurationsmodi erfordern die Verwendung eines solchen. Für diese Modi sperrt und entsperrt Junos PyEZ die Konfiguration automatisch. Weitere Informationen finden Sie unter Angeben des Konfigurationsmodus.
Wenn Sie die load()
Methode zum Ändern der Konfiguration verwenden, können Sie nicht nur den Konfigurationsmodus, sondern auch den Typ des Ladevorgangs, das Format der Konfigurationsänderungen und die Quelle der Konfigurationsdaten angeben. Das Config
Dienstprogramm unterstützt viele der gleichen Ladevorgänge und Formate, die in der Junos CLI verfügbar sind. Weitere Informationen finden Sie unter:
Sie können die Quelle der Konfigurationsdaten als Datei auf dem lokalen Server, als Datei auf dem Zielgerät oder als Datei unter einer URL, die vom Zielgerät aus erreichbar ist, oder als Zeichenfolge, XML-Objekt oder Jinja2-Vorlage angeben. Informationen zum Angeben der Konfigurationsdatenquelle finden Sie in den folgenden Abschnitten:
Festlegen des Konfigurationsmodus
Wenn Sie ein Config
Objekt erstellen und nicht explizit einen Konfigurationsmodus angeben, aktualisiert Junos PyEZ standardmäßig die potenzielle globale Konfiguration. Sie können auch einen anderen Konfigurationsmodus angeben, der beim Ändern der Konfigurationsdatenbank verwendet werden soll. Wenn Sie einen anderen Modus als den Standardmodus angeben möchten, müssen Sie das Config
Objekt mithilfe eines Kontext-Managers erstellen und das mode
Argument auf den gewünschten Modus festlegen. Zu den unterstützten Modi gehören private
, exclusive
, dynamic
, batch
und ephemeral
.
Sie können Junos PyEZ verwenden, um die kurzlebige Konfigurationsdatenbank auf Geräten zu aktualisieren, die diese Datenbank unterstützen. Bei der kurzlebigen Datenbank handelt es sich um eine alternative Konfigurationsdatenbank, die eine schnelle programmgesteuerte Schnittstelle zum Ausführen von Konfigurationsupdates auf Junos-Geräten bereitstellt. Es handelt sich um eine erweiterte Funktion, die bei falscher Verwendung schwerwiegende negative Auswirkungen auf den Betrieb des Geräts haben kann. Weitere Informationen finden Sie unter Grundlegendes zur kurzlebigen Konfigurationsdatenbank.
Wenn Sie einen anderen Modus als den Standardmodus angeben, behandelt der Kontext-Manager das Öffnen und Sperren sowie Schließen und Entsperren der Datenbank. Dadurch wird sichergestellt, dass Sie die Datenbank nicht versehentlich in einem gesperrten Zustand belassen. In diesen Fällen müssen Sie nur die load()
commit()
und-Methode aufrufen, um das Gerät zu konfigurieren.
Der folgende Code nimmt z. B. Konfigurationsänderungen mit dem Modus vor, der configure private
eine private Kopie der Kandidatenkonfiguration öffnet:
from jnpr.junos import Device from jnpr.junos.utils.config import Config dev = Device(host='dc1a.example.com').open() with Config(dev, mode='private') as cu: cu.load('set system services netconf traceoptions file test.log', format='set') cu.pdiff() cu.commit() dev.close()
Weitere Informationen zu den verschiedenen Konfigurationsmodi finden Sie im CLI-Benutzerhandbuch und Verwenden von Junos PyEZ zur Konfiguration von Junos-Geräten.
Angeben des Ladevorgangs
Junos PyEZ unterstützt das Laden von Konfigurationsänderungen unter Verwendung vieler der gleichen Ladevorgänge, die in der Junos CLI unterstützt werden. Sie geben den gewünschten Ladevorgang an, indem Sie die entsprechenden Parameter in die Config
load()
Methode aufnehmen oder weglassen.
In Tabelle 1 sind die unterstützten Ladevorgänge und das entsprechende load()
Methodenargument aufgeführt. Standardmäßig führt Junos PyEZ einen load replace
Vorgang aus. Wenn Sie einen anderen Ladevorgang verwenden möchten, legen Sie den entsprechenden Parameter in der load()
Methode auf True
fest.
Ladevorgang |
Argument |
Beschreibung |
Erste unterstützte Version von Junos PyEZ |
---|---|---|---|
|
|
Führen Sie die geladene Konfiguration mit der vorhandenen Konfiguration zusammen. |
1.0 |
|
|
Ersetzen Sie die gesamte Konfiguration durch die geladene Konfiguration. |
1.0 |
|
|
Laden Sie Konfigurationsdaten aus einer Patch-Datei. |
2.4.0 |
|
– |
Führen Sie die geladene Konfiguration mit der vorhandenen Konfiguration zusammen, ersetzen Sie jedoch Anweisungen in der vorhandenen Konfiguration durch diejenigen, die das |
1.0 |
|
|
Laden Sie eine vollständige Konfiguration und vergleichen Sie sie mit der vorhandenen Konfiguration. Jedes Konfigurationselement, das sich in der geladenen Konfiguration unterscheidet, ersetzt das entsprechende Element in der vorhandenen Konfiguration. Während des Commit-Vorgangs analysieren nur Systemprozesse, die von geänderten Konfigurationselementen betroffen sind, die neue Konfiguration. |
2.1.0 |
Im folgenden Beispiel wird ein load override
Vorgang ausgeführt, bei dem die gesamte Kandidatenkonfiguration durch die geladene Konfiguration ersetzt wird, und anschließend ein Commit für die Kandidatenkonfiguration ausgeführt wird, um sie zu aktivieren.
from jnpr.junos import Device from jnpr.junos.utils.config import Config config_mx = 'configs/junos-config-mx.conf' dev = Device(host='router1.example.com').open() with Config(dev, mode='exclusive') as cu: cu.load(path=config_mx, overwrite=True) cu.commit() dev.close()
Geben Sie das Format der zu ladenden Konfigurationsdaten an
Mit dem Dienstprogramm Junos PyEZ Config
können Sie Junos-Geräte in einem der unterstützten Standardformate konfigurieren. Sie können Konfigurationsdaten als Zeichenfolgen, Dateien, XML-Objekte oder Jinja2-Vorlagenobjekte bereitstellen. Dateien können entweder Konfigurationsdaten-Snippets oder Jinja2-Vorlagen enthalten. Beim Bereitstellen von Konfigurationsdaten in einer Zeichenfolge, Datei oder Jinja2-Vorlage werden ASCII-Text, Junos XML-Elemente, Junos OS-Befehle set
und JSON unterstützt. Sie können das Format der Konfigurationsdaten angeben, indem Sie den format
Parameter entweder explizit in die Config
Hilfsmethode load()
aufnehmen oder indem Sie der Konfigurationsdatendatei die entsprechende Erweiterung hinzufügen. Wenn Sie kein Format angeben, ist der Standardwert XML.
Ab Junos PyEZ Version 1.2 erkennt Junos PyEZ das Format automatisch, wenn Sie die Konfigurationsdaten als Zeichenfolge angeben.
Tabelle 2 fasst die unterstützten Formate für die Konfigurationsdaten und den entsprechenden Wert für die Dateierweiterung und format
den Parameter zusammen. Wenn Sie die Junos-XML-Formatierung für die Konfigurationsdaten verwenden, müssen Sie die Daten in das Top-Level-Tag <configuration>
einschließen.
Konfigurationsdaten, die als ASCII-Text, Junos OS-Befehle set
oder JSON formatiert sind, müssen Sie nicht wie erforderlich in <configuration-text>
, <configuration-set>
oder <configuration-json>
Tags einschließen, wenn Sie das Gerät direkt in einer NETCONF-Sitzung konfigurieren.
Konfigurationsdatenformat |
Dateiendung |
format-Parameter |
---|---|---|
ASCII-Text |
.conf, .text, .txt |
Text |
JavaScript-Objektnotation (JSON) |
.Json |
Json |
Junos OS-Befehle |
.Festgelegt |
Festgelegt |
Junos XML-Elemente |
.Xml |
Xml |
Wenn der overwrite
Parameter or update
auf True
festgelegt ist, können Sie das Junos OS-Befehlsformat set
nicht verwenden.
Geräte mit Junos OS Version 16.1R1 oder höher unterstützen das Laden von Konfigurationsdaten im JSON-Format.
Geben Sie den Speicherort der Konfigurationsdaten an
Mit Junos PyEZ können Sie Konfigurationsdaten als Zeichenfolgen, Dateien, XML-Objekte oder Jinja2-Vorlagenobjekte laden. Dateien können entweder Konfigurationsdaten-Snippets oder Jinja2-Vorlagen enthalten.
In Tabelle 3 sind die load()
Methodenparameter zusammengefasst, die Sie verwenden, um die Konfigurationsdaten zu übergeben oder auf ihren Speicherort zu verweisen. Sie müssen das Format der Daten immer angeben, indem Sie den format
Parameter in den Methodenaufruf aufnehmen, es sei denn, Sie verwenden Zeichenfolgen, XML-Objekte oder Dateien mit dem durch die Dateierweiterung angegebenen Format. Wenn Sie Jinja2-Vorlagen verwenden, fügen Sie den template_vars
zu übergebenden Parameter in das Wörterbuch der erforderlichen Vorlagenvariablen ein.
Parameter |
Konfigurationsdatenquelle |
Beschreibung |
|
---|---|---|---|
|
Lokale Datei |
Pfad zu einer Datei auf dem lokalen Konfigurationsverwaltungsserver, die Konfigurationsdaten enthält, die als ASCII-Text, Junos XML-Elemente, Junos OS-Befehle |
Sie müssen den |
|
Jinja2 Template-Objekt |
Vorinstalliertes Jinja2-Vorlagenobjekt. Fügen Sie den |
Sie müssen den |
|
Lokale Jinja2-Vorlagendatei |
Pfad zu einer Datei auf dem lokalen Konfigurationsmanagementserver, die eine Jinja2-Vorlage enthält, die als ASCII-Text, Junos XML-Elemente, Junos OS-Befehle Fügen Sie den |
Sie müssen den |
|
Remote-Datei |
Pfad zu einer Datei, die sich auf dem Junos-Gerät oder unter einer Remote-URL befindet, die vom Junos-Gerät aus über eine FTP- oder Hypertext Transfer Protocol (HTTP)-URL erreichbar ist. |
Sie müssen den |
|
XML-Objekt Schnur |
XML-Objekt oder eine Zeichenfolge, die Konfigurationsdaten enthält, die als ASCII-Text, Junos XML-Elemente, Junos OS-Befehle |
Junos PyEZ erkennt in diesem Fall automatisch das Format der Konfigurationsdaten, und der |
Laden von Konfigurationsdaten aus einer lokalen oder Remote-Datei
Mit Junos PyEZ können Sie Konfigurationsdaten, die als ASCII-Text, Junos XML-Elemente, Junos OS-Befehle set
oder JSON formatiert sind, aus einer lokalen oder Remote-Datei laden.
Um Konfigurationsdaten aus einer lokalen Datei auf den Konfigurationsverwaltungsserver zu laden, legen Sie den Parameter der load()
path
Methode auf den absoluten oder relativen Pfad der Datei fest. Zum Beispiel:
from jnpr.junos import Device from jnpr.junos.utils.config import Config dev = Device(host='dc1a.example.com').open() conf_file = 'configs/junos-config-interfaces.conf' with Config(dev, mode='exclusive') as cu: cu.load(path=conf_file, merge=True) cu.commit() dev.close()
Sie können Konfigurationsdaten auch aus einer Datei laden, die sich auf dem Junos-Gerät befindet, oder aus einer URL, die vom Junos-Gerät aus erreichbar ist. Um Konfigurationsdaten aus einer Datei auf dem Junos-Gerät zu laden, legen Sie den url
Parameter auf den absoluten oder relativen Pfad der Datei auf dem Zielgerät fest, und schließen Sie alle anderen Parameter ein, die für den Ladevorgang erforderlich sind. Zum Beispiel:
cu.load(url='/var/home/user/golden.conf')
url
Parameter auf den FTP-Speicherort oder die HTTP-URL (Hypertext Transfer Protocol) einer Remote-Datei fest, und schließen Sie alle anderen Parameter ein, die für den Ladevorgang erforderlich sind. Zum Beispiel:
cu.load(url='ftp://username@ftp.hostname.net/path/filename')
cu.load(url='http://username:password@example.com/path/filename')
Ausführliche Informationen zum Angeben der URL finden Sie im url
Attribut für den Vorgang des Junos-XML-Protokolls <load-configuration> .
Wenn die Datei das Format der Konfigurationsdaten nicht mit einer der akzeptierten Dateierweiterungen angibt, die unter Angeben des Formats der zu ladenden Konfigurationsdaten aufgeführt sind, müssen Sie das Format angeben, indem Sie den format
Parameter in die Liste der load()
Methodenparameter aufnehmen. Zum Beispiel:
conf_file = 'configs/junos-config-interfaces' cu.load(path=conf_file, format='text', merge=True)
Informationen zum Laden von Konfigurationsdaten aus Jinja2-Vorlagen oder Vorlagendateien finden Sie unter Laden von Konfigurationsdaten mithilfe von Jinja2-Vorlagen.
Laden von Konfigurationsdaten aus einer Zeichenfolge
Um Konfigurationsdaten, die als ASCII-Text, Junos XML-Elemente, Junos OS-Befehle set
oder JSON formatiert sind, aus einer Zeichenfolge zu laden, fügen Sie die Zeichenfolge als erstes Argument in die load()
Methodenargumentliste ein. Junos PyEZ erkennt automatisch das Format der Konfigurationsdaten in Zeichenfolgen, sodass der format
Parameter in diesem Fall optional ist.
Die folgenden Codeausschnitte enthalten mehrzeilige Beispielzeichenfolgen, die Konfigurationsdaten in den verschiedenen Formaten und die entsprechenden Aufrufe der load()
Methode enthalten. Der optionale format
Parameter ist aus Gründen der Übersichtlichkeit in jedem Beispiel explizit enthalten. In den Beispielen ist eine Instanz des Dienstprogramms, cu
das Config
auf dem Junos-Zielgerät ausgeführt wird.
from jnpr.junos import Device from jnpr.junos.utils.config import Config dev = Device(host='dc1a.example.com').open() cu = Config(dev)
Für Konfigurationsdaten, die als ASCII-Text formatiert sind:
config_text = """ system { scripts { op { file test.slax; } } } """
Laden Sie die Konfigurationsdaten, indem Sie die Zeichenfolge als erstes Argument in der Liste angeben, und geben
format="text"
Sie optional an.cu.load(config_text, format='text', merge=True)
Für Konfigurationsdaten, die als Junos XML formatiert sind:
config_xml = """ <configuration> <system> <scripts> <op> <file> <name>test.slax</name> </file> </op> </scripts> </system> </configuration> """
Laden Sie die Konfigurationsdaten, indem Sie die Zeichenfolge als erstes Argument in der Liste angeben, und geben
format="xml"
Sie optional an.cu.load(config_xml, format='xml', merge=True)
Für Konfigurationsdaten, die als Junos OS-Befehle
set
formatiert sind:config_set = """ set system scripts op file test.slax """
Laden Sie die Konfigurationsdaten, indem Sie die Zeichenfolge als erstes Argument in der Liste angeben, und geben
format="set"
Sie optional an.cu.load(config_set, format='set', merge=True)
Für Konfigurationsdaten, die mit JSON formatiert sind:
config_json = """{ "configuration" : { "system" : { "scripts" : { "op" : { "file" : [ { "name" : "test.slax" } ] } } } } }"""
Laden Sie die Konfigurationsdaten, indem Sie die Zeichenfolge als erstes Argument in der Liste angeben, und geben
format="json"
Sie optional an.cu.load(config_json, format='json', merge=True)
Laden von Konfigurationsdaten, die als XML-Objekt formatiert sind
Um Konfigurationsdaten zu laden, die als XML-Objekt formatiert sind, fügen Sie das Objekt als erstes Argument in die Liste der load()
Methodenargumente ein, und geben Sie alle anderen erforderlichen Parameter an. Da das Standardformat für Konfigurationsdaten XML ist, müssen Sie den format
Parameter nicht explizit in den Methodenaufruf aufnehmen.
Der folgende Code stellt ein XML-Objekt und den entsprechenden Aufruf der load()
Methode dar:
from jnpr.junos import Device from jnpr.junos.utils.config import Config from lxml.builder import E config_xml_obj = ( E.configuration( # create an Element called "configuration" E.system( E.scripts( E.op ( E.file ( E.name("test.slax"), ) ) ) ) ) ) with Device(host='dc1a.example.com') as dev: with Config(dev, mode='exclusive') as cu: cu.load(config_xml_obj, merge=True) cu.commit()
Laden von Konfigurationsdaten mithilfe von Jinja2-Vorlagen
Junos PyEZ unterstützt die Verwendung von Jinja2-Vorlagen zum Rendern von Junos-Konfigurationsdaten. Jinja ist eine Vorlagen-Engine für Python, mit der Sie Dokumente aus vordefinierten Vorlagen generieren können. Die Vorlagen, bei denen es sich um Textdateien in der gewünschten Sprache handelt, bieten Flexibilität durch die Verwendung von Ausdrücken und Variablen. Sie können Junos-Konfigurationsdaten mithilfe von Jinja2-Vorlagen in einem der unterstützten Konfigurationsformate erstellen, das ASCII-Text, Junos XML-Elemente, Junos OS-Befehle set
und JSON umfasst. Junos PyEZ verwendet die Jinja2-Vorlage und ein mitgeliefertes Variablenwörterbuch, um die Konfigurationsdaten zu rendern.
Jinja2-Vorlagen bieten eine leistungsstarke Methode zum Generieren von Konfigurationsdaten, insbesondere für ähnliche Konfigurationszeilen. Anstatt beispielsweise manuell dieselben Konfigurationsanweisungen für jede Schnittstelle auf einem Gerät hinzuzufügen, können Sie eine Vorlage erstellen, die eine Liste von Schnittstellen durchläuft und die erforderlichen Konfigurationsanweisungen für jede Schnittstelle erstellt. In Jinja werden Blöcke durch '{%
' und '%}
' getrennt und Variablen werden in '{{
' und '}}
' eingeschlossen.
Die folgende Jinja2-Beispielvorlage generiert Konfigurationsdaten, die MPLS auf der logischen Einheit 0 für jede Schnittstelle in einer bestimmten Liste aktivieren, und konfiguriert die Schnittstelle auch unter den Protokollen MPLS und RSVP.
interfaces { {% for item in interfaces %} {{ item }} { description "{{ description }}"; unit 0 { family {{ family }}; } } {% endfor %} } protocols { mpls { {% for item in interfaces %} interface {{ item }}; {% endfor %} } rsvp { {% for item in interfaces %} interface {{ item }}; {% endfor %} } }
Im Junos PyEZ-Code lautet das entsprechende Wörterbuch der Jinja2-Vorlagenvariablen:
config_vars = { 'interfaces': ['ge-1/0/1', 'ge-1/0/2', 'ge-1/0/3'], 'description': 'MPLS interface', 'family': 'mpls' }
Um die Jinja2-Vorlage in den Junos PyEZ-Code zu laden, legen Sie den template_path
Parameter auf den Pfad der Vorlagendatei und den template_vars
Parameter auf das Wörterbuch der Vorlagenvariablen fest. Wenn Sie keine der akzeptierten Dateierweiterungen verwenden, um das Format der Konfigurationsdaten anzugeben, müssen Sie den format
Parameter in die Liste der load()
Methodenparameter aufnehmen.
from jnpr.junos import Device from jnpr.junos.utils.config import Config conf_file = 'configs/junos-config-interfaces-mpls.conf' config_vars = { 'interfaces': ['ge-1/0/1', 'ge-1/0/2', 'ge-1/0/3'], 'description': 'MPLS interface', 'family': 'mpls' } with Device(host='router1.example.com') as dev: with Config(dev, mode='exclusive') as cu: cu.load(template_path=conf_file, template_vars=config_vars, merge=True) cu.commit()
Wenn Sie ein vorinstalliertes Jinja2-Template-Objekt angeben, müssen Sie den template
Parameter anstelle des template_path
Parameters in der load()
Methodenargumentliste verwenden.
Junos PyEZ verwendet die Jinja2-Vorlage und das Variablenwörterbuch, um die folgenden Konfigurationsdaten zu rendern, die dann in die Kandidatenkonfiguration geladen und auf dem Gerät festgeschrieben werden:
interfaces { ge-1/0/1 { description "MPLS interface"; unit 0 { family mpls; } } ge-1/0/2 { description "MPLS interface"; unit 0 { family mpls; } } ge-1/0/3 { description "MPLS interface"; unit 0 { family mpls; } } } protocols { mpls { interface ge-1/0/1; interface ge-1/0/2; interface ge-1/0/3; } rsvp { interface ge-1/0/1; interface ge-1/0/2; interface ge-1/0/3; } }
Das folgende Video zeigt eine kurze Python-Sitzung, in der veranschaulicht wird, wie eine Jinja2-Vorlage zum Konfigurieren eines Junos-Geräts verwendet wird.
Weitere Informationen zu Jinja2 finden Sie in der Jinja2-Dokumentation unter https://jinja.pocoo.org/docs/.
Zurücksetzen der Konfiguration
Junos-Geräte speichern je nach Plattform eine Kopie der zuletzt festgeschriebenen Konfiguration und bis zu 49 vorherige Konfigurationen. 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.
Mit der Junos PyEZ-Klassenmethode jnpr.junos.utils.config.Config
rollback()
können Sie die Konfiguration auf einem Junos-Gerät zurücksetzen. Um für die Konfiguration ein Rollback auszuführen, rufen Sie die rollback()
Methode and auf und legen Sie das Argument rb_id
auf die ID der Rollbackkonfiguration fest. Gültige ID-Werte sind 0 (Null für die zuletzt festgeschriebene Konfiguration) 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.
Im folgenden Beispiel werden Sie zur Eingabe der Rollback-ID der wiederherzustellenden Konfiguration aufgefordert, die Konfiguration wird rückgängig gemacht, die Konfigurationsunterschiede ausgegeben und dann ein Commit für die Konfiguration ausgeführt, um sie zur aktiven Konfiguration auf dem Gerät zu machen.
from jnpr.junos import Device from jnpr.junos.utils.config import Config rollback_id = int(input('Rollback ID of the configuration to restore: ')) with Device(host='dc1a.example.com') as dev: with Config(dev, mode='exclusive') as cu: cu.rollback(rb_id=rollback_id) cu.pdiff() cu.commit()
user@server:~$ python3 junos-pyez-rollback.py Rollback ID of the configuration to restore: 1 [edit interfaces] - ge-0/0/1 { - unit 0 { - family inet { - address 198.51.100.1/24; - } - } - }
Ein ausführlicheres Beispiel mit Fehlerbehandlung finden Sie unter Beispiel: Verwenden von Junos PyEZ zum Zurücksetzen der Konfiguration.
Laden der Rescue-Konfiguration
Mit einer Rettungskonfiguration können Sie eine bekannte funktionierende Konfiguration oder eine Konfiguration mit einem bekannten Status definieren, die Sie jederzeit wiederherstellen können. Sie verwenden die Rettungskonfiguration, wenn Sie zu einer bekannten Konfiguration zurückkehren müssen, oder als letzten Ausweg, wenn Ihre Router- oder Switch-Konfiguration und die Backup-Konfigurationsdateien irreparabel beschädigt werden. Wenn Sie eine Rettungskonfiguration erstellen, speichert das Gerät die zuletzt festgeschriebene Konfiguration als Rettungskonfiguration.
Mit dem Dienstprogramm Junos PyEZ jnpr.junos.utils.config.Config
können Sie die Rettungskonfiguration auf Junos-Geräten verwalten. Nachdem Sie eine Instanz der Config
Klasse erstellt haben, verwenden Sie die Methode rescue()
, um die Rettungskonfiguration zu verwalten. Sie geben die Aktion an, die für die Rettungskonfiguration ausgeführt werden soll, indem Sie den rescue()
Parameter method action
auf den gewünschten Vorgang festlegen.
Um die vorhandene Rettungskonfiguration in die Kandidatenkonfiguration zu laden, geben Sie action="reload"
an. Wenn keine Rettungskonfiguration vorhanden ist, gibt der Ladevorgang . False
Nachdem Sie die Rettungskonfiguration geladen haben, müssen Sie die Konfiguration bestätigen, um sie zur aktiven Konfiguration auf dem Gerät zu machen.
Im folgenden Beispiel wird die Rettungskonfiguration geladen und festgeschrieben, sofern vorhanden:
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a.example.com') as dev: with Config(dev, mode='exclusive') as cu: rescue = cu.rescue(action='reload') if rescue is False: print ('No existing rescue configuration.') else: cu.pdiff() cu.commit()
Weitere Informationen zum Erstellen, Abrufen oder Löschen der Rettungskonfiguration sowie weitere Beispiele finden Sie unter Verwenden von Junos PyEZ zum Verwalten der Rettungskonfiguration auf Junos-Geräten.
Bestätigen der Konfiguration
Nachdem Sie die Konfiguration geändert haben, müssen Sie die Konfiguration bestätigen, um sie zur aktiven Konfiguration auf dem Gerät zu machen. Wenn Sie das Config
Dienstprogramm verwenden, um unstrukturierte Konfigurationsänderungen an einem Gerät vorzunehmen, bestätigen Sie die Kandidatenkonfiguration, indem Sie die commit()
Methode aufrufen.
from jnpr.junos import Device from jnpr.junos.utils.config import Config conf_file = 'configs/junos-config-interfaces.conf' with Device(host='dc1a.example.com') as dev: with Config(dev, mode='exclusive') as cu: cu.load(path=conf_file, merge=True) cu.commit()
Weitere Informationen zum Commit-Vorgang und zu den unterstützten Commit-Optionen in Junos PyEZ-Skripten finden Sie unter Verwenden von Junos PyEZ zum Commit der Konfiguration.
Tabelle "Änderungshistorie"
Die Funktionsunterstützung hängt von der Plattform und der Version ab, die Sie verwenden. Verwenden Sie den Feature-Explorer , um festzustellen, ob ein Feature auf Ihrer Plattform unterstützt wird.