AUF DIESER SEITE
Angeben des Umfangs der zurückzugebenden Konfigurationsdaten
Angeben des Formats der zurückzugebenden Konfigurationsdaten
Abrufen von Konfigurationsdaten für YANG-Datenmodelle von Drittanbietern
Angeben von Optionen, die kein entsprechendes Modulargument haben
Vergleichen der aktiven Konfiguration mit einer vorherigen Konfiguration
Verwenden von Ansible zum Abrufen oder Vergleichen von Junos OS-Konfigurationen
ZUSAMMENFASSUNG Verwenden Sie die Ansible-Module von Juniper Networks, um Konfigurationen auf Junos-Geräten abzurufen oder zu vergleichen.
Juniper Networks stellt ein Ansible-Modul bereit, mit dem Sie die Konfiguration auf Junos-Geräten verwalten können. Tabelle 1 gibt einen Überblick über das verfügbare Modul, mit dem Sie Junos-Gerätekonfigurationen abrufen oder vergleichen können.
Inhaltsgruppe |
Modulname |
---|---|
|
Sie können das juniper.device.config
Modul verwenden, um die vollständige Konfiguration oder ausgewählte Teile der Konfiguration sowohl für die native Junos OS-Konfiguration als auch für Konfigurationsdaten anzufordern, die YANG-Datenmodellen von Drittanbietern entsprechen, die dem Gerät hinzugefügt wurden. Um die Konfiguration von einem Junos-Gerät abzurufen, führen Sie das config
Modul mit dem retrieve
Parameter aus. Die Antwort des Moduls enthält die Konfiguration im Textformat in den config
Schlüsseln und config_lines
, es sei denn, die return_output
Option ist auf false
festgelegt. Sie können die aktive Konfiguration auch mit einer zuvor bestätigten Konfiguration vergleichen.
In den folgenden Abschnitten wird erläutert, wie das Modul zum Abrufen oder Vergleichen von Konfigurationen verwendet wird.
Angeben der Quelldatenbank für die Konfigurationsdaten
Wenn Sie das juniper.device.config
Modul zum Abrufen der Konfiguration verwenden, müssen Sie den retrieve
Parameter in die Argumentliste des Moduls aufnehmen. Der retrieve
Parameter gibt die Konfigurationsdatenbank an, aus der die Daten abgerufen werden sollen. Sie können die folgenden Werte festlegen retrieve
, um Konfigurationsdaten aus der jeweiligen Datenbank zurückzugeben:
-
retrieve: 'candidate'
: Ruft Daten aus der Kandidatenkonfiguration ab. -
retrieve: 'committed'
: Ruft Daten aus der festgeschriebenen Konfiguration ab.
Committed-Konfigurationsdatenbank
Mit dem folgenden Playbook wird die vollständige bestätigte Konfiguration im Textformat für jedes Gerät in der Bestandslistengruppe abgerufen:
--- - name: "Get Junos OS configuration" hosts: junos-all connection: local gather_facts: no tasks: - name: "Get committed configuration" juniper.device.config: retrieve: "committed" register: response - name: "Print result" ansible.builtin.debug: var: response
Konfigurationsdatenbank für Kandidaten
Mit dem folgenden Playbook wird die vollständige Kandidatenkonfiguration im Textformat für jedes Gerät in der Bestandslistengruppe abgerufen. Das Modul gibt einen Fehler zurück, wenn die Datenbank gesperrt oder geändert ist.
--- - name: "Get Junos OS configuration" hosts: junos-all connection: local gather_facts: no tasks: - name: "Get candidate configuration" juniper.device.config: retrieve: "candidate" register: response - name: "Print result" ansible.builtin.debug: var: response
Angeben des Umfangs der zurückzugebenden Konfigurationsdaten
Sie können nicht nur die vollständige Junos OS-Konfiguration abrufen, sondern auch bestimmte Teile der Konfiguration abrufen, indem Sie den Parameter des config
Moduls filter
einschließen. Der filter
Wert des Parameters ist eine Zeichenfolge, die den Teilstrukturfilter enthält, der die zurückzugebenden Konfigurationsanweisungen auswählt. Der Teilbaumfilter gibt die Konfigurationsdaten zurück, die den Selektionskriterien entsprechen. Wenn Sie mehrere Hierarchien anfordern, muss der Wert von filter
alle Ebenen der Konfigurationshierarchie darstellen, beginnend mit dem Stamm (dargestellt durch das <configuration>
Element) bis hin zu jedem anzuzeigenden Element.
Mit dem folgenden Playbook wird die Konfiguration auf der [edit interfaces]
Hierarchieebene und [edit protocols]
in der Datenbank für die committierte Konfiguration für jedes Gerät abgerufen und ausgegeben:
--- - name: "Get Junos OS configuration hierarchies" hosts: dc1 connection: local gather_facts: no tasks: - name: "Get selected configuration hierarchies" juniper.device.config: retrieve: "committed" filter: "<configuration><interfaces/><protocols/></configuration>" register: response - name: "Print result" ansible.builtin.debug: var: response
Das folgende Playbook ruft die Konfiguration für die ge-1/0/1-Schnittstelle ab und gibt sie aus:
--- - name: "Get Junos OS configuration hierarchies" hosts: dc1 connection: local gather_facts: no tasks: - name: "Get selected configuration hierarchies" juniper.device.config: retrieve: "committed" filter: "<interfaces><interface> <name>ge-1/0/1</name></interface></interfaces>" register: response - name: "Print result" ansible.builtin.debug: var: response
Mit dem folgenden Playbook wird die Konfiguration, für die auf der [edit system services]
Hierarchieebene ein Commit ausgeführt wurde, abgerufen und ausgegeben:
--- - name: "Get Junos OS configuration hierarchies." hosts: dc1 connection: local gather_facts: no tasks: - name: "Get selected configuration hierarchies" juniper.device.config: retrieve: "committed" filter: "system/services" register: response - name: "Print result" ansible.builtin.debug: var: response
Angeben des Formats der zurückzugebenden Konfigurationsdaten
Wenn Sie das juniper.device.config
Modul zum Abrufen der Konfiguration verwenden, ruft das Modul den Junos-XML-Protokollvorgang <get-configuration>
auf, der Konfigurationsdaten in verschiedenen Formaten zurückgeben kann. Standardmäßig gibt das Modul Konfigurationsdaten als formatierten Text zurück. Das Textformat verwendet Zeilenumbrüche, Tabulatoren und andere Leerzeichen, geschweifte Klammern und eckige Klammern, um die hierarchischen Beziehungen zwischen den Anweisungen anzugeben.
Um das Format anzugeben, in dem die Konfigurationsdaten zurückgegeben werden sollen, legen Sie den format
Parameter des config
Moduls auf das gewünschte Format fest. Zu den akzeptablen Werten gehören:
-
'json'
– JavaScript-Objektnotation (JSON) -
'set'
– Junos OS-Befehleset
-
'text'
– Formatierter Text (Standard) -
'xml'
– Junos-XML-Elemente
In der Playbookausgabe enthalten die config
Schlüssel und config_lines
die Konfiguration im angeforderten Format. Wenn Sie das Junos XML- oder JSON-Format anfordern, enthält der config_parsed
Schlüssel die entsprechende Konfiguration im JSON-Format.
Mit dem folgenden Playbook wird die vollständige, für jedes Gerät in der Bestandslistengruppe festgelegte Konfiguration im XML-Format abgerufen:
--- - name: "Get Junos OS configuration." hosts: junos-all connection: local gather_facts: no tasks: - name: "Get configuration in XML format" juniper.device.config: retrieve: "committed" format: "xml" register: response - name: "Print result" ansible.builtin.debug: var: response
Abrufen von Konfigurationsdaten für YANG-Datenmodelle von Drittanbietern
Sie können standardisierte oder benutzerdefinierte YANG-Module auf Junos-Geräte laden, um Datenmodelle hinzuzufügen, die von Junos OS nicht nativ unterstützt, aber von der Übersetzung unterstützt werden können. Sie konfigurieren nicht-native Datenmodelle in der Kandidatenkonfiguration mit der für diese Modelle definierten Syntax. Wenn Sie die Konfiguration bestätigen, übersetzen die Übersetzungsskripte des Datenmodells diese Daten und bestätigen die entsprechende Junos OS-Konfiguration als vorübergehende Änderung in der Check-out-Konfiguration.
Die Kandidaten- und aktiven Konfigurationen enthalten die Konfigurationsdaten für nicht native YANG-Datenmodelle in der von diesen Modellen definierten Syntax. Sie können das juniper.device.config
Modul verwenden, um Konfigurationsdaten für Standard- (IETF, OpenConfig) und benutzerdefinierte YANG-Datenmodelle sowie die native Junos OS-Konfiguration abzurufen. Standardmäßig sind Konfigurationsdaten für YANG-Datenmodelle von Drittanbietern nicht in der Antwort des Moduls enthalten.
Um Konfigurationsdaten abzurufen, die durch ein nicht-natives YANG-Datenmodell definiert sind, zusätzlich zum Abrufen der Junos OS-Konfiguration, führen Sie das Modul mit dem model
Parameter aus und schließen Sie den namespace
Parameter ggf. ein. Das model
Argument nimmt einen der folgenden Werte an:
-
custom
– Ruft Konfigurationsdaten ab, die durch benutzerdefinierte YANG-Datenmodelle definiert sind. Sie müssen dasnamespace
Argument beim Abrufen von Daten für benutzerdefinierte YANG-Datenmodelle einschließen. -
ietf
– Ruft Konfigurationsdaten ab, die durch IETF-YANG-Datenmodelle definiert sind. -
openconfig
– Ruft Konfigurationsdaten ab, die durch OpenConfig-YANG-Datenmodelle definiert sind. -
True
– Rufen Sie alle Konfigurationsdaten ab, einschließlich der vollständigen Junos OS-Konfiguration und Daten aus beliebigen YANG-Datenmodellen.
Wenn das model
Argument oder openconfig
angibtietf
, verwendet das Modul automatisch den entsprechenden Namespace. Wenn Sie angebenmodel: "custom"
, dass Daten für ein benutzerdefiniertes YANG-Datenmodell abgerufen werden sollen, müssen Sie auch das namespace
Argument mit dem entsprechenden Namespace einschließen.
Wenn Sie das model
Argument mit dem Wert custom
, ietf
oder openconfig
und auch das filter
Argument einschließen, um eine bestimmte XML-Teilstruktur zurückzugeben, gibt Junos OS nur die übereinstimmende Hierarchie aus dem nicht nativen Datenmodell zurück. Wenn die Junos OS-Konfiguration eine gleichnamige Hierarchie enthält, z. B. "Schnittstellen", ist diese nicht in der Antwort enthalten. Die filter
Option wird bei Verwendung von model: "True"
nicht unterstützt.
Wenn Sie das config
Modul zum Abrufen von nicht systemeigenen Konfigurationsdaten verwenden, können Sie das Format der zurückgegebenen Daten nur angeben, wenn Sie auch den filter
Parameter einschließen. Wenn Sie den Parameter weglassen, müssen format: "xml"
Sie angebenfilter
.
Das folgende Playbook ruft die OpenConfig-Konfigurationshierarchie interfaces
aus der Commited-Konfiguration ab. Wenn Sie das filter
Argument weglassen, gibt der RPC die vollständigen Junos OS- und OpenConfig-Konfigurationen zurück.
--- - name: "Retrieve OpenConfig configuration" hosts: dc1 connection: local gather_facts: no tasks: - name: "Retrieve the OpenConfig interfaces configuration" juniper.device.config: retrieve: "committed" model: "openconfig" filter: "interfaces" format: "xml" register: response - name: "Print result" ansible.builtin.debug: var: response
Mit der folgenden Aufgabe wird die l2vpn
Konfigurationshierarchie aus der festgeschriebenen Konfiguration für ein benutzerdefiniertes YANG-Datenmodell mit dem angegebenen Namespace abgerufen:
tasks: - name: "Retrieve custom configuration" juniper.device.config: retrieve: "committed" model: "custom" filter: "l2vpn" remove_ns: False namespace: "http://yang.juniper.net/customyang/l2vpn" format: "xml" register: response
Mit der folgenden Aufgabe werden die vollständige, für Junos OS festgelegte Konfiguration sowie die Konfigurationsdaten für andere YANG-Datenmodelle abgerufen, die dem Gerät hinzugefügt wurden:
tasks: - name: "Retrieve Junos OS and all third-party configuration data" juniper.device.config: retrieve: "committed" model: "True" format: "xml" register: response
Angeben von Optionen, die kein entsprechendes Modulargument haben
Wenn Sie das juniper.device.config
Modul zum Abrufen der Konfiguration verwenden, ruft das Modul den Junos XML-Protokollvorgang <get-configuration>
auf. Das Modul unterstützt explizite Argumente für viele der <get-configuration>
Attribute, z. B. das format
Attribut. Das Modul unterstützt auch das Argument, mit dem options
Sie zusätzliche <get-configuration>
Attribute einschließen können, für die kein entsprechendes Modulargument vorhanden ist. Das options
Argument verwendet ein Wörterbuch von Schlüssel-Wert-Paaren aller Attribute, die von der <get-configuration>
Operation unterstützt werden.
Eine vollständige Liste der Attribute, die von der Junos XML-Protokolloperation <get-configuration>
unterstützt werden, finden Sie unter <get-configuration>.
Das config
Modul ruft z. B. Daten aus der Konfiguration vor der Vererbung ab, in der , <apply-groups-except>
<groups>
<apply-groups>
, und <interface-range>
Tags separate Elemente in der Konfigurationsausgabe sind. Zum Abrufen von Daten aus der Konfiguration nach der Vererbung, in der Anweisungen angezeigt werden, die von benutzerdefinierten Gruppen und Bereichen als untergeordnete Elemente der erbenden Anweisungen geerbt wurden, können Sie das options
Argument mit inherit: "inherit"
einschließen.
Das folgende Playbook ruft die Konfigurationsdaten auf Hierarchieebene aus der Konfiguration ab, für [edit system services]
die nach der Vererbung ein Commit ausgeführt wurde. Wenn die Konfiguration in diesem Fall auch Anweisungen enthält, die auf der [edit groups global system services]
Hierarchieebene konfiguriert sind, werden diese Anweisungen unter in [edit system services]
der Konfiguration nach der Vererbung vererbt und in den abgerufenen Konfigurationsdaten zurückgegeben.
--- - name: "Get Junos OS configuration hierarchies" hosts: dc1 connection: local gather_facts: no tasks: - name: "Get selected hierarchy from the post-inheritance configuration" juniper.device.config: retrieve: "committed" filter: "system/services" options: inherit: "inherit" register: response - name: "Print result" ansible.builtin.debug: var: response
Speichern von Konfigurationsdaten in einer Datei
Wenn Sie das juniper.device.config
Modul zum Abrufen der Konfiguration verwenden, können Sie die zurückgegebenen Konfigurationsdaten in einer Datei auf dem lokalen Ansible-Steuerungsknoten speichern, indem Sie den Parameter oder dest
des Moduls dest_dir
einfügen. Die dest_dir
Option gibt nur ein Verzeichnis an, und die dest
Option kann sowohl einen Pfad als auch einen Dateinamen angeben. Wenn bereits eine Ausgabedatei mit dem Zielnamen vorhanden ist, überschreibt das Modul die Datei.
Um das Verzeichnis auf dem lokalen Ansible-Kontrollknoten anzugeben, in dem die abgerufenen Konfigurationen gespeichert werden, fügen Sie das dest_dir
Argument hinzu und definieren Sie den Pfad zum Zielverzeichnis. Die Konfiguration für jedes Gerät wird in einer separaten Datei mit dem Namen hostname.config gespeichert.
Mit dem folgenden Playbook wird die bestätigte Konfiguration von allen Geräten in der Bestandslistengruppe abgerufen. Das Playbook speichert jede Gerätekonfiguration in einer separaten Datei im Verzeichnis configs unter dem Playbook-Verzeichnis auf dem Ansible-Steuerungsknoten.
--- - name: "Get Junos OS configuration" hosts: junos-all connection: local gather_facts: no tasks: - name: "Save configuration to a file" juniper.device.config: retrieve: "committed" dest_dir: "{{ playbook_dir }}/configs"
Um den Pfad und den Dateinamen für die Ausgabedateien anzugeben, schließen Sie das dest
Argument ein und definieren Sie den absoluten oder relativen Pfad der Datei. Wenn Sie das dest
Argument einschließen, aber das Verzeichnis weglassen, werden die Dateien im Playbook-Verzeichnis gespeichert. Wenn Sie die Konfiguration für mehrere Geräte abrufen, muss das dest
Argument eine Variable enthalten, z. B {{ inventory_hostname }}
. um den Dateinamen für jedes Gerät zu unterscheiden. Wenn Sie die Dateinamen nicht unterscheiden, überschreibt die Konfigurationsdatei für jedes Gerät die Konfigurationsdatei der anderen Geräte.
Mit dem folgenden Playbook wird die [edit system services]
Hierarchie aus der Datenbank mit der festgeschriebenen Konfiguration auf allen Geräten in der Bestandslistengruppe abgerufen. Das Playbook speichert jede Gerätekonfiguration in einer separaten Datei im Playbook-Verzeichnis auf dem Ansible-Steuerungsknoten. Jede Datei wird durch den Hostnamen des Geräts eindeutig identifiziert.
--- - name: "Get Junos OS configuration" hosts: junos-all connection: local gather_facts: no tasks: - name: "Get selected configuration hierarchies and save to file" juniper.device.config: retrieve: "committed" filter: "system/services" dest: "{{ inventory_hostname }}-system-services-config"
Wenn Sie die Konfigurationsdaten in Dateien speichern und die Konfigurationsdaten in der Antwort des Moduls nicht duplizieren möchten, können Sie sie optional in die Argumentliste des Moduls aufnehmenreturn_output: false
. Die Einstellung return_output
auf false
bewirkt, dass das Modul die Tasten , config_lines
und config_parsed
und config
in seiner Antwort weglässt. Dies kann erforderlich sein, wenn das Gerät eine beträchtliche Menge an Konfigurationsdaten zurückgibt.
Vergleichen der aktiven Konfiguration mit einer vorherigen Konfiguration
Das juniper.device.config
Modul ermöglicht es Ihnen, die aktive Konfiguration mit einer zuvor bestätigten Konfiguration oder Rollback-Konfiguration zu vergleichen. Um die aktive Konfiguration mit einer vorherigen Konfiguration zu vergleichen, schließen Sie die folgenden Modulargumente ein:
juniper.device.config: diff: true rollback: id check: false commit: false
Wenn Sie das rollback: id
Argument einschließen, führt das Modul standardmäßig ein Rollback der Konfiguration durch, führt eine Commit-Prüfung durch und führt einen Commit für die Änderungen durch. Sie müssen das commit: false
Argument einschließen, um nur die Konfigurationen zu vergleichen und zu verhindern, dass das Modul geladen wird und die Rollback-Konfiguration festschreibt. Durch das Einfügen des check: false
Arguments wird der unnötige Commit-Check-Vorgang verhindert.
Das Modul gibt die diff
Schlüssel und diff_lines
zurück. Die Schlüssel enthalten die Konfigurationsunterschiede zwischen der aktiven und der vorherigen Konfiguration im Diff - oder Patch-Format.
-
diff
— Wörterbuch, das einen einzelnen Schlüssel mit dem Namenprepared
und seinen Wert enthält, bei dem es sich um eine einzelne mehrzeilige Zeichenfolge handelt, die die Unterschiede enthält. -
diff_lines
: Liste der einzelnen Zeichenfolgen, die die Unterschiede enthalten.
Um die Unterschiede in einer Datei auf dem lokalen Ansible-Kontrollknoten zu speichern, fügen Sie das diffs_file
Argument hinzu und definieren Sie den absoluten oder relativen Pfad der Ausgabedatei. Wenn Sie das diffs_file
Argument einschließen, aber das Verzeichnis weglassen, werden die Dateien im Playbookverzeichnis gespeichert. Wenn Sie die Konfigurationen auf mehreren Geräten vergleichen, muss das diffs_file
Argument eine Variable enthalten, z. B {{ inventory_hostname }}
. zur Unterscheidung des Dateinamens für jedes Gerät. Wenn Sie die Dateinamen nicht unterscheiden, überschreibt die Ausgabedatei für jedes Gerät die Ausgabedatei der anderen Geräte.
Das folgende Playbook fordert Sie zur Eingabe der Rollback-ID einer Konfiguration auf, für die zuvor ein Commit ausgeführt wurde. Das Playbook vergleicht dann die Commit-Konfiguration mit der angegebenen Rollbackkonfiguration, speichert den Vergleich in einer Datei mit eindeutigem Namen und gibt auch die Antwort auf die Standardausgabe aus.
--- - name: "Compare configurations" hosts: dc1 connection: local gather_facts: no vars_prompt: - name: "ROLLBACK" prompt: "Rollback ID to compare with active configuration" private: no tasks: - name: "Compare active to previous configuration" juniper.device.config: diff: true rollback: "{{ ROLLBACK }}" check: false commit: false diffs_file: "{{ inventory_hostname }}-diff-rollback-{{ ROLLBACK }}" register: response - name: "Print diff" ansible.builtin.debug: var: response
user@ansible-cn:~$ ansible-playbook configuration-compare-to-rollback.yaml Rollback ID to compare with active configuration: 2 PLAY [Compare configurations] ************************************************* TASK [Compare active to previous configuration] ****************************** changed: [dc1a.example.net] TASK [Print diff] ************************************************************ ok: [dc1a.example.net] => { "response": { "changed": true, "diff": { "prepared": "\n[edit system services]\n- netconf {\n- ssh;\n- }\n" }, "diff_lines": [ "", "[edit system services]", "- netconf {", "- ssh;", "- }" ], "failed": false, "msg": "Configuration has been: opened, rolled back, diffed, closed." } } PLAY RECAP ******************************************************************** dc1a.example.net : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
user@ansible-cn:~$ cat dc1a.example.net-diff-rollback-2 [edit system services] - netconf { - ssh; - }