示例:使用 SLAX 和 XSLT 操作脚本更改配置
此示例介绍如何使用 SLAX 操作脚本对 Junos OS 配置进行结构化更改。
设备配置
逐步过程
要下载、启用和测试脚本:
将脚本复制到文本文件中,命名文件 config-change.slax,然后将其复制到设备上的 /var/db/scripts/op/ 目录。
在配置模式下,在层次结构级别配置脚本的文件名
[edit system scripts op file]
。[edit system scripts op] user@host# set file config-change.slax
commit and-quit
发出 命令提交配置并返回到操作模式。[edit] user@host# commit and-quit
在运行脚本之前,发出
show interfaces interface-name
操作模式命令并记录将由脚本禁用的接口的当前状态。执行操作脚本。
user@host> op config-change This script disables the interface specified by the user. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. Enter interface to disable: so-0/0/0
要求
此示例使用运行 Junos OS 的设备。
概述和操作脚本
SLAX 和 XSLT 操作脚本可使用 jcs:load-configuration
位于 junos.xsl 导入文件中的模板对 Junos OS 配置进行结构化更改。此示例会创建一个 SLAX op 脚本,该脚本使用 jcs:load-configuration
模板禁用运行 Junos OS 的设备上的接口。模板所需的所有值都定义为 jcs:load-configuration
变量,然后传入模板中。
在此示例中 usage
,变量将初始化,并提供脚本功能的一般说明。运行脚本时,它会调用 jcs:output()
该功能将使用说明输出到 CLI。这样您就可以验证是否使用脚本来达到正确的目的。
脚本调用功能 jcs:get-input()
,提示接口名称禁用,并将接口名称存储在变量中 interface
。该 config-changes
变量存储 Junos XML 配置数据以在设备上加载并引用 interface
变量。 jcs:load-configuration
模板调用会将参数值 configuration
设置为该变量中 config-changes
存储的数据。
变 load-action
量设置为 merge
,将新配置数据与候选配置合并。这相当于 CLI 配置模式命令 load merge
。
该 options
变量定义了提交操作的选项。它使用 :=
操作员创建节点集,该节点集作为参数的 commit-options
值传递至模板。此示例包括将 log
提交说明添加到提交日志以供将来参考的标记。
对功能的 jcs:open()
调用将打开与本地设备上的 Junos OS 管理进程 (mgd) 的连接,并返回存储在变量中的 conn
连接手柄。然后,脚本称为 jcs:load-configuration
模板。
操作 :=
员将模板调用的结果 jcs:load-configuration
复制到临时变量,并在该变量上运行 node-set
该功能。随后,生成的节点集存储在变量中 results
。操作员 :=
确保 results
变量为节点集,而不是结果树片段,以便脚本可以访问内容。
该 jcs:close()
功能可关闭与设备的连接。默认情况下, jcs:load-configuration
该模板不会向 CLI 输出消息。此示例将搜索并打印 xmn:warning
和 xnm:error
消息以作为响应,以便快速识别提交中的任何问题。
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"; ns ext = "http://xmlsoft.org/XSLT/namespace"; import "../import/junos.xsl"; match / { <op-script-results> { var $usage = "This script disables the specified interface." _ "The script modifies the candidate configuration to disable " _ "the interface and commits the configuration to activate it."; var $temp = jcs:output($usage); var $interface = jcs:get-input("Enter interface to disable: "); var $config-changes = { <configuration> { <interfaces> { <interface> { <name> $interface; <disable>; } } } } var $load-action = "merge"; var $options := { <commit-options> { <log> "disabling interface " _ $interface; } } var $conn = jcs:open(); var $results := { call jcs:load-configuration( $action=$load-action, $commit-options=$options, $configuration=$config-changes, $connection=$conn); } var $close-results = jcs:close($conn); if ($results//xnm:error) { for-each ($results//xnm:error) { <output> message; } } if ($results//xnm:warning) { for-each ($results//xnm:warning) { <output> message; } } } }
验证
验证提交
目的
验证提交是否成功。
行动
脚本中应包含代码,用于解析模板返回的 jcs:load-configuration
节点集,以防出现任何错误或警告。这样您就可以更轻松地确定提交是否成功。如果没有警告或错误消息,您可以通过多种方式验证提交是否成功。
检查提交日志以验证提交是否成功。如果在参数中
commit-options
包含log
选项,则在提交日志中应显示消息以及提交信息。user@host> show system commit 0 2010-09-22 17:08:17 PDT by user via junoscript disabling interface so-0/0/0
检查 syslog 消息文件以验证提交操作是否已记录。在这种情况下,您还会看到禁
SNMP_TRAP_LINK_DOWN
用接口 so-0/0/0 的消息。此消息可能会显示或可能不会显示在日志文件中,具体取决于跟踪选择的配置设置。user@host> show log messages | last Sep 22 17:08:13 host file[7319]: UI_COMMIT: User 'user' requested 'commit' operation (comment: disabling interface so-0/0/0) Sep 22 17:08:16 host mib2d[1434]: SNMP_TRAP_LINK_DOWN: ifIndex 526, ifAdminStatus down(2), ifOperStatus down(2), ifName so-0/0/0
验证配置更改
目的
验证是否已将正确的更改集成到配置中。
行动
显示配置并验证指定接口是否可见更改。
user@host> show configuration interfaces so-0/0/0 disable;
例如,您还可以发出
show interfaces interface-name
操作模式命令来检查接口是否已禁用。在这种情况下,在禁用接口 之前 捕获的输出显示接口为Enabled
。user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Enabled, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:27 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None
运行脚本禁用接口 后 捕获的输出显示接口现已
Administratively down
。user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Administratively down, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Down Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:40 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None