AUF DIESER SEITE
Zuordnung von Konfigurationsanweisungen von Junos OS zu JSON
Eine Konfiguration für ein Gerät, auf dem Junos OS ausgeführt wird, wird als Anweisungenhierarchie gespeichert. Die Konfigurationsanweisungshierarchie hat zwei Arten von Anweisungen:
Container-Anweisungen – Anweisungen, die andere Anweisungen enthalten
Leaf-Anweisungen – Anweisungen, die keine anderen Anweisungen enthalten
Alle Container- und Leaf-Anweisungen bilden zusammen die Konfigurationshierarchie.
Die Konfigurationshierarchie kann zusätzlich zu formatiertem ASCII-Text, Junos XML-Elementen und Konfigurationsmodusbefehlen set
mit JavaScript Object Notation (JSON) dargestellt werden. Ab Junos OS Version 14.2 können Sie die Konfiguration eines Geräts mit Junos OS im JSON-Format anzeigen, indem Sie den show configuration | display json
Befehl in der CLI ausführen. Darüber hinaus können Sie ab Junos OS Version 16.1 Konfigurationsdaten im JSON-Format auf das Gerät laden.
Ab Junos OS Version 16.1 geben Geräte, auf denen Junos OS ausgeführt wird, Konfigurationsdaten im JSON-Format mit einer neuen Standardimplementierung für die Serialisierung aus. Sie können den neuen Standard ietf
explizit konfigurieren oder auf den vorherigen Standard zurücksetzen, verbose
indem Sie die entsprechende Anweisung auf Hierarchieebene [edit system export-format json]
konfigurieren. Sie können die Anweisung konfigurieren, die verbose
mit Junos OS Version 16.1R1 beginnt, obwohl die Anweisung erst nach einer späteren Version in der Junos OS CLI offengelegt wird.
Ab Junos OS Releases 16.1R4, 16.2R2 und 17.1R1 werden ganzzahlige In-Junos OS-Konfigurationsdaten, die im JSON-Format emittiert werden, nicht in Anführungszeichen eingeschlossen. In früheren Versionen werden Ganzzahlen in JSON-Konfigurationsdaten als Zeichenfolgen behandelt und in Anführungszeichen eingeschlossen.
In den folgenden Abschnitten wird die Zuordnung zwischen dem formatierten ASCII-Text und dem Standardformat beschrieben, das für Konfigurationsanweisungen von Junos OS in JSON verwendet wird:
Zuordnung für Hierarchieebenen und Containeranweisungen
Die Konfigurationshierarchie von Junos OS wird in JSON durch ein JSON-Objekt mit einem einzelnen Member der obersten Ebene oder einem Namen/Wert-Paar dargestellt, auf das der Feldname festgelegt "configuration"
ist und ein Wert, der ein JSON-Objekt enthält, das die gesamte Konfiguration darstellt. Das configuration
Mitglied entspricht der [edit]
Hierarchieebene im CLI-Konfigurationsmodus. Die meisten Anweisungen auf den nächsten Ebenen der Konfigurationshierarchie sind Container-Anweisungen.
In JSON ist jede Junos OS-Hierarchieebene oder Container-Anweisung Mitglied des übergeordneten Objekts. Das Element bzw. Name/Wert-Paar hat einen Feldnamen, der dem Namen der Hierarchie oder des Containers entspricht. Sein Wert ist ein JSON-Objekt, das Mitglieder enthält, die die untergeordneten Container und Leaf-Anweisungen auf dieser Hierarchieebene darstellen. Das Objekt kann auch ein Element enthalten, das die Liste der mit dieser Hierarchie verknüpften Attribute enthält.
Das folgende Beispiel zeigt die Zuordnung zwischen formatiertem ASCII-Text und JSON für zwei Anweisungen auf der obersten Ebene der Konfigurationshierarchie:
CLI-Konfigurationsanweisungen
system { login { ...child statements... } } protocols { ospf { ...child statements... } }
JSON-Syntax
{ "configuration" : { "system" : { "login" : { ...JSON configuration data... } } "protocols" : { "ospf" : { ...JSON configuration data... } } } }
Zuordnung für Objekte, die über eine Kennung verfügen
Auf einigen Hierarchieebenen kann dieselbe Art von Konfigurationsobjekt mehrmals auftreten. Jede Instanz des Objekts verfügt über eine eindeutige Kennung, um es von den anderen Instanzen zu unterscheiden. In der CLI-Notation kann die übergeordnete Anweisung für ein solches Objekt aus einem Schlüsselwort und einer Kennung oder nur einem Identifier bestehen.
keyword identifier { … configuration statements for individual characteristics … }
keyword
ist eine feste Zeichenfolge, die den Objekttyp angibt, der definiert wird, und identifier
ein eindeutiger Name für eine Instanz dieses Typs ist. Im folgenden Beispiel user
ist ein Schlüsselwort und username
der Bezeichner.
user username { /* child statements */ }
In JSON sind alle Instanzen eines Konfigurationsobjekts in einem einzelnen Namen/Wertpaar enthalten, in dem der Feldname im Allgemeinen mit der keyword
Zeichenfolge übereinstimmt und der Wert ein Array von JSON-Objekten ist, von denen jede eine Instanz des Konfigurationsobjekts ist. Die JSON-Syntax unterscheidet sich von der CLI in ihrer Behandlung des Identifiers. In JSON verwendet jede Instanz des Konfigurationsobjekts ein Name/Wert-Paar für den Bezeichner, wobei der Feldname diese Daten als Bezeichner unterscheidet und der Wert die tatsächliche eindeutige Kennung für das Objekt ist. Am häufigsten lautet der Feldname nur name
. Einige Objekte verfügen über mehrere Identifikatoren und verwenden möglicherweise einen anderen Feldnamen als name
. JSON-Daten, die einen Identifikator angeben, werden immer zuerst innerhalb des entsprechenden Objekts aufgeführt, aber nach jeder Attributliste, die für dieses Objekt enthalten ist.
{ "keyword" : [ { "@" : { "comment" : "comment" }, "name" : "identifier", JSON data for individual characteristics }, { "name" : "identifier", JSON data for individual characteristics } ] }
Junos OS reserviert das Präfix junos-
für die Identifikatoren von Konfigurationsgruppen, die innerhalb der junos-defaults
Konfigurationsgruppe definiert sind. Benutzerdefinierte Bezeichner können nicht mit der Zeichenfolge junos-
beginnen.
Die Konfiguration für die meisten Objekte mit Identifikatoren enthält zusätzliche Leaf-Anweisungen, die andere Merkmale des Objekts darstellen. Beispielsweise verfügt jede auf Hierarchieebene [edit protocols bgp group]
konfigurierte BGP-Gruppe über einen zugehörigen Namen (den Identifier) und kann Leaf-Anweisungen für andere Merkmale wie Typ, autonome Peer-System-Nummer (AS) und Nachbaradresse haben. Informationen zum JSON-Mapping für Leaf-Anweisungen finden Sie unter Mapping for Single-Value and Fixed-Form Leaf Statements.
Das folgende Beispiel zeigt die Zuordnung von formatiertem ASCII-Text zu JSON für Konfigurationsanweisungen, die zwei BGP-Gruppen mit dem Namen G1 und G2 definieren. In der JSON-Syntax ist der group
Member-Wert ein Array, das für jede BGP-Gruppe ein separates JSON-Objekt enthält.
CLI-Konfigurationsanweisungen
protocols { bgp { group G1 { type external; peer-as 64501; neighbor 10.0.0.1; } group G2 { type external; peer-as 64502; neighbor 10.0.10.1; } } }
JSON-Syntax
{ "configuration" : { "protocols" : { "bgp" : { "group" : [ { "name" : "G1", "type" : "external", "peer-as" : "64501", "neighbor" : [ { "name" : "10.0.0.1" } ] }, { "name" : "G2", "type" : "external", "peer-as" : "64502", "neighbor" : [ { "name" : "10.0.10.1" } ] } ] } } } }
Zuordnung für Einzelwert- und Festform-Leaf-Anweisungen
Eine Leaf-Anweisung ist eine CLI-Konfigurationsanweisung, die keine anderen Anweisungen enthält. Die meisten Leaf-Anweisungen definieren einen Wert für ein Merkmal eines Konfigurationsobjekts und haben folgende Form:
keyword value;
Leaf-Anweisungen von Junos OS werden den Name-/Wertpaaren in JSON zugeordnet. Im Allgemeinen ist der Feldname der gleiche wie die keyword
Zeichenfolge, und der Wert ist der gleiche wie die value
Zeichenfolge.
Das folgende Beispiel zeigt die JSON-Zuordnung für zwei Leaf-Anweisungen mit einem Schlüsselwort und einem Wert: die message
Anweisung auf Hierarchieebene [edit system login]
und die preference
Anweisung auf Hierarchieebene [edit protocols ospf]
.
CLI-Konfigurationsanweisungen
system { login { message "Authorized users only."; ... other statements under login ... } } protocols { ospf { preference 15; ... other statements under ospf ... } }
JSON-Syntax
{ "configuration" : { "system" : { "login" : { "message" : "Authorized users only.", ... JSON data for other statements under login ... } }, "protocols" : { "ospf" : { "preference" : "15", ... JSON data for other statements under ospf ... } } } }
Einige Leaf-Anweisungen bestehen nur aus einem Schlüsselwort mit fester Form, ohne einen zugehörigen variablen Formwert. Junos OS stellt solche Anweisungen in JSON dar, indem es den Wert im Name/Wert-Paar auf [null]
. Im folgenden Beispiel wird die JSON-Zuordnung für die disable
Anweisung auf Hierarchieebene [edit forwarding-options sampling]
dargestellt.
CLI-Konfigurationsanweisungen
forwarding-options { sampling { disable; } }
JSON-Syntax
{ "configuration" : { "forwarding-options" : { "sampling" : { "disable" : [null] } } } }
Zuordnung für Leaf-Anweisungen mit mehreren Werten
Einige Junos OS Leaf-Anweisungen akzeptieren mehrere Werte, die entweder benutzerdefinierte oder aus einer Reihe vordefinierter Werte gezogen werden können. Die CLI-Notation verwendet eckige Klammern, um alle Werte in einer einzigen Anweisung zu umschließen, wie im folgenden Beispiel:
keyword [ value1 value2 value3 ...];
Wie in Mapping for Single-Value and Fixed-Form Leaf Statements erläutert, werden Leaf-Anweisungen in JSON namen-/wertepaaren zugeordnet, wobei der Feldname mit der keyword
Zeichenfolge identisch ist. Zur Darstellung mehrerer Werte verwendet der Wertteil der JSON-Daten ein Array aus kommagetrennten Zeichenfolgen.
Das folgende Beispiel zeigt die JSON-Zuordnung für eine CLI-Anweisung mit mehreren benutzerdefinierten Werten. Die import
Anweisung importiert zwei Routing-Richtlinien, die an anderer Stelle in der Konfiguration definiert sind. Der formatierte ASCII-Text verwendet eine platzsparende Werteliste, während die JSON-Daten ein Array mit einer kommagetrennten Liste von Zeichenfolgen verwenden.
CLI-Konfigurationsanweisungen
protocols { bgp { group 23 { import [ policy1 policy2 ]; } } }
JSON-Syntax
{ "configuration" : { "protocols" : { "bgp" : { "group" : [ { "name" : "23", "import" : ["policy1", "policy2"] } ] } } } }
Das folgende Beispiel zeigt die JSON-Zuordnung für eine CLI-Anweisung mit mehreren vordefinierten Werten. Die permissions
Anweisung gewährt mitgliedern der user-accounts
Anmeldeklasse drei vordefinierte Berechtigungen.
CLI-Konfigurationsanweisungen
system { login { class user-accounts { permissions [ admin configure control ]; } } }
JSON-Syntax
{ "configuration" : { "system" : { "login" : { "class" : [ { "name" : "user-accounts", "permissions" : ["admin", "configure", "control"] } ] } } } }
Zuordnung für mehrere Optionen in einer oder mehreren Zeilen
Bei einigen Junos OS-Konfigurationsobjekten werden mit der Standard-CLI-Syntax mehrere Optionen in einer einzigen Zeile platziert, was in der Regel eine bessere Lesbarkeit und Prägnanenz bietet. In den meisten solchen Fällen identifiziert die erste Option das Objekt und hat kein Schlüsselwort, aber spätere Optionen sind gekoppelte Keywords und Werte.
In JSON ordnet dasselbe Konfigurationsobjekt einem Namen/Wert-Paar zu. Der Feldname ist der gleiche wie der Objektname, und der Wert ist ein JSON-Objekt, das die Optionen enthält, die durch Namen-/Wertpaare dargestellt werden. Wenn die erste Option in der CLI-Anweisung kein Schlüsselwort hat, weist die JSON-Zuordnung einen Namen zu, der dem im Schema definierten und für den entsprechenden Junos XML-Tagnamen verwendeten Optionsnamen entspricht.
Das folgende Beispiel zeigt die JSON-Zuordnung für eine CLI-Konfigurationsanweisung mit mehreren Optionen in einer einzigen Zeile. Die JSON-Darstellung der [edit system backup-router]
Anweisung verwendet Name/Wert-Paare für beide Optionen und weist den Feldnamen address
für die erste Option (10.0.0.1) zu, die kein CLI-Schlüsselwort hat.
CLI-Konfigurationsanweisungen
system { backup-router 10.0.0.1 destination 10.0.0.2/32; }
JSON-Syntax
{ "configuration" : { "system" : { "backup-router" : { "address" : "10.0.0.1", "destination" : ["10.0.0.2/32"] } } } }
Die Syntax für einige Konfigurationsobjekte umfasst mehr als eine Zeile mit mehreren Optionen. In JSON ordnet das Konfigurationsobjekt wie im vorherigen Fall einem Namen/Wert-Paar zu. Der Feldname ist der gleiche wie der Objektname, und der Wert ist ein JSON-Objekt, das die Optionen enthält, die durch Namen-/Wertpaare dargestellt werden. Für jede Option entspricht der Feldname dem Optionsnamen, und der Wert ist eine JSON-Datenstruktur, die die Konfigurationsdaten für diese Option entsprechend darstellt. Wenn eine Option dasselbe Schlüsselwort verwendet, sich aber über mehrere Zeilen erstreckt, kombiniert die JSON-Darstellung die Optionen in einem einzigen Namen/Wertpaar. In diesem Fall ist der Wert ein Array von JSON-Objekten, in denen jede Option einem separaten Objekt zugeordnet wird.
Im folgenden Beispiel wird die JSON-Zuordnung für die traceoptions
Anweisung auf Hierarchieebene [edit protocols isis]
dargestellt. Die traceoptions
Anweisung verfügt über drei untergeordnete Anweisungen, die jeweils mehrere Optionen haben. Die CLI-Notation zeigt die einzelnen flag
Optionen in separaten Zeilen an, aber die JSON-Darstellung kombiniert die flag
Details zu einem einzelnen Namen/Wertpaar. Der Wert ist ein Array von Objekten, bei denen jedes Objekt die Details für ein Flag enthält.
CLI-Konfigurationsanweisungen
protocols { isis { traceoptions { file trace-file size 3m files 10 world-readable; flag route detail; flag state receive; } } }
JSON-Syntax
{ "configuration" : { "protocols" : { "isis" : { "traceoptions" : { "file" : { "filename" : "isis-trace-file", "size" : "3m", "files" : 10, "world-readable" : [null] }, "flag" : [ { "name" : "route", "detail" : [null] }, { "name" : "state", "receive" : [null] } ] } } } } }
Zuordnung für Attribute
Die Junos OS-Konfigurationshierarchie kann Tags enthalten, die eine Hierarchie oder Anweisung ändern. Wenn Sie beispielsweise den deactivate
Befehl zur Deaktivierung einer Anweisung in der Konfiguration ausstellen, wird das inactive:
Tag zum Element in der Konfiguration vorinstalliert, um diese Eigenschaft anzuzeigen. Die Junos XML-API stellt diese Eigenschaft als Attribut im öffnenden Tag des XML-Elements dar.
Die JSON-Darstellung der Junos OS-Konfiguration verwendet Metadatenanmerkungen, um diese Eigenschaften darzustellen. Die Metadatenanmerkungen sind als Mitglieder eines einzelnen JSON-Objekts codiert und enthalten das "@"-Symbol als oder innerhalb des Namens.
Das Metadatenobjekt, das die Attributliste für eine Container-Anweisung darstellt, wird als neues Mitglied dieses Objekts hinzugefügt. Das Metadatenobjekt wird direkt in das Containerobjekt platziert, das es ändert, und verwendet ein einzelnes "@"-Symbol als Membernamen. Das Metadatenobjekt, das die Attributliste für eine Leaf-Anweisung darstellt, wird als Geschwistername/Wertpaar hinzugefügt, das direkt nach der von der Anweisung geänderten Anweisung platziert wird und über einen Membernamen verfügt, der die Verkettung des "@"-Symbols und des Anweisungsnamens darstellt. Der Metadatenobjektwert ist in beiden Fällen ein Objekt, das Namens-/Wertepaare enthält, die jedes der Attribute beschreiben, die mit dieser Container- oder Leaf-Anweisung verknüpft sind.
{ "container" : { "@" : { "attribute-name" : attribute-value, "attribute-name" : attribute-value }, "statement-name" : "statement-value", "@statement-name" : { "attribute-name" : attribute-value, "attribute-name" : attribute-value } } }
In den folgenden Beispielen wurden sowohl die [edit commit]
Hierarchie als auch die persist-groups-inheritance
Aussage deaktiviert. In der CLI werden die Anweisungen dem inactive:
Tag vorangestellt. Die Junos XML-Darstellung enthält das inactive="inactive"
Attribut in jedem der öffnenden Tags für diese Elemente. Die JSON-Zuordnung speichert die Attribute in einer Attributliste. Die Attributliste für die [edit commit]
Hierarchie wird mit "@" angegeben, da es sich um eine Container-Anweisung handelt. Die Attributliste für die persist-groups-inheritance
Anweisung wird mit "@persist-groups-vererbung" angegeben, da es sich um eine Leaf-Anweisung handelt.
CLI-Konfigurationsanweisungen
system { inactive: commit { inactive: persist-groups-inheritance; } }
XML-Syntax
<configuration> <system> <commit inactive="inactive"> <persist-groups-inheritance inactive="inactive"/> </commit> </system> </configuration>
JSON-Syntax
{ "configuration" : { "system" : { "commit" : { "@" : { "inactive" : true }, "persist-groups-inheritance" : [null], "@persist-groups-inheritance" : { "inactive" : true } } } } }
Die Attributliste für eine bestimmte Instanz eines Objekts ähnelt der Attributliste für einen Container, da es sich um ein Name-Wert-Paar handelt, bei dem der Feldname ein einzelnes "@"-Symbol ist und der Wert ein Objekt ist, das Name-/Wertpaare enthält, die jedes der Attribute beschreiben. Die Attributliste wird innerhalb des JSON-Objekts eingeschlossen, das diese Instanz identifiziert, und ist das erste Element im Objekt, gefolgt von der Kennung für das Objekt.
{ "keyword" : [ { "@" : { "attribute-name" : attribute-value }, "name" : "identifier", ...JSON data for individual characteristics... }, /* additional objects */ ] }
Im folgenden Beispiel ist die Ge-0/0/0-Schnittstelle geschützt. In der CLI wird dem Objekt das protect:
Tag vorangestellt. Die Junos XML-Darstellung enthält das protect="protect"
Attribut im öffnenden Tag für dieses Objekt. Die JSON-Zuordnung speichert das "protect" : true
Attribut in einer Attributliste, die im JSON-Objekt enthalten ist und diese spezifische Schnittstelle identifiziert.
CLI-Konfigurationsanweisungen
protect: ge-0/0/0 { unit 0 { family inet { address 198.51.100.1/24; } } }
XML-Syntax
<configuration> <interfaces> <interface protect="protect"> <name>ge-0/0/0</name> <unit> <name>0</name> <family> <inet> <address> <name>198.51.100.1/24</name> </address> </inet> </family> </unit> </interface> </interfaces> </configuration>
JSON-Syntax
{ "configuration" : { "interfaces" : { "interface" : [ { "@" : { "protect" : true }, "name" : "ge-0/0/0", "unit" : [ { "name" : 0, "family" : { "inet" : { "address" : [ { "name" : "198.51.100.1/24" } ] } } } ] } ] } } }
Zuordnung für Konfigurationskommentare
Eine Junos OS-Konfiguration kann Kommentare enthalten, die Anweisungen in der Konfiguration beschreiben. Konfigurationsdaten, die mit ASCII-Text oder Junos XML-Elementen formatiert werden, zeigen Kommentare in der Zeile vor der Anweisung an, die der Kommentar ändert. Im Junos XML-Format wird die Kommentarzeichenfolge in einem <junos:comment>
Element eingeschlossen.
Kommentare werden mithilfe eines von zwei Trennzeichen angezeigt: die paarigen Zeichenfolgen /*
und */
das Umschließen des Kommentars oder des Zeichens, das #
dem Kommentar vorangeht. Sie können entweder ein Trennzeichen in der Kommentarzeichenfolge verwenden, wenn Sie Kommentare in die Konfiguration einfügen. Wenn Sie das Trennzeichen weglassen, fügt /*
Junos OS automatisch ein und */
.
Junos OS behält jeden im Kommentar enthaltenen Leerraum bei.
Konfigurationsdaten von Junos OS, die mit JSON formatiert werden, ordnet einen Kommentar einem Namen/Wertpaar zu, das als Attribut der von diesem geänderten Anweisung gespeichert wird. Der Feldname ist auf "comment"
festgelegt, und der Wert ist die Kommentartextzeichenfolge. Die Kommentartextzeichenfolge kann eines der beiden Trennzeichen enthalten, die einen Kommentar angeben. Wenn Sie beim Laden der JSON-Konfigurationsdaten das Trennzeichen aus der Kommentartextzeichenfolge weglassen, fügt Junos OS dem Kommentar automatisch die /*
Trennzeichen hinzu */
. Sie können auch Mehrlinienkommentare in JSON-Konfigurationsdaten erstellen, indem Sie das Newline-Zeichen (\n
) in die Kommentarzeichenfolge einfügen.
Das folgende Beispiel zeigt die formatierte ASCII-Konfiguration und die entsprechende JSON-Syntax für drei Kommentare. Das Beispiel verknüpft einen Kommentar mit einer Hierarchie, einen anderen Kommentar mit einem Objekt, das eine Kennung hat, und einen dritten Kommentar mit einer Leaf-Anweisung.
CLI-Konfigurationsanweisungen
protocols { /* New backbone area */ ospf { area 0.0.0.0 { /* From jnpr1 to jnpr2 */ interface so-0/0/0.0 { # set by admin hello-interval 5; } } } }
JSON-Syntax
{ "configuration" : { "protocols" : { "ospf" : { "@" : { "comment" : "/* New backbone area */" }, "area" : [ { "name" : "0.0.0.0", "interface" : [ { "@" : { "comment" : "/* From jnpr1 \n to jnpr2 */" }, "name" : "so-0/0/0.0", "hello-interval" : 5, "@hello-interval" : { "comment" : "# set by admin" } } ] } ] } } } }