示例:控制 IS-IS 和 MPLS 接口
此示例说明如何使用提交脚本来减少手动配置的数量。
要求
此示例使用运行 Junos OS 的设备。
概述和提交脚本
如果要在接口上启用 MPLS,则必须在和[edit protocols mpls]
层次结构级别进行更改[edit interfaces]
。此示例说明如何使用提交脚本来减少手动配置的数量。
此示例执行两个相关的任务。如果接口已 [family iso]
配置但未 [family mpls]
配置,则会进行配置更改(使用 jcs:emit-change
模板)以启用 MPLS。MPLS 在环路接口 (loX
) 上无效,因此此脚本会忽略环路接口。其次,如果未在层次结构级别配置 [edit protocols mpls]
接口,则会进行更改以添加接口。这两项更改都附带相应的警告消息。
示例脚本以 XSLT 和 SLAX 语法显示:
XSLT 语法
<?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 语法
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; } } } } } }
配置
程序
分步过程
要下载、启用和测试脚本,请执行以下操作:
将脚本复制到文本文件中,根据需要将文件命名 为 iso.xsl 或 iso.slax ,然后将其复制到设备上的 /var/db/scripts/commit/ 目录。
选择以下测试配置节,然后按 Ctrl+c 将其复制到剪贴板。
如果您使用的是脚本的 SLAX 版本,请将层次结构级别的文件名
[edit system scripts commit file]
更改为 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; } }
在配置模式下,发出
load merge terminal
命令以将节合并到设备配置中。[edit] user@host# load merge terminal [Type ^D at a new line to end input] ... Paste the contents of the clipboard here ...
出现提示时,使用鼠标和粘贴图标粘贴剪贴板的内容。
按回车键。
按 Ctrl+d。
提交配置。
user@host# commit
验证
验证配置
目的
验证脚本的行为是否符合预期。
行动
查看命令的 commit
输出。
[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
show interfaces
发出命令。确认环路接口未更改,并且 SONET/SDH 接口已更改。
[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; } }