Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 

使用 Salt 配置运行网络Junos OS

瞻博网络支持使用 Salt 管理运行 Junos OS 的设备,而 Junos 执行和状态模块 (for Salt) 则定义了功能,支持您管理 Junos OS 配置。本主题讨论如何使用 Salt 生成、调配和管理Junos OS配置。

使用 Salt 配置配置Junos OS概述

通过Junos执行和状态模块(适用于 Salt),您可以使用 Salt 管理运行该策略Junos OS。这些模块定义了执行以下任务的功能:

  • 锁定并解锁配置数据库

  • 负载配置数据

  • 提交配置

  • 回滚配置

  • 配置设备主机名并提交更改

表 1 列出了可用于管理配置的功能,并简要说明每种功能。您可以使用执行功能在 Salt 主命令行上执行操作。但通常,您将定义受管理设备必须的状态,并使用状态功能应用配置。

表 1: Junos执行和状态功能来管理配置

Junos执行功能

Junos状态功能

描述

salt.modules.junos.commit

salt.states.junos.commit

将加载的更改提交到目标配置数据库中。

salt.modules.junos.commit_check

salt.states.junos.commit_check

commit check 候选配置执行一些操作以验证语法是否正确。

salt.modules.junos.install_config

salt.states.junos.install_config

锁定、修改、提交和解锁目标配置数据库。

salt.modules.junos.load

salt.states.junos.load

将指定文件中的配置数据加载到目标配置数据库中。

salt.modules.junos.lock

salt.states.junos.lock

请求候选配置上的专用锁。

salt.modules.junos.rollback

salt.states.junos.rollback

将配置回滚到之前提交的配置,然后提交。

salt.modules.junos.set_hostname

salt.states.junos.set_hostname

配置运行 Junos OS 的托管设备的主机Junos OS提交更改。

salt.modules.junos.unlock

salt.states.junos.unlock

释放候选配置上的排他锁。

执行配置更改的基本流程是锁定配置数据库、加载配置更改、提交配置以将其处于活动状态,然后解除配置数据库锁定。您可以使用相应的函数单独执行每个操作,或使用 函数执行所有操作(使用单个 junos.install_config 功能调用)。

默认情况下,该功能使用模式对候选配置数据库进行更改,模式将自动 junos.install_config configure exclusive 锁定并解锁配置数据库。该功能会将已加载的配置与当前配置进行比较,并且仅在有更改时应用新配置。如果功能修改配置,则执行 commit checkcommit 操作。

建议使用 函数 junos.install_config 进行配置更改,因为它可处理整个配置工作流程。该功能还允许您将配置差异保存到文件中,并使用不同的配置模式。例如,您可以使用模式修改候选配置的专用副本,如"如何指定配置模式 configure private "中所述

使用 或 功能加载新 junos.load 配置 junos.install_config 数据时,您可以指定负载操作以及更改的来源和格式。

  • 负载操作 — 负载操作决定如何将配置数据加载到候选配置中。这些功能支持该系列中提供的许多相同负载操作,Junos OS CLI,包括合并、覆盖、替换和更新。有关详细信息,请参阅 如何指定负载操作

  • 格式 — 您可使用标准Junos OS支持的格式之一来配置运行网络的设备。您可以提供配置数据或 Jinja2 模板作为文本、Junos XML 元素、Junos OS命令或 set JSON。有关详细信息,请参阅 如何指定要加载的配置数据的格式

  • 配置数据源 - 您可从包含部分或完整配置或 Jinja2 模板的文件加载配置数据。有关详细信息,请参阅 如何使用 Jinja2 模板加载配置数据以及如何 加载配置数据

修改配置后,您必须提交配置,使其成为设备上的活动配置。 junos.install_configjunos.rollbackjunos.set_hostname 功能会自动将更改提交到配置。您也可执行 junos.commit 函数以执行提交操作。有关不同功能的行为及其支持的提交选项的信息,请参阅 如何提交配置

除了加载新配置数据之外,您还可以使用 该功能 junos.rollback 将配置回滚到之前提交的配置。该功能会自动提交更新的配置。有关详细信息,请参阅 如何回滚配置

如何锁定和解锁配置数据库

在修改候选配置之前,您可以先锁定候选配置,以防止其他用户或应用程序更新该配置,直到锁定释放。这相当于命令 configure exclusive 在命令CLI。我们建议您在进行更改之前锁定配置,尤其是在授权多个用户更改配置的设备上,因为提交操作适用于候选配置中所有更改,而不仅是请求提交的用户或应用程序所做的更改。

该功能使用模式对候选配置数据库进行更改,模式将自动锁定配置数据库,加载并提交 junos.install_config configure exclusive 更改,然后解锁数据库。但是,如果您需要单独执行加载和提交操作,例如,使用 和 功能,您可以使用 和 执行或状态函数显式锁定和解锁 junos.load junos.commit junos.lock junos.unlock 数据库。

要修改配置数据库之前显式锁定它,请使用 junos.lock 函数。例如:

要解除数据库锁定并丢弃任何未提交更改,请使用 junos.unlock 该功能。例如:

如果配置数据库已修改,或者另一位用户已拥有排他锁,则函数将返回一条消息, junos.lock LockError 如以下示例中所示:

如何指定配置模式

junos.install_config该功能允许您在不同的配置模式下进行更改。默认情况下,该功能使用模式对候选配置数据库 configure exclusive 进行更改。模式将锁定候选全局配置(也称为共享配置数据库),只要功能需要对配置执行请求 configure exclusive 的配置更改。 锁定数据库可以防止其他用户修改或提交对数据库的更改,直到锁释放。

要指定不同模式,请 mode 设置与所需模式相同的参数。支持的模式包括 batch 、 、 和 dynamic ephemeral exclusive private 。有关不同模式的信息,请参阅 CLI User Guide

例如,以下命令使用模式对配置进行更改,模式将打开候选配置的 configure private 专用副本:

同样,您可以在 Salt 状态文件中包括该参数。

您还可以使用 该功能在支持此数据库的设备上更新 junos.install_config 临时配置数据库。临时数据库是备用配置数据库,提供快速编程接口,在运行新设备的设备上执行配置Junos OS。您必须使用 Salt 版本 3001 和 Junos PyEZ 2.1.3 或更高版本,

注意:

临时配置数据库是一项高级功能,如果使用不正确,对设备的操作有严重负面影响。有关详细信息,请参阅 了解临时配置数据库

要配置临时配置数据库的默认实例,请将 mode 参数设置为 ephemeral 等于 。例如:

要配置临时配置数据库的用户定义实例,请将参数设置为 等于 ,并设置与实例名称 mode ephemeral ephemeral_instance 相等的参数。

如何指定负载操作

您可以使用 和 junos.load junos.install_config 功能来加载配置更改(使用 load mergeload replace 、 或 load override load update 操作)。通过包括或省略该函数相应的参数,可指定所需的负载操作。如果未指定负载操作,则默认为 load replace表 2 汇总了每种负载操作类型所需的参数。

表 2:指定负载操作的参数

负载操作

功能参数

描述

load merge

merge=True

将加载的配置与现有配置合并。

load override

overwrite=True

将整个配置更换为已加载的配置。

load replace (默认)

将已加载的配置与现有配置合并,但将现有配置中的语句替换为在已加载配置中指定 replace: 标记的语句。如果现有配置中无语句,将添加已加载配置中的语句。

load update

update=True

将完整加载的配置与现有配置进行比较。已加载配置中不同的每个配置元素将替换其现有配置中的相应元素。在提交操作期间,只有受更改的配置元素影响的系统进程才能解析新配置。

以下命令将目标设备上整个配置替换为指定配置,然后提交。RPC 超时时间增加,以提供足够的时间来加载和提交完整配置。

等效状态文件是:

如何指定要加载的配置数据的格式

junos.load junos.install_config 功能使您能够使用一种标准Junos OS支持的格式配置运行网络的设备。您可从包含部分或完整配置或 Jinja2 模板的文件加载配置数据。这些数据可以文本、xml 元素Junos命令或 set JSON Junos OS提供。

必须通过向配置文件添加相应的扩展或明确包含函数调用中的参数来指定配置数据 format 的格式。 表 3 汇总了配置数据支持的格式以及文件扩展名和参数的相应 format 值。如果包括该 format 参数,它将覆盖文件扩展名指示的格式。

表 3:指定配置数据的格式

配置数据格式

文件扩展名

格式参数

CLI配置语句(文本)

.conf

text

JavaScript 对象表示法 (JSON)

.json

json

Junos OS set 命令

.set

set

Junos XML 元素

.xml

xml

注意:

运行新Junos OS的设备支持以 JSON 格式加载配置数据(从 Junos OS 版16.1R1。

如何加载配置数据

通过 和 功能,您能够从包含部分或完整配置或 junos.load junos.install_config Jinja2 模板的文件加载配置数据。该文件可驻留在 Salt 主服务器或代理 minion 服务器上。函数必须使用 salt://表示法在 Salt master 上指定路径,并且必须使用绝对路径在代理 minion 服务器上指定路径。如果文件不使用接受的文件扩展名之一来指示配置数据的格式,则函数调用还必须包含参数以指定 format 数据格式。

表 4 说明了您可以使用的配置数据源,并列出了指定文件位置所需的执行和状态功能参数。执行功能可以使用关键字将路径指定为位置参数 path

表 4:配置数据源

配置数据源

描述

位置

执行功能参数

状态功能参数

配置数据文件

包含格式化为 ASCII 文本、Junos XML 元素、Junos OS命令或 JSON 的配置 set 数据的文件。

Salt master — 使用 salt:// 表示法

代理 minion 服务器 — 使用绝对路径

path

name

Jinja2 模板文件

包含格式为 ASCII 文本、Junos XML 元素、Junos OS或 JSON 的 Jinja2 模板 set 的文件。

在函数调用中包括参数,提供在 Salt 系统中尚未定义的任何所需 Jinja2 模板变量的词汇表,例如作为支柱 template_vars 或粒度数据。

Salt master — 使用 salt:// 表示法

代理 minion 服务器 — 使用绝对路径

path

name

例如,以下文件包含配置Junos OS set 操作脚本的一些命令。文件的扩展名指示配置数据的格式。

以下 Salt 命令使用 junos.install_config 执行功能在目标设备上加载和提交配置。该路径作为位置参数提供。

等效状态文件是:

junos.install_config该功能会自动在候选配置和请求的配置之间执行差异。该功能仅适用于在发生变化时应用配置。如果再次尝试应用同一配置,该功能将返回一条消息,说明配置已应用,不会加载并再次提交, junos.install_config 如以下示例中所示:

如何使用 Jinja2 模板加载配置数据

使用 junos.load junos.install_config Jinja2 模板支持配置数据的执行Junos OS状态功能。Jinja 是 Python 的模板引擎,可让您从预定义的模板生成文档。模板是所需语言中的文本文件,通过使用表达式和变量提供了灵活性。您可以使用 Jinja2 Junos OS支持的配置格式之一创建多种配置数据,这些配置格式包括 ASCII 文本、Junos XML 元素、Junos OS 命令和 set JSON。函数使用 Jinja2 模板和提供的变量库来呈现配置数据。

Jinja2 模板提供了一种强大的方法来生成配置数据,特别是对于类似的配置部分。例如,您不需要为设备上每个接口手动添加相同的配置语句,而是可以创建一个在接口列表上进行编程并为每个接口创建所需配置语句的模板。在 Jinja 中,块用 " 和 " 分隔,变量则 {% %} 包括在 " 和 {{ " }} 中。

要加载 Jinja2 模板,您必须在 或 函数调用中包括 junos.load junos.install_config 以下参数:

  • 模板路径 — 指定 Salt master 或代理 minion 服务器上模板文件的路径,如"如何加载配置 数据"中所述

  • 模板格式 — 如果模板文件不使用其中一个接受的文件扩展名来指定格式,则设置 参数以 format 指示配置数据的格式。有关指定格式的信息,请参阅 如何指定要加载的配置数据的格式

  • 模板变量 — 该模板可参考 Salt 内部变量,如在支柱或粒度数据中定义的变量。在参数中必须提供未在 Salt 系统内定义的任何 template_vars 变量。该值 template_vars 是呈现 Jinja2 模板所需的密钥和值库。

    注意:

    如果您的模板仅包含 Salt 内部变量,如支柱数据、粒度数据和函数,则可能需要定义该函数才能 junos.install_config template_vars: True 呈现该模板。

以下示例 Jinja2 模板可生成配置数据,为给定列表中的每个接口在逻辑单元 0 上启用 MPLS,并配置 MPLS 和 RSVP 协议下的接口。

以下命令使用 Jinja2 模板和 中定义的变量呈现配置数据,然后加载并提交在目标 template_vars 主机上:

以下状态文件将加载相同的配置。配置差异存储在代理 diffs_file minion 服务器上文件中。

应用状态时,Salt 将呈现配置并加载,然后设备上提交配置。

该功能将生成以下配置数据,此数据将加载到设备的候选配置中并提交:

如何提交配置

修改配置后,您必须提交配置,使其成为设备上的活动配置。 junos.install_configjunos.rollbackjunos.set_hostname 函数加载请求的配置更改,然后自动执行提交检查和提交操作。您还可以使用 单个 和 函数执行提交检查和提交操作,例如,使用 函数 junos.commit_check junos.commit junos.load 更新配置之后。

该Junos OS CLI提供了提交操作选项,例如添加提交注释或同步多个路由引擎上的配置。执行和状态模块功能支持Junos选项。 表 5 概括显示了可用的提交选项以及支持这些选项的功能。支持的参数对于执行功能和状态函数均有效。

表 5:提交选项参数

功能参数

描述

支持论据的功能

CLI命令等效项

comment=comment

在系统日志文件以及设备的提交历史记录中记录该提交操作的评论。

junos.commit
junos.install_config
junos.rollback
junos.set_hostname

commit comment "comment"

confirm=(True | minutes)

要求在初始提交后指定的时间内确认提交操作。否则,请回滚到之前提交的配置。

将参数设置为 True 使用 10 分钟的默认时间。

junos.commit
junos.install_config
junos.rollback
junos.set_hostname

commit confirmed <minutes>

detail=True

返回有关提交流程的详细信息。

junos.commit

commit | display detail

dev_timeout=seconds    

等待使用指定值作为超时完成操作。

junos.commit
junos.install_config
junos.rollback
junos.set_hostname

force_sync=True

同步并提交这两个路由引擎上的配置,即使另一个路由引擎上存在开放式配置会话或未提交配置更改路由引擎。

junos.commit

commit synchronize force

sync=True

在两个路由引擎上同步并提交配置。

junos.commit

commit synchronize

提交评论

提交配置时,您可以添加一个简短的注释,用来描述提交更改的目的。要记录描述更改的注释,请包括 comment 参数和消息字符串。例如:

同样,在状态文件中:

提交注释包含在提交的系统日志消息中,并记录在提交历史记录中。

提交已确认

提交候选配置时,需要明确确认提交将变得永久。如果提交时间未在指定的时间内确认,设备将自动加载并提交(回滚至)先前提交的配置。确认的提交操作有助于验证配置更改是否正常工作,并且不会阻止对设备的管理访问。如果更改阻止访问或导致其他错误,则自动回滚到上一配置在回滚最后期限后将恢复对设备的访问。

要要求在初始提交后指定的时间内确认提交操作,请包括 confirm=minutes 该参数。允许的范围是 1 到 65,535 分钟。您还可以指定使用 confirm=True 10 分钟的默认时间。

以下命令要求在 15 分钟内确认提交:

要确认提交操作,请致电 或 junos.commit junos.commit_check 功能。

提交详细信息

使用 函数提交配置时,可以通过包含参数来查看整个提交 junos.commit 操作 detail=True 的详细信息。当包含此参数时,函数将返回有关提交流程的详细信息。

提交同步

使用函数提交配置时,可以通过包含参数在双路由引擎路由引擎 junos.commitsync=True 提交配置。例如:

包括参数时,设备将本地 路由引擎 上存储的候选配置复制到另一个 路由引擎,验证报考者语法正确性,然后两个路由引擎上提交。 sync=True 要强制操作成功,即使另一个会话上存在开放式配置会话或未提交配置更改 commit synchronize ,路由引擎使用 force_sync=True 参数。包括此参数会导致设备在同步和提交配置之前终止路由引擎另一个会话上的配置会话。

提交超时

RPC 的退出默认时间为 30 秒。较大的配置更改可能超过此值,从而导致操作在上传和提交配置之前的时间超过。要适应可能需要超过默认超时间隔的提交时间的配置更改,请包括该参数,将超时间隔设置为 dev_timeout=seconds 相应的值。例如:

如何回滚配置

运行 Junos OS的设备会存储最近提交的配置和最多 49 个先前配置的副本,具体取决于平台。您可以将回滚到任何存储的配置。如果配置更改导致不必要的结果,并且您想要恢复到已知工作配置,则这会非常有用。回滚配置的过程类似于在设备上执行配置更改的过程,但执行回滚操作(而不是加载配置数据)将替换整个候选配置,而将整个候选配置替换为先前提交的配置。

执行功能和状态功能使您能够将配置回滚到之前在运行新设备的配置 salt.modules.junos.rollback salt.states.junos.rollback Junos OS。要回滚配置并提交配置,请执行函数,将参数设置为 id 所需回滚配置的 ID。有效 ID 值是最近提交配置的 0(零),其数量比之前存储的配置数少一个(最大值为 49)。如果省略 id 该关键字,该关键字将默认为 0。

例如,以下命令将配置回滚至之前提交的配置,然后提交:

要回滚配置并记录文件中的配置差异,稍后参考,包括该参数,并设置为代理 minion 服务器上编写差异的文件 diffs_file 的路径。

差异保存在代理 minion 服务器上指定的文件中。