- play_arrow 概述
- play_arrow Junos 自动化脚本概述
- play_arrow Junos XML 管理协议和 Junos XML API 概述
-
- play_arrow 使用 XSLT 编写自动化脚本
- play_arrow XSLT 概述
- play_arrow 自动化脚本中使用的标准 XPath 和 XSLT 函数
- play_arrow 自动化脚本中使用的标准 XSLT 元素和属性
-
- play_arrow 使用 SLAX 编写自动化脚本
- play_arrow SLAX 概述
- play_arrow SLAX 语句
- append
- apply-imports
- apply-templates
- attribute
- attribute-set
- call
- copy-node
- copy-of
- decimal-format
- element
- else
- else if
- expr
- fallback
- for
- for-each
- function
- if
- import
- key
- match
- message
- mode
- mvar
- number
- output-method
- param
- preserve-space
- priority
- processing-instruction
- result
- set
- sort
- strip-space
- template
- terminate
- trace
- uexpr
- use-attribute-sets
- var
- version
- while
- with
- play_arrow 用于自动化脚本的 libslax 发行版
-
- play_arrow 使用 Python 编写自动化脚本
- play_arrow 自动化脚本输入
- play_arrow 自动化脚本中的全局参数
-
- play_arrow 用于自动化脚本的扩展函数和命名模板
- play_arrow 用于编写自动化脚本的扩展函数
- play_arrow jcs 和 slax 命名空间中的扩展函数
- base64-decode() Function (SLAX)
- base64-encode() Function (SLAX)
- break-lines() Function (SLAX and XSLT)
- close() Function (SLAX and XSLT)
- dampen() Function (Python, SLAX, and XSLT)
- document() Function (SLAX)
- emit_error() Function (Python)
- emit_snmp_attributes Function (Python)
- emit_warning() Function (Python)
- empty() Function (SLAX and XSLT)
- evaluate() Function (SLAX)
- execute() Function (SLAX and XSLT)
- first-of() Function (SLAX and XSLT)
- get-command() Function (SLAX)
- get-hello() Function (SLAX and XSLT)
- get-input() Function (SLAX and XSLT) and get_input() (Python)
- get-protocol() Function (SLAX and XSLT)
- get-secret() Function (SLAX and XSLT) and get_secret() (Python)
- get_snmp_action() Function (Python)
- get_snmp_oid() Function (Python)
- hostname() Function (Python, SLAX, and XSLT)
- invoke() Function (SLAX and XSLT)
- open() Function (SLAX and XSLT)
- output() Function (Python, SLAX, and XSLT)
- parse-ip() Function (SLAX and XSLT) and parse_ip() (Python)
- printf() Function (Python, SLAX, and XSLT)
- progress() Function (Python, SLAX, and XSLT)
- regex() Function (SLAX and XSLT)
- set_routing_instance() Function (Python)
- sleep() Function (SLAX and XSLT)
- split() Function (SLAX and XSLT)
- sysctl() Function (Python, SLAX, and XSLT)
- syslog() Function (Python, SLAX, and XSLT)
- trace() Function (Python, SLAX, and XSLT)
- play_arrow 用于自动化脚本的命名模板
- play_arrow jcs 命名空间中的命名模板
-
- play_arrow 管理自动化脚本
- play_arrow 存储和启用脚本
- play_arrow 为脚本配置远程源
- play_arrow 配置脚本的会话协议
- play_arrow 控制脚本的执行
- play_arrow 在路由引擎之间同步脚本
- play_arrow 在 SLAX 和 XSLT 之间转换脚本
-
- play_arrow 操作脚本
- play_arrow 操作脚本概述
- play_arrow 创建和执行 op 脚本
- play_arrow 操作脚本示例
- play_arrow 使用服务模板自动化配置服务
- play_arrow 操作脚本故障排除
-
- play_arrow 事件策略和事件脚本
- play_arrow 活动政策概述
- play_arrow 事件策略触发器
- play_arrow 事件策略操作
- play_arrow 配置事件策略文件存档
- play_arrow 配置事件策略权限
- play_arrow 事件脚本概述
- play_arrow 创建和执行事件脚本
- play_arrow 事件策略和事件脚本故障排除
-
- play_arrow SNMP 脚本
- play_arrow SNMP 脚本概述
- play_arrow 创建和执行 SNMP 脚本
- play_arrow SNMP 脚本示例
- play_arrow SNMP 脚本故障排除
-
- play_arrow 配置语句和操作命令
示例:控制 IS-IS 和 MPLS 接口
此示例说明如何使用提交脚本来减少手动配置的数量。
概述和提交脚本
如果要在接口上启用 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。content_copy zoom_out_mapsystem { 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
命令以将节合并到设备配置中。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 ...
出现提示时,使用鼠标和粘贴图标粘贴剪贴板的内容。
按回车键。
按 Ctrl+d。
提交配置。
content_copy zoom_out_mapuser@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; } }