帮助我们改善您的体验。

让我们了解您的想法。

您是否能抽出两分钟的时间完成一份问卷调查?

close
keyboard_arrow_left
自动化脚本用户指南
Table of Contents Expand all
list Table of Contents
keyboard_arrow_right

机器翻译对您有帮助吗?

starstarstarstarstar
Go to English page
免责声明:

我们将使用第三方机器翻译软件翻译本页面。瞻博网络虽已做出相当大的努力提供高质量译文,但无法保证其准确性。如果对译文信息的准确性有任何疑问,请参阅英文版本. 可下载的 PDF 仅提供英文版.

示例:控制 IS-IS 和 MPLS 接口

date_range 31-Jan-22

此示例说明如何使用提交脚本来减少手动配置的数量。

要求

此示例使用运行 Junos OS 的设备。

概述和提交脚本

如果要在接口上启用 MPLS,则必须在和[edit protocols mpls]层次结构级别进行更改[edit interfaces]。此示例说明如何使用提交脚本来减少手动配置的数量。

此示例执行两个相关的任务。如果接口已 [family iso] 配置但未 [family mpls]配置,则会进行配置更改(使用 jcs:emit-change 模板)以启用 MPLS。MPLS 在环路接口 (loX) 上无效,因此此脚本会忽略环路接口。其次,如果未在层次结构级别配置 [edit protocols mpls] 接口,则会进行更改以添加接口。这两项更改都附带相应的警告消息。

示例脚本以 XSLT 和 SLAX 语法显示:

XSLT 语法

content_copy zoom_out_map
<?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 语法

content_copy zoom_out_map
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;
                    }
                }
            }
        }
    }
}

配置

程序

分步过程

要下载、启用和测试脚本,请执行以下操作:

  1. 将脚本复制到文本文件中,根据需要将文件命名 为 iso.xsliso.slax ,然后将其复制到设备上的 /var/db/scripts/commit/ 目录。

  2. 选择以下测试配置节,然后按 Ctrl+c 将其复制到剪贴板。

    如果您使用的是脚本的 SLAX 版本,请将层次结构级别的文件名 [edit system scripts commit file] 更改为 iso.slax

    content_copy zoom_out_map
    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;
        }
    }
    
  3. 在配置模式下,发出 load merge terminal 命令以将节合并到设备配置中。

    content_copy zoom_out_map
    [edit]
    user@host# load merge terminal
    [Type ^D at a new line to end input]
    ... Paste the contents of the clipboard here ...
    
    1. 出现提示时,使用鼠标和粘贴图标粘贴剪贴板的内容。

    2. 按回车键。

    3. 按 Ctrl+d。

  4. 提交配置。

    content_copy zoom_out_map
    user@host# commit
    

验证

验证配置

目的

验证脚本的行为是否符合预期。

行动

查看命令的 commit 输出。

content_copy zoom_out_map
[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 接口已更改。

content_copy zoom_out_map
[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;
    }
}
external-footer-nav