AUF DIESER SEITE
Beispiel: Konfigurieren von Dual-Routing-Engines
Wenn Ihr Gerät über redundante Routing-Engines (auch als duale Engines bezeichnet) verfügt, kann Ihre Junos OS-Konfiguration komplex sein. Dieses Beispiel zeigt, wie Sie Commit-Skripte verwenden können, um die Konfiguration von dualen Routing-Engine-Plattformen zu vereinfachen und zu steuern.
Anforderungen
In diesem Beispiel wird ein Gerät mit Junos OS und zwei Routing-Engines verwendet.
Übersicht und Commit-Skript
Junos OS unterstützt zwei spezielle Konfigurationsgruppen: re0
und re1
. Wenn diese Gruppen mithilfe der Anweisung angewendet werden, werden sie wirksam, wenn der apply-groups [ re0 re1 ]
Name des Routingmoduls mit dem Gruppennamen übereinstimmt. Anweisungen, die auf der Hierarchieebene enthalten sind, werden nur an das Routingmodul mit dem Namen RE0 vererbt, und Anweisungen, die auf der [edit groups re0]
[edit groups re1]
Hierarchieebene enthalten sind, werden nur an das Routingmodul mit dem Namen RE1 vererbt.
Dieses Beispiel enthält zwei Commit-Skripte. Das erste Skript, dual-re.xsl, generiert eine Warnung, wenn die Anweisung, eine IPv4-Schnittstellenadresse (IP Version 4) oder die system host-name
fxp0-Schnittstellenkonfiguration in der Zielkonfiguration und nicht in einer Konfigurationsgruppe konfiguriert ist.
Das zweite Skript, dual-re2.xsl, prüft zunächst, ob die Hostnamenkonfiguration konfiguriert ist, und dann, ob sie in einer Konfigurationsgruppe konfiguriert ist. Das otherwise
Konstrukt erzeugt eine Fehlermeldung, wenn der Hostname überhaupt nicht konfiguriert ist. Das erste when
Konstrukt lässt zu, dass das Skript nichts tut, wenn der Hostname bereits in einer Konfigurationsgruppe konfiguriert ist. Das zweite when
Konstrukt tritt in Kraft, wenn der Hostname in der Zielkonfiguration konfiguriert ist. In diesem Fall generiert das Skript eine vorübergehende Änderung, die die Hostnamenkonfiguration in die Konfigurationsgruppen und einordnet, den konfigurierten Hostnamen in diese Gruppen kopiert, jeden Gruppenhostnamen mit -RE0
und verkettet und re1
-RE1
den Hostnamen in der Zielkonfiguration deaktiviert, sodass die re0
Hostnamen der Konfigurationsgruppe vererbt werden können.
Die Beispielskripte werden sowohl in XSLT- als auch in SLAX-Syntax angezeigt:
XSLT-Syntax: dual-re.xsl-Skript
<?xml version="1.0" standalone="yes"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"> <xsl:import href="../import/junos.xsl"/> <xsl:template match="configuration"> <xsl:for-each select="system/host-name | interfaces/interface/unit/family/inet/address | interfaces/interface[name = 'fxp0']"> <xsl:if test="not(@junos:group) or not(starts-with(@junos:group, 're'))"> <xnm:warning> <xsl:call-template name="jcs:edit-path"> <xsl:with-param name="dot" select=".."/> </xsl:call-template> <xsl:call-template name="jcs:statement"/> <message> <xsl:text>statement should not be in target</xsl:text> <xsl:text> configuration on dual RE system</xsl:text> </message> </xnm:warning> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>
XSLT-Syntax: dual-re2.xsl-Skript
<?xml version="1.0" standalone="yes"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"> <xsl:import href="../import/junos.xsl"/> <xsl:template match="configuration"> <xsl:variable name="hn" select="system/host-name"/> <xsl:choose> <xsl:when test="$hn/@junos:group"/> <xsl:when test="$hn"> <transient-change> <groups> <name>re0</name> <system> <host-name> <xsl:value-of select="concat($hn, '-RE0')"/> </host-name> </system> </groups> <groups> <name>re1</name> <system> <host-name> <xsl:value-of select="concat($hn, '-RE1')"/> </host-name> </system> </groups> <system> <host-name inactive="inactive"/> </system> </transient-change> </xsl:when> <xsl:otherwise> <xnm:error> <message>Missing [system host-name]</message> </xnm:error> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
SLAX-Syntax: dual-re.xsl-Skript
version 1.0; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; match configuration { for-each (system/host-name | interfaces/interface/unit/family/inet/address | interfaces/interface[name = 'fxp0']) { if (not(@junos:group) or not(starts-with(@junos:group, 're'))) { <xnm:warning> { call jcs:edit-path($dot = ..); call jcs:statement(); <message> { expr "statement should not be in target"; expr " configuration on dual RE system"; } } } } }
SLAX-Syntax: dual-re2.xsl-Skript
version 1.0; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; match configuration { var $hn = system/host-name; if ($hn/@junos:group) { } else if ($hn) { <transient-change> { <groups> { <name> "re0"; <system> { <host-name> $hn _ '-RE0'; } } <groups> { <name> "re1"; <system> { <host-name> $hn _ '-RE1'; } } <system> { <host-name inactive="inactive">; } } else { <xnm:error> { <message> "Missing [system host-name]"; } } } }
Konfiguration
Verfahren
Schritt-für-Schritt-Anleitung
So laden Sie die Skripte herunter, aktivieren sie und führen sie aus:
Kopieren Sie die Skripte in zwei Textdateien, nennen Sie die Dateien je nach Bedarf dual-re.xsl und dual-re2.xsl oder dual-re.slax und dual-re2.slax und kopieren Sie sie in das Verzeichnis /var/db/scripts/commit/ auf dem Gerät .
Wählen Sie die folgenden Testkonfigurationszeilen aus, und drücken Sie STRG+C, um sie in die Zwischenablage zu kopieren.
Wenn Sie die SLAX-Version des Skripts verwenden, ändern Sie die Dateinamen auf Hierarchieebene
[edit system scripts commit file]
in dual-re.slax und dual-re2.slax.groups { re0 { interfaces { fxp0 { unit 0 { family inet { address 10.0.0.1/24; } } } } } } apply-groups re0; system { host-name router1; scripts { commit { file dual-re.xsl; file dual-re2.xsl; } } } interfaces { fe-0/0/0 { unit 0 { family inet { address 192.168.220.1/30; } } } }
Geben Sie im Konfigurationsmodus den
load merge terminal
Befehl zum Zusammenführen der Zeilengruppen in Ihre Gerätekonfiguration ein.[edit] user@host# load merge terminal [Type ^D at a new line to end input] ... Paste the contents of the clipboard here ...
Fügen Sie an der Eingabeaufforderung den Inhalt der Zwischenablage mit der Maus und dem Einfügesymbol ein.
Drücken Sie die Eingabetaste.
Drücken Sie Strg+d.
Bestätigen Sie die Konfiguration.
user@host# commit
Überprüfung
Überprüfen der Änderungen am Commit-Skript
Zweck
Stellen Sie sicher, dass sich das Skript wie erwartet verhält.
Aktion
Überprüfen Sie die Ausgabe des commit
Befehls. Nach Abschluss des Commit-Vorgangs wird der Hostname des Geräts in router1-RE0 geändert.
[edit] user@host# commit [edit system] 'host-name router1;' warning: statement should not be in target configuration on dual RE system [edit interfaces interface fe-0/0/0 unit 0 family inet] 'address 192.168.220.1/30;' warning: statement should not be in target configuration on dual RE system commit complete