在提交脚本中生成自定义警告、错误或系统日志消息
Junos OS 提交脚本可以在提交操作期间生成自定义警告、错误或系统日志消息,以便在配置不符合自定义配置规则时向您发出提醒。生成错误也会导致提交操作失败。要在提交脚本中生成自定义警告、错误或系统日志消息:
包括 提交脚本所需的样板中的相应提交脚本样板。为方便起见,现将其转载如下:
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"> <!-- ... insert your code here ... --> </xsl:template> </xsl:stylesheet>
version 1.2; 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 { /* * insert your code here */ }
from junos import Junos_Configuration import jcs if __name__ == '__main__': # insert your code here
在注释“insert your code here,”指示的位置,包括一个或多个 XSLT 编程指令或其 SLAX 或 Python 等效指令。常用的 XSLT 构造包括:
<xsl:choose> <xsl:when> <xsl:otherwise>
- 导致在不同情况下处理不同指令的条件结构。该<xsl:choose>
指令包含一个或多个<xsl:when>
元素,每个元素都测试一个 XPath 表达式。如果测试的计算结果为 true,则 XSLT 处理器将执行元素中的<xsl:when>
指令。XSLT 处理器仅处理第一个元素中<xsl:when>
包含的指令,该test
元素的属性计算结果为 true。如果元素test
的属性均<xsl:when>
未计算为 true,则处理元素的内容<xsl:otherwise>
(如果有)。<xsl:for-each select="xpath-expression">
- 指示 XSLT 处理器将一组节点收集在一起并逐个处理它们的编程指令。节点由属性中的可扩展标记语言 (XML) 路径语言 (XPath) 表达式select
选择。然后根据指令中<xsl:for-each>
包含的指令处理每个节点。对指令中的<xsl:for-each>
代码进行递归计算,以与 XPath 表达式匹配的每个节点进行计算。在每次传递期间,上下文都会移动到节点。<xsl:if test="xpath-expression">
- 如果属性中的test
XPath 表达式的计算结果为true
,则将导致处理指令的条件构造。例如,当语句未包含在
[edit system]
层次结构级别时host-name
,以下编程指令的计算结果为 true:<xsl:if test="not(system/host-name)">
在 SLAX 中,
if
构造如下所示:if (not(system/host-name))
类似地,在 Python 中:
if not(Junos_Configuration.xpath("./system/host-name")):
包括适当的构造以生成警告、错误或系统日志消息。
在 SLAX 和 XSLT 脚本中,包括
<xnm:warning>
、<xnm:error>
或<syslog>
带有<message>
指定消息内容的子元素的元素。对于警告和错误消息,可以包含其他几个子元素,如jcs:edit-path
和jcs:statement
模板,这些子元素会导致警告或错误消息包含相关的配置层次结构和语句信息,如以下示例所示。在 Python 脚本中,包括
jcs.emit_warning()
、jcs.emit_error()
或jcs.syslog()
函数,并将消息字符串包含在参数列表中。例如,当 XSLT 提交脚本使用以下
<xnm:warning>
元素生成警告时:<xnm:warning> <xsl:call-template name="jcs:edit-path"> <xsl:with-param name="dot" select="chassis"/> </xsl:call-template> <message>IP source-route processing is not enabled.</message> </xnm:warning>
它在操作过程中
commit
发出以下输出:[edit chassis] warning: IP source-route processing is not enabled. commit complete
同样,当 XSLT 提交脚本使用以下
<xnm:error>
元素生成错误时:<xnm:error> <xsl:call-template name="jcs:edit-path"/> <xsl:call-template name="jcs:statement"/> <message>Missing a description for this T1 interface.</message> </xnm:error>
它在操作过程中
commit
发出以下输出:[edit interfaces interface t1-0/0/0] 'interface t1-0/0/0;' Missing a description for this T1 interface. error: 1 error reported by commit scripts error: commit script failure
注意:在 SLAX 和 XSLT 脚本中,如果要在脚本生成的配置更改中包含警告消息,则可以通过在模板中
jcs:emit-change
包含message
参数来生成警告。message 参数使jcs:emit-change
模板调用<xnm:warning>
模板,该模板向 CLI 发送警告通知。(有关更多信息,请参阅使用提交脚本生成持久性或瞬态配置更改的概述。对于系统日志消息,唯一支持的子元素是
<message>
:<syslog> <message>syslog-string</message> </syslog>
有关可以包含的所有 XSLT 标记和属性的说明,请参阅 生成消息时要使用的 SLAX 和 XSLT 提交脚本标记元素。
有关这些构造的 SLAX 版本,请参阅 示例:生成自定义警告消息、 示例:生成自定义错误消息和 示例:生成自定义系统日志消息。
使用有意义的名称保存脚本。
将脚本复制到硬盘上的 /var/db/scripts/commit 目录或闪存驱动器上的 /config/scripts/commit 目录。
有关设置提交脚本的存储位置的信息,请参阅 存储和启用 Junos 自动化脚本 和 在闪存中存储脚本。
通过在
[edit system scripts commit]
层次结构级别包含file filename
语句来启用脚本。[edit system scripts commit] user@host# set file filename
如果脚本是用 Python 编写的,请启用未签名的 Python 脚本的执行。
[edit] user@host# set system scripts language (python | python3)
提交配置。
[edit] user@host# commit and-quit
注意:如果设备具有双路由引擎,并且您希望脚本在这两个引擎上都生效,则可以发出
commit synchronize scripts
命令以同步配置,并将脚本复制到另一个路由引擎,作为提交操作的一部分。