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 的设备。此示例使用 Salt 配置多个运行 Junos OS 的设备。

要求

此示例使用以下硬件和软件组件:

  • 三台运行 Junos OS 并启用 NETCONF 的 MX 系列路由器

  • 盐师傅具有以下要求:

    • Salt 版本 3001 或更高版本

    • 可以在运行 Junos OS 的设备上执行 ping 命令并执行作

概述

此示例定义一个 Salt 状态,用于在运行 Junos OS 的目标设备上配置 BGP 对等会话。 表 1 列出了设备主机名、代理 ID 和特定于设备的文件。

表 1:设备信息

主机名

代理 ID

代理配置文件

(/SRV/支柱)

BGP 数据文件

(/SRV/支柱/BGP)

R1

R1

r1-proxy.sls

R1.sls

R2

R2

r2-proxy.sls

R2.sls

R3

R3

r3-proxy.sls

R3.sls

该示例使用以下组件:

  • Jinja2 配置模板 — 使用 set 命令格式将 BGP 配置定义为 Jinja 模板。该模板使用 .set 文件扩展名来指示格式。

  • 支柱文件 - 定义 Jinja2 模板所需的特定于设备的配置数据。每个设备的数据都存储在 Salt 主机上 /srv/pillar/bgp 目录下的单独文件中。

  • 支柱顶部文件 - 将每个支柱文件映射到相应的代理工作节点。

  • 状态文件 — 定义要应用于目标设备的状态。在这种情况下,状态文件使用 junos.install_config 函数将 BGP 配置应用于设备。

  • 状态顶部文件 — 将状态文件映射到应应用状态的设备。

在此示例中,您将创建一个 Jinja2 模板来生成在设备上加载并提交的 BGP 配置。该模板可以用变量替换特定于设备的配置数据,以便根据需要重复使用这些数据。模板文件位于 Salt 主服务器上的 /srv/salt/configs 目录下。

然后,您可以为每个设备创建单独的支柱文件,并在该文件中定义特定于设备的配置数据。每个支柱文件都定义了一个 BGP_data 键,其中包含配置模板中引用的所有变量参数。支柱顶部文件将每个支柱文件映射到其各自的代理工作节点。将数据存储在支柱中可确保每个代理工作节点只能访问该设备的数据。

junos_bgp_config.sls 状态文件定义一个状态,该状态使用该junos.install_config函数在模板中应用 BGP 配置。调用时,该函数将锁定配置数据库,加载特定于目标设备的配置,提交配置,然后解锁数据库。该函数包括diffs_file用于将配置差异存储在代理工作节点服务器上的文件中的参数。文件名使用id粒度为输出文件生成特定于设备的文件名。

状态顶部文件将状态 junos_bgp_config 应用于具有任何值的 BGP_data 支柱键的任何工作节点。当您运行 highstate 或将该状态应用于设备时,Salt 会使用模板和支柱数据生成特定于目标的配置,然后调用该 junos.install_config 函数以在设备上加载并提交配置。如果已应用配置,则 junos.install_config 该函数不会重新应用该配置。

配置设备后,应用状态 junos_bgp_verify_peers 。此状态在 get-bgp-neighbor-information 每个设备上执行 RPC,直到它返回 peer-state 该设备的支柱数据中定义的每个对等方的值 或 Established 超时。此状态假定设备上正在运行 BGP。

配置

要使用 Salt 配置设备,请执行本节中包含的任务。

定义支柱数据

分步过程

要定义用于生成 BGP 配置的 Jinja2 模板的支柱数据,请执行以下作:

  1. 在 Salt 主服务器上,为每个托管设备创建一个名为 /srv/pillar/bgp/hostname.sls 的单独文件。

  2. r1.sls 文件中定义主机 r1 的数据。

  3. r2.sls 文件中定义主机 r2 的数据。

  4. r3.sls 文件中定义主机 r3 的数据。

  5. 在支柱顶部文件中,将支柱文件映射到相应设备 ID 下的 BGP 数据,以使设备能够访问数据。

  6. 刷新支柱数据。

定义 Jinja2 模板

分步过程

要创建用于生成 BGP 配置的 Jinja2 模板,请执行以下作:

  1. 在 Salt 主服务器上创建名为 /srv/salt/configs/junos-config-bgp-template.set 的文件。

  2. 将 BGP 配置模板添加到文件并保存。

定义状态

定义配置状态文件

要定义应用配置的状态文件,请执行以下作:

  1. 在 Salt Master 上创建名为 /srv/salt/junos_bgp_config.sls 的文件。

  2. 定义一个状态,该状态使用该 junos.install_config 函数在模板中应用 BGP 配置。

    注意:

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

  3. 在顶部文件中,定义 应用junos_bgp_config 状态的目标。目标包括定义 BGP_data 了支柱项的所有设备。

定义 BGP 验证状态文件

要定义验证 BPG 对等方是否具有 peer-stateEstablished状态:

  1. 在 Salt 主服务器上创建名为 /srv/salt/junos_bgp_verify_peers.sls 的文件。

  2. 定义一个状态,该状态使用该 junos.rpc 函数执行 get-bgp-neighbor-information RPC,然后检查 RPC 回复中的 peer-state Established

结果

当您执行 highstate 时,文件中的 top.sls 状态将应用于相应的目标设备。

验证

验证 BGP 配置

目的

验证是否已为每个邻居地址建立 BGP 会话。

行动

将状态应用于 junos_bgp_verify_peers 目标设备并查看输出。

意义

状态文件要求每个对等方的 等 peer-stateEstablished 。输出指示每个设备上的所有对等方都满足此条件。或者,您可以使用该 junos.cli 函数在设备上执行 show bgp summary 命令并查看输出,以验证是否已为每个邻接方地址建立 BGP 会话。

故障 排除

配置加载错误疑难解答

问题

Salt 主机将生成一个 ConfigLoadError 错误,指示由于语法错误而无法在设备上加载配置。

溶液

Salt 使用 Jinja2 模板和为该设备定义的支柱数据来呈现 Junos OS 配置。当 Jinja2 模板生成无效配置时,Salt 会生成语法错误。若要更正此错误,请更新 Jinja2 模板以更正错误消息中键 bad_element 标识的元素。