Example: Control IS-IS and MPLS Interfaces
This example shows how to use commit scripts to decrease the amount of manual configuration.
Requirements
This example uses a device running Junos OS.
Overview and Commit Script
If you want to enable MPLS on an interface, you must make changes
at both the [edit interfaces]
and [edit protocols
mpls]
hierarchy levels. This example shows how to use commit
scripts to decrease the amount of manual configuration.
This example performs two related tasks. If an interface has [family iso]
configured but not [family mpls]
, a
configuration change is made (using the jcs:emit-change
template) to enable MPLS. MPLS is not valid on loopback interfaces
(loX
), so this script
ignores loopback interfaces. Secondly, if the interface is not configured
at the [edit protocols mpls]
hierarchy level, a change
is made to add the interface. Both changes are accompanied by appropriate
warning messages.
The example script is shown in both XSLT and SLAX syntax:
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:variable name="mpls" select="protocols/mpls"/> <xsl:for-each select="interfaces/interface[not(starts-with(name,'lo'))] /unit[family/iso]"> <xsl:variable name="ifname" select="concat(../name, '.', name)"/> <xsl:if test="not(family/mpls)"> <xsl:call-template name="jcs:emit-change"> <xsl:with-param name="message"> <xsl:text>Adding 'family mpls' to ISO-enabled interface</xsl:text> </xsl:with-param> <xsl:with-param name="content"> <family> <mpls/> </family> </xsl:with-param> </xsl:call-template> </xsl:if> <xsl:if test="$mpls and not($mpls/interface[name = $ifname])"> <xsl:call-template name="jcs:emit-change"> <xsl:with-param name="message"> <xsl:text>Adding ISO-enabled interface </xsl:text> <xsl:value-of select="$ifname"/> <xsl:text> to [protocols mpls]</xsl:text> </xsl:with-param> <xsl:with-param name="dot" select="$mpls"/> <xsl:with-param name="content"> <interface> <name> <xsl:value-of select="$ifname"/> </name> </interface> </xsl:with-param> </xsl:call-template> </xsl:if> </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 { var $mpls = protocols/mpls; for-each (interfaces/interface[not(starts-with(name, "lo"))]/unit[family/iso]) { var $ifname = ../name _ '.' _ name; if (not(family/mpls)) { call jcs:emit-change() { with $message = { expr "Adding 'family mpls' to ISO-enabled interface"; } with $content = { <family> { <mpls>; } } } } if ($mpls and not($mpls/interface[name = $ifname])) { call jcs:emit-change($dot = $mpls) { with $message = { expr "Adding ISO-enabled interface "; expr $ifname; expr " to [protocols mpls]"; } with $content = { <interface> { <name> $ifname; } } } } } }
Configuration
Procedure
Step-by-Step Procedure
To download, enable, and test the script:
Copy the script into a text file, name the file iso.xsl or iso.slax as appropriate, and copy it to the /var/db/scripts/commit/ directory on the device.
Select the following test configuration stanzas, and press Ctrl+c to copy them to the clipboard.
If you are using the SLAX version of the script, change the filename at the
[edit system scripts commit file]
hierarchy level to iso.slax.system { scripts { commit { file iso.xsl; } } } interfaces { lo0 { unit 0 { family iso; } } so-1/2/3 { unit 0 { family iso; } } so-1/3/2 { unit 0 { family iso; } } } protocols { mpls { enable; } }
In configuration mode, issue the
load merge terminal
command to merge the stanzas into your device configuration.[edit] user@host# load merge terminal [Type ^D at a new line to end input] ... Paste the contents of the clipboard here ...
At the prompt, paste the contents of the clipboard by using the mouse and the paste icon.
Press Enter.
Press Ctrl+d.
Commit the configuration.
user@host# commit
Verification
Verifying the Configuration
Purpose
Verify that the script behaves as expected.
Action
Review the output of the commit
command.
[edit] user@host# commit [edit interfaces interface so-1/2/3 unit 0] warning: Adding 'family mpls' to ISO-enabled interface [edit interfaces interface so-1/2/3 unit 0] warning: Adding ISO-enabled interface so-1/2/3.0 to [protocols mpls] [edit interfaces interface so-1/3/2 unit 0] warning: Adding 'family mpls' to ISO-enabled interface [edit interfaces interface so-1/3/2 unit 0] warning: Adding ISO-enabled interface so-1/3/2.0 to [protocols mpls] commit complete
Issue the show interfaces
command. Confirm
that the loopback interface is not altered and that the SONET/SDH
interfaces are altered.
[edit] user@host# show interfaces so-1/2/3 { unit 0 { family iso; family mpls; } } so-1/3/2 { unit 0 { family iso; family mpls; } } lo0 { unit 0 { family iso; } }