AUF DIESER SEITE
Beispiel: Konfigurieren eines Interior Gateway-Protokolls auf einer Schnittstelle
In diesem Commit-Skriptbeispiel wird ein Makro verwendet, um automatisch eine Schnittstelle auf Hierarchieebene [edit protocols]
einzuschließen und das richtige Interior Gateway Protocol (IGP) auf der Schnittstelle zu konfigurieren.
Anforderungen
In diesem Beispiel wird ein Gerät verwendet, auf dem Junos OS ausgeführt wird.
Übersicht und Commit-Skript
Wenn Sie einer OSPF- oder IS-IS-Domäne eine neue Schnittstelle hinzufügen, müssen Sie die Schnittstelle auf mehreren Hierarchieebenen konfigurieren, einschließlich [edit interfaces]
und [edit protocols]
. In diesem Beispiel werden ein Commit-Skript und ein Makro verwendet, um die Schnittstelle automatisch auf Hierarchieebene [edit protocols]
einzuschließen und die richtige IGP auf der Schnittstelle zu konfigurieren, entweder OSPF oder IS-IS, abhängig vom Inhalt einer apply-macro
Anweisung, die Sie in die Schnittstellenkonfiguration aufnehmen. Mit diesem Makro können Sie mehr Konfigurationsaufgaben auf einer einzigen Hierarchieebene ausführen.
In diesem Beispiel überprüft der Junos OS Management-Prozess (mgd) die Konfiguration und sucht nach apply-macro
Anweisungen. Für jede apply-macro ifclass
Anweisung, die auf der [edit interfaces interface-name unit logical-unit-number]
Hierarchieebene enthalten ist, testet das Skript, ob der role
Parameter als cpe
definiert ist. Wenn dies der Fall ist, prüft das Skript den igp
Parameter.
Wenn der igp
Parameter als isis
definiert ist, enthält das Skript den entsprechenden Schnittstellennamen auf Hierarchieebene [edit protocols isis interface]
.
Wenn der igp
Parameter als ospf
definiert ist, enthält das Skript den entsprechenden Schnittstellennamen auf Hierarchieebene [edit protocols ospf area address interface]
. Bei OSPF verweist das Skript auf den area
Parameter, um die richtige Subnetzadresse des Gebiets zu ermitteln.
Das Beispielskript wird sowohl in XSLT- als auch in SLAX-Syntax angezeigt:
XSLT-Syntax
<?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="interfaces/interface/unit/apply-macro[name = 'ifclass']"> <xsl:variable name="role" select="data[name='role']/value"/> <xsl:variable name="igp" select="data[name='igp']/value"/> <xsl:variable name="ifname"> <xsl:value-of select="../../name"/> <xsl:text>.</xsl:text> <xsl:value-of select="../name"/> </xsl:variable> <xsl:choose> <xsl:when test="$role = 'cpe'"> <change> <xsl:choose> <xsl:when test="$igp = 'isis'"> <protocols> <isis> <interface> <name><xsl:value-of select="$ifname"/></name> </interface> </isis> </protocols> </xsl:when> <xsl:when test="$igp = 'ospf'"> <protocols> <ospf> <area> <name> <xsl:value-of select="data[name='area']/value"/> </name> <interface> <name><xsl:value-of select="$ifname"/></name> </interface> </area> </ospf> </protocols> </xsl:when> </xsl:choose> </change> </xsl:when> </xsl:choose> </xsl:for-each> </xsl:template> </xsl:stylesheet>
SLAX-Syntax
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 (interfaces/interface/unit/apply-macro[name = 'ifclass']) { var $role = data[name='role']/value; var $igp = data[name='igp']/value; var $ifname = { expr ../../name; expr "."; expr ../name; } if ($role = 'cpe') { <change> { if ($igp = 'isis') { <protocols> { <isis> { <interface> { <name> $ifname; } } } } else if ($igp = 'ospf') { <protocols> { <ospf> { <area> { <name> data[name='area']/value; <interface> { <name> $ifname; } } } } } } } } }
Konfiguration
Verfahren
Schritt-für-Schritt-Anleitung
So laden Sie das Skript herunter, aktivieren und testen es:
Kopieren Sie das Skript in eine Textdatei, nennen Sie die Datei if-class.xsl oder if-class.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 den Dateinamen auf der Hierarchieebene
[edit system scripts commit file]
in if-class.slax.system { scripts { commit { file if-class.xsl; } } } interfaces { so-1/2/3 { unit 0 { apply-macro ifclass { area 10.4.0.0; igp ospf; role cpe; } } } t3-0/0/0 { unit 0 { apply-macro ifclass { igp isis; role cpe; } } } }
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
Verifizierung
Überprüfen der Konfiguration
Zweck
Stellen Sie sicher, dass sich das Skript wie erwartet verhält.
Aktion
Zeigen Sie die Konfiguration an, um zu überprüfen, ob die manuellen Änderungen und die vom Skript generierten Änderungen vorhanden sind.
Wenn Sie den show interfaces
Befehl configuration mode ausführen, sollten die Änderungen, die in den Beispielkonfigurationszeilen hinzugefügt wurden, in der Konfiguration vorhanden sein.
[edit] user@host# show interfaces t3-0/0/0 { unit 0 { apply-macro ifclass { igp isis; role cpe; } } } so-1/2/3 { unit 0 { apply-macro ifclass { area 10.4.0.0; igp ospf; role cpe; } } }
Wenn Sie den show protocols
Konfigurationsmodusbefehl absetzen, sollten die vom Skript generierten Änderungen in der Konfiguration vorhanden sein.
[edit] user@host# show protocols isis { interface t3-0/0/0.0; } ospf { area 10.4.0.0 { interface so-1/2/3.0; } }