管理 Junos 设备上的 YANG 软件包、模块和脚本

总结 在 Junos 设备上加载自定义 YANG 软件包,以便向设备添加自己的远程过程调用 (RPC) 和数据模型。

您可以在 Junos 设备上加载自定义 YANG 模块,以添加不受操作系统本机支持但可通过转换支持的 RPC 和数据模型。将非典型 YANG 数据模型加载到设备上时,还必须加载这些数据模型所需的任何转换脚本、操作脚本和偏差模块。

注意:

从 Junos OS 17.3R1 版开始,当您将自定义 YANG 数据模型加载到设备上时,您无需显式加载任何必要的 Junos OS 扩展模块。在早期版本中,您必须为使用该模块的任何软件包加载 Junos OS 扩展模块。

Junos 设备使用软件包识别相关 YANG 模块、转换脚本和操作脚本的集合。每个软件包都有一个唯一的标识符。将 YANG 模块和脚本添加至设备时,必须将其与新的或现有软件包相关联。本主题讨论如何创建、更新和删除 YANG 软件包,以及添加或更新其关联的模块和脚本。

注意:

为防止 CLI 相关或配置数据库出现错误,建议您在设备正在添加、更新或删除 YANG 软件包并修改方案时,不要执行任何 CLI 操作、更改配置或终止操作。

创建 YANG 软件包并添加模块和脚本

要验证 YANG 模块和脚本并将其添加到新包中:

  1. 将 YANG 模块和任何必要脚本下载到设备上的任何目录。
  2. 确保任何未签名的 Python 操作脚本均归 Junos OS super-user 登录类中的 root 或用户所有,并且只有文件所有者才为该文件写入许可。
    注意:

    用户只能在 Junos 设备上执行未签名的 Python 脚本,因为脚本的文件权限包括用户按用户、组或其他部分所属于的第一类的读取权限。

  3. (可选)验证模块和脚本的语法。
  4. 创建带有唯一标识符的 YANG 文件包,并为该软件包中的模块和脚本以及识别该软件包中模块的偏差的任何偏差模块指定文件路径。
    注意:

    您可以为单个文件指定绝对或相对路径,或者通过指定括号中封装的文件路径空间划定列表来添加多个文件。

    注意:

    要安装打包为压缩焦油文件的 OpenConfig 模块,请使用 命令 request system software add 。发出 命令安装 request system software add 的 OpenConfig 模块和脚本始终与软件包标识符 openconfig相关联。

    注意:

    不支持从 Junos OS 18.3R1 版开始,在配置模式 run 下使用 命令添加、删除或更新 YANG 包。

  5. 当系统提示您重新启动 Junos OS CLI 时,按下 Enter 接受默认值 yes。
  6. 验证软件包是否已创建并包含正确的模块和脚本。
  7. 如果软件包中包含在 Python 中编写的转换脚本或操作脚本,则允许设备在适合 Junos OS 版本时配置 language python 或 language python3 语句来执行未签名的 Python 脚本。
    注意:

    从 Junos OS 20.2R1 版和 Junos OS Evolved 版本 22.3R1 开始,设备使用 Python 3 执行 YANG 操作和转换脚本。在早期版本中,Junos OS 仅使用 Python 2.7 执行这些脚本,而 Junos OS Evolved 默认使用 Python 2.7 执行脚本。

  8. 在多机箱系统上,在系统中的每个节点上重复步骤 1 到 7 。

创建新文件包时,设备会在新位置存储模块和脚本文件的副本。该设备还在 /var/db/scripts/ action 和 /var/db/scripts/translation directories 下分别存储操作脚本和转换脚本文件的副本。对模块和脚本进行验证并添加到设备中后,Junos OS 将重新设计为包括新数据模型,然后根据此模式验证活动配置。新添加的 RPC 和配置层次结构立即可供使用。

注意:

使用临时配置数据库的设备将删除重建方案过程中的所有临时配置数据。

注意:

Junos OS 不支持使用 configure private 模式配置对应于第三方 YANG 数据模型的语句,例如 OpenConfig 或自定义 YANG 数据模型。

使用新或修改的模块和脚本更新 YANG 包

您可通过执行 request system yang add 命令创建新的 YANG 软件包。要将现有软件包更新为在软件包中添加新模块和脚本,或更新软件包中的现有模块和脚本,必须使用 命令 request system yang update 。

要更新带有新或修改模块和脚本的 YANG 软件包:

  1. 将模块和脚本下载到设备上的任何目录。
  2. 确保任何未签名的 Python 操作脚本均归 Junos OS super-user 登录类中的 root 或用户所有,并且只有文件所有者才为该文件写入许可。
    注意:

    用户只能在 Junos 设备上执行未签名的 Python 脚本,因为脚本的文件权限包括用户按用户、组或其他部分所属于的第一类的读取权限。

  3. (可选)验证模块和脚本的语法。
  4. 通过发出 request system yang update 命令更新 YANG 包,并为新的和修改的模块和脚本指定文件路径。
    注意:

    您可以指定到单个文件的绝对或相对路径,或者通过指定括号中封装的文件路径空间划定列表来更新多个文件。

    注意:

    不支持从 Junos OS 18.3R1 版开始,在配置模式 run 下使用 命令添加、删除或更新 YANG 包。

  5. 当系统提示您重新启动 Junos OS CLI 时,按下 Enter 接受默认值 yes。
  6. 如果软件包包含在 Python 中编写的翻译脚本或操作脚本,则允许设备在未配置的情况下配置或language python3语句来执行未签名的 Python 脚本language python。
    注意:

    从 Junos OS 20.2R1 版和 Junos OS Evolved 版本 22.3R1 开始,设备使用 Python 3 执行 YANG 操作和转换脚本。在早期版本中,Junos OS 仅使用 Python 2.7 执行这些脚本,而 Junos OS Evolved 默认使用 Python 2.7 执行脚本。

  7. 在多机箱系统上,在系统中的每个节点上重复步骤 1 到 6 。

更新软件包时,设备将存储新和修改的模块和脚本文件的副本。然后,Junos OS 将重新设计方案,以包括与该软件包相关联的数据模型的任何更改,并根据此方案验证活动配置。

注意:

使用临时配置数据库的设备将删除重建方案过程中的所有临时配置数据。

删除 YANG 软件包

谨慎:

从 Junos 设备中删除 YANG 包之前,请确保活动配置不包含与该软件包添加的数据模型相关的配置数据。

要从 Junos 设备中删除 YANG 软件包以及与该软件包相关联的所有模块和脚本:

  1. 查看活动配置,以确定是否存在对将被删除的 YANG 模块的任何依赖关系。
  2. 如果配置包含对模块的依赖性,请更新配置以消除依赖项。
  3. 使用相应的软件包标识符发出 request system yang delete 命令,删除软件包以及关联的模块和脚本。
    注意:

    您必须使用 命令 request system software delete 删除已从压缩焦油文件中安装的 OpenConfig 软件包,方法是发出 request system software add 命令。

    注意:

    不支持从 Junos OS 18.3R1 版开始,在配置模式 run 下使用 命令添加、删除或更新 YANG 包。

  4. 如果系统提示您重新启动 Junos OS CLI,请按下 Enter 接受默认值 yes。

删除软件包时,Junos OS 将重新设计方案以删除与该软件包相关联的数据模型,然后根据此方案验证活动配置。设备将移除创建软件包时生成的模块和脚本文件的副本。该设备还删除了文件包的操作脚本和转换脚本文件的副本,这些文件存储在 /var/db/scripts/action 和 /var/db/scripts/translation directories 下。如果将原始模块和脚本文件下载到不同位置,则原始文件保持不变。

注意:

使用临时配置数据库的设备将删除重建方案过程中的所有临时配置数据。

发布历史记录表
释放
描述
22.3R1-EVO
从 Junos OS Evolved 版本 22.3R1 开始,Junos OS Evolved 使用 Python 3 执行 YANG 操作和转换脚本。
20.2R1
从 Junos OS 20.2R1 版开始,Junos OS 使用 Python 3 执行 YANG 操作和转换脚本。在早期版本中,Junos OS 使用 Python 2.7 执行这些脚本。
18.3R1
不支持从 Junos OS 18.3R1 版开始,在配置模式 run 下使用 命令添加、删除或更新 YANG 包。
17.3R1
从 Junos OS 17.3R1 版开始,当您将自定义 YANG 数据模型加载到设备上时,您无需显式加载任何必要的 Junos OS 扩展模块。