Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

提交脚本的工作原理

提交脚本包含在执行标准 Junos OS 有效性检查之前执行自定义配置规则并在提交流程中调用的说明。通过在层次结构级别列出一个或多个提交脚本文件的名称,即可启用 [edit system scripts commit] 提交脚本。这些文件必须添加到设备上的相应提交脚本目录中。

执行提交操作时,Junos OS 依次执行每个脚本,将继承后 候选配置 中的信息传递至脚本。脚本可检查配置、执行必要的测试和验证,并生成一组执行某些操作的说明。在执行所有提交脚本之后,Junos OS 将处理所有脚本的说明。如果提交进程未因提交脚本停止,则 Junos OS 将应用所有提交脚本更改,并执行其对结账配置的最终检查。

注意:

提交由一个或多个提交脚本检查的配置时,可能需要增加分配给提交脚本的内存量,以适应大型配置的处理。默认情况下,分配给执行脚本的数据段部分的最大内存量是系统可用总内存的一半,最高值为 128 MB。要增加分配给每个执行的提交脚本的最大内存,请在[edit system scripts commit]层级使用适当的内存限制字节配置max-datasize size语句,然后再提交配置。

提交脚本操作可能包括生成错误、警告和系统日志消息。如果生成错误,则提交操作失败,候选配置保持不变。这是标准提交错误时发生的相同行为。提交脚本还可以生成对系统配置的更改。由于更改是在执行标准验证检查之前加载的,因此它们经过验证以获得正确的语法,就像应用脚本之前配置中已有的语句一样。如果语法正确,配置将激活并成为活动、操作设备配置。

提交脚本不能对受保护语句或受保护的层次结构进行配置更改。如果提交脚本尝试修改或删除受保护语句或层次结构,Junos OS 会发出无法进行更改的警告。未能修改受保护的配置元素不会停止提交脚本或提交流程。

以下部分讨论与提交脚本输入和输出相关的几个重要概念:

提交脚本输入

提交脚本的输入是 Junos XML API 格式的继承后候选配置。“ 继承后 ”一词表示,所有配置组值均已由其在候选配置中的目标继承,并且配置的无效部分已移除。有关配置组的详细信息,请参阅 CLI 用户指南

发出 commit 命令时,Junos OS 会自动生成 XML 格式的候选配置,并将其读取到管理 (mgd) 进程中,此时由任何提交脚本评估输入。

要在 CLI 中显示继承后候选配置的 XML 格式,请发出 show | display commit-scripts view 命令。

要显示所有配置组数据,包括对组的脚本生成的更改,请发出 命令 show groups | display commit-scripts

提交脚本输出

在提交过程中,将依次执行启用的提交脚本,并将提交脚本输出或指令集提供给 Junos OS。在执行所有提交脚本之后,Junos OS 将处理所有脚本的说明。

提交脚本操作可能包括生成警告、错误和系统日志消息,以及对配置进行持续和瞬时更改。 表 1 简要概述了提交脚本可用于指示 Junos OS 在提交过程中执行各种操作的各种元素、模板和功能。在某些情况下,执行相同操作的方法有多种。由于 SLAX 和 XSLT 脚本返回结果树,因此 SLAX 中包含的输出 <syslog><message> 元素和 XSLT 脚本将直接添加到结果树中。

表 1:提交脚本 操作和输出

提交脚本输出

SLAX / XSLT

Python

向提交用户生成警告消息。

<xnm:warning>

jcs.emit_warning()

生成错误消息并导致提交操作失败。

<xnm:error>

jcs.emit_error()

生成系统日志消息。

jcs:syslog()

<syslog><message>

jcs.syslog()

生成对配置的持久更改。

<change>

emit_change(content“更改” format

生成配置的瞬时更改。

<transient-change>

emit_change(content“瞬时更改” format

相对于 XPath 表达式定义的当前上下文节点,生成持久更改。

Xslt

<xsl:call-template name="jcs:emit-change">
    <xsl:with-param name="content">

SLAX

call jcs:emit-change() {
    with $content = {   }
}

生成相对于 XPath 表达式定义的当前上下文节点的瞬态更改。

Xslt

<xsl:call-template name="jcs:emit-change">
    <xsl:with-param name="tag" select="'transient-change'"/>
    <xsl:with-param name="content">

SLAX

call jcs:emit-change() {
    with $tag = "transient-change";
    with $content = {   }
}

将警告消息与配置更改一起生成。您可以使用这组标记生成已更改配置的通知。

Xslt

<xsl:call-template name="jcs:emit-change">
    <xsl:with-param name="message">
          <xsl:text>

SLAX

call jcs:emit-change() {
    with $message = {
        expr "message";
    }
}

jcs.emit_warning()

Junos OS 可处理此输出并执行相应的操作。错误和警告会传回 Junos OS CLI 或 Junos XML 协议客户端应用程序。出现错误会自动导致提交操作失败。将持续性瞬时更改加载到相应的配置数据库中。

要测试来自提交脚本的错误输出、警告和系统日志消息,请发出 commit check | display xml 命令。

要显示提交脚本处理的详细痕迹,请发出 commit check | display detail 命令。

注意:

系统日志消息不会显示在追踪输出中,因此不能使用提交检查操作来测试脚本生成的系统日志消息。此外,系统日志消息在提交操作期间写入系统日志,但在提交检查操作期间不会写入。

提交脚本和 Junos OS 提交模型

Junos OS 使用提交模型来更新设备的配置。此模型允许您对候选配置进行一系列更改,而不会影响设备的操作。更改完成后,您可以提交配置。提交操作可将候选配置更改保存到当前配置中。

在候选配置中提交一组更改时,使用两种方法将这些更改转发至当前配置:

  • 标准提交模型 — 在设备上无提交脚本活动时使用。

  • 提交脚本模型 — 将提交脚本整合到提交模型中。

标准提交模型

在标准提交模型中,管理 (mgd) 进程根据标准 Junos OS 验证规则验证候选配置。如果配置文件有效,则变为当前活动配置。 图 1 和随附的讨论解释了标准提交模型的工作原理。

图 1:标准提交模型 Standard Commit Model

在标准提交模型中,软件执行以下步骤:

  1. 提交候选配置时,将其复制为结账配置。

  2. mgd 进程验证结账配置。

  3. 如果未发生错误,检出配置将复制为当前活动配置。

提交脚本的提交模型

将提交脚本添加到标准提交模型中时,流程将变得更加复杂。mgd 进程首先将 XML 格式的结账配置传递给脚本驱动程序,由提交脚本处理对结账配置的验证。验证完成后,脚本驱动程序会将 操作文件 返回到 mgd 进程。mgd 进程遵循操作文件中的说明,更新报考者和结账配置,向 CLI 或客户端应用程序发出消息,并根据需要将信息写入系统日志。处理操作文件后,mgd 进程将执行标准 Junos OS 验证。 图 2 和随附的讨论解释了这一过程。

图 2:添加 Commit Model with Commit Scripts Added了提交脚本的提交模型

在提交脚本模型中,Junos OS 执行以下步骤:

  1. 提交候选配置时,mgd 进程会将 XML 格式的候选配置发送至脚本驱动程序。

  2. 每个启用的提交脚本都会根据候选配置调用,并且每个脚本都可以生成一组操作以用于执行 mgd 进程。操作在操作文件中收集。

  3. mgd 进程对操作文件中的提交脚本错误、警告和系统日志消息执行以下操作:

    • 错误 — mgd 进程停止提交进程(即提交操作失败),将错误消息返回至 CLI 或 Junos XML 协议客户端,并且不采取进一步操作。

    • 警告 — mgd 进程会将消息转发至 CLI 或 Junos XML 协议客户端。

    • 系统日志消息 — mgd 进程会将消息转发至系统日志进程。

  4. 如果操作文件包含任何持久更改,则 mgd 进程会将请求的更改加载到候选配置中。

  5. 候选配置被复制为结账配置。

  6. 如果操作文件包含任何瞬态更改,则 mgd 进程会将请求的更改加载到结账配置中。

  7. mgd 进程验证结账配置。

  8. 如果没有验证错误,检出配置将复制为当前活动配置。

注意:

提交脚本不能对受保护语句或受保护的层次结构进行配置更改。如果提交脚本尝试修改或删除受保护语句或层次结构,Junos OS 会发出无法进行更改的警告。未能修改受保护的配置元素不会停止提交脚本或提交流程。

提交操作期间对候选配置进行的更改不会在提交操作期间由自定义规则评估。但是,在候选配置中维护持久更改,并在后续提交操作期间由自定义规则评估。有关提交脚本如何更改候选配置的详细信息,请参阅 使用多个提交脚本时避免潜在冲突

提交脚本中从未按自定义规则评估瞬时更改,因为只有在提交脚本评估了候选配置且报考者被复制为结账配置之后,才会对检出配置进行评估。要从配置中移除瞬态更改,请删除、 禁用停用 提交脚本(如 在提交操作期间控制执行提交脚本中讨论),或注释生成瞬时更改的代码。

有关持久和瞬态更改之间差异的详细信息,请参阅 使用提交脚本生成持久性或瞬时配置更改的概述