了解适用于 Junos OS 的 Ansible 集合和模块
了解可用于管理运行 Junos OS 的设备和运行 Junos OS Evolved 的设备的 Ansible 集合和模块。
了解用于管理 Junos 设备的 Ansible 集合和模块
Ansible 是一个 IT 自动化框架,可用于基础架构配置管理。您可以使用 Ansible 模块(离散的代码单元)在托管节点上执行特定功能。您可以在远程主机上执行单个模块以执行临时任务。您还可以通过操作指南执行模块。
瞻博网络提供了可用于管理 Junos 设备的 Ansible 模块。Ansible 模块通过托管在 Ansible Galaxy 存储库中的 Ansible 内容集进行分组和分发。Ansible 集合是一种分发 Ansible 内容的格式,但这些内容不包含在 Ansible 核心安装中。集合可以包含各种内容,包括模块、剧本、插件和角色。集合也有自己的存储库,因此可以独立于 Ansible 核心安装进行开发和发布。
表 1 概述了可用于管理 Junos 设备的内容集。瞻博网络提供了合 juniper.device 集。从 2.0.0 版开始 juniper.device ,我们将瞻博网络 juniper.device 集合和红帽 Ansible junipernetworks.junos 集合整合为一个包含这两组模块的集合。
| 收藏 | 模块集 | 描述 |
|---|---|---|
juniper.device |
用于管理 Junos 设备的模块。瞻博网络将此集合作为开源项目提供和管理。 |
|
|
( |
用于管理 Junos 设备的模块。红帽 Ansible 网络团队最初维护了这个集合。在 2.0.0 版中 |
了解 juniper.device 合并集合
合并概述
在 2.0.0 版之前 juniper.device ,瞻博网络 juniper.device 集合和红帽 Ansible junipernetworks.junos 集合是独立的集合。每个集合所有者维护各自的集合。从版本 2.0.0 开始 juniper.device ,我们将集合合并 junipernetworks.junos 到集合中 juniper.device 。瞻博网络将保留合并后的集合。
我们将参考juniper.device集合来指示组合的模块集。为了区分集合中的模块集,我们将模块引用如下:
-
juniper.device模块或juniper.device原始模块 -
junipernetworks.junos模块或juniper.device.junos_*模块
安装 juniper.device 集合时,可用于 juniper.device.module_name 执行任一模块集中的模块。要继续使用引用 junipernetworks.junos.module_name的现有 playbook,您还必须安装 junipernetworks.junos 集合。要使用任一命名空间执行 junipernetworks.junos 模块,必须设置为 ansible_network_os juniper.device.junos。否则,在使用任一模块集时,其他一切都保持不变。
尽管该 juniper.device 集合包括这两组模块,但每个模块集使用不同的 Ansible 连接值和网络操作系统值。因此,两组模块无法使用相同的清单文件,并且您不能在同一操作指南中混合使用模块集。因此,我们建议您选择一组模块来用于您的 playbook 和任务。您选择的套装取决于偏好。为了帮助您确定哪个模块集最适合您的环境,我们提供了这两组的高级概述和比较。
模块集比较
该 juniper.device 集合和 junipernetworks.junos 集合最初是为不同的目的和用例而构建的。瞻博网络设计这些 juniper.device 模块的目的是让用户可以直接访问 Junos OS 的全部功能。红帽 junipernetworks.junos 使用适用于所有红帽维护的网络系列的一致方法开发了这些模块。这种方法提供了模板化配置,以简化可重复的配置管理。
除了一些明显的差异外,模块 juniper.device 和 junipernetworks.junos 模块都提供类似的功能来管理 Junos 设备。这两组模块都使您能够:
-
了解设备事实
-
在设备上执行命令和 RPC
-
安装软件包
-
从设备执行 ping 操作
-
配置设备
两个模块集都提供类似的设备配置选项。例如,您可以:
-
从文件加载一种可接受的格式的配置数据
-
将配置数据加载为
set模块参数中提供的命令 -
回滚配置
-
替换整个配置
-
指定用于加载配置数据的格式和加载操作
-
提交配置并包括通用提交选项
模块集在配置操作方面也存在一些差异。这些 junipernetworks.junos 模块提供了大量配置模板,使您能够轻松地为配置层次结构的特定区域配置通用语句。例如,您可以为 OSPF 或静态路由配置通用选项。
同样,这些 juniper.device 模块提供了一些额外的配置功能。您可以使用 Jinja2 模板比较配置、加载救援配置和加载配置数据。您还可以选择配置模式。例如,您可以使用批处理模式;配置候选配置的专用副本;或者配置动态或临时数据库。这些 juniper.device 模块还提供了额外的提交选项,用于同步配置、提交空更改和忽略提交警告。
模块集之间的另一个关键区别是,这些 juniper.device 模块可与其他几个瞻博网络产品集成。例如,您的 Ansible 操作指南可以引用 Junos PyEZ 操作表来从设备检索操作状态数据。Ansible 操作指南还可以在 Python (JSNAPy) 操作中执行 Junos 快照管理员。JSNAPy 允许您捕获和审核 Junos 设备的运行时环境快照。因此,您可以在 Ansible 操作指南中使用现有的 Junos PyEZ 表以及 JSNAPy 配置和测试文件。
如何在 Junos 设备上执行模块
要使用 Ansible Galaxy 存储库中托管的集合,您必须先在控制节点上安装 Ansible,然后再安装集合。有关安装集合的更多信息 juniper.device ,请参阅 适用于 Junos OS 服务器要求的 Ansible。
Ansible 模块可以在托管节点上执行操作。通常,Ansible 控制节点会向托管节点发送一个模块来执行该操作。节点执行该模块,然后将其删除。在这种情况下,托管节点必须具有执行模块的能力。由于大多数 Ansible 模块都是用 Python 编写的,因此 Ansible 通常需要在托管节点上使用 Python。
但是,集合中的 juniper.device 模块不需要托管节点上的 Python。与典型操作相反,Ansible 控制节点在本地执行模块。这些模块使用 Junos XML API 和 NETCONF 与托管节点进行接口。通过此执行方法,您可以使用 Ansible 管理任何受支持的 Junos 设备。 图 1 展示了 Ansible 控制节点与托管 Junos 设备之间的通信。
通信
要使用模块或 juniper.device 模块 junipernetworks.junos ,您的 Ansible 操作指南或命令必须:
-
指定集合或 FQCN - 要指定集合,请在播放中包括
collections关键帧。或者,可以省collections略密钥,而是按其完全限定的集合名称 (FQCN) 引用集合内容,这是推荐的方法。 -
在控制节点上本地执行模块 — 要在本地运行 Ansible 模块,请在操作指南、清单文件或命令选项中定义适当的连接参数。在操作指南中定义
connection参数,或在清单文件或主机或组变量文件中定义ansible_connection参数。对于junipernetworks.junos模块,还必须指定ansible_network_os参数。您通常在清单文件中定义此参数。 表 2 概述了支持的值。表 2:连接参数 模块集 剧本 清单文件 juniper.device
(原始模块)-
connection: (local | juniper.device.pyez)
-
ansible_connection=(local | juniper.device.pyez)
junipernetworks.junos
(除junos_*junos_netconf和junos_ping)-
connection: netconf
-
ansible_connection=netconf -
ansible_network_os=juniper.device.junos
junipernetworks.junos
(junos_netconf和junos_ping)-
connection: network_cli
-
ansible_connection=network_cli -
ansible_network_os=juniper.device.junos
-
-
提供适当的连接和身份验证信息以连接到托管设备。
您可以使用有权访问托管 Junos 设备的任何用户帐户来执行 Ansible 模块。执行 Ansible 模块时,将强制执行 Junos OS 用户帐户访问权限。为 Junos OS 用户帐户配置的类决定了权限。因此,如果用户执行将配置更改加载到设备上的模块,则用户必须具有更改配置相关部分的权限。
以下部分提供了不同模块集的一些示例操作指南和清单文件。
juniper.device 模块示例操作指南
以下 playbook 执行 juniper.device.facts 模块以检索设备事实并将其保存到文件中。在此示例中,我们在 playbook 而不是清单文件中定义连接类型。用户使用 SSH 密钥代理中加载的 SSH 密钥向设备进行身份验证。
---
- name: Get Device Facts
hosts: junos
connection: local
gather_facts: no
tasks:
- name: Retrieve facts from a Junos device
juniper.device.facts:
savedir: "{{ playbook_dir }}"
- name: Print version
ansible.builtin.debug:
var: junos.version
您还可以在命令行上执行临时操作。以下命令将执行该 juniper.device.facts 模块,并从清单组 junos中的主机检索设备事实。
user@ansible-cn:~$ ansible --connection local -i production junos -m juniper.device.facts
junipernetworks.junos 模块的示例清单文件和操作指南
如果使用的是模块集,junipernetworks.junos则可以在清单文件或主机或组变量文件中定义 ansible_connection 和 ansible_network_os 变量。以下示例清单文件定义了 下组dc1dc1:vars的连接参数。
[dc1] switch1.example.com [dc1:vars] ansible_connection=netconf ansible_network_os=juniper.device.junos
以下操作指南在 junipernetworks.junos.junos_facts 命名空间下 juniper.device 执行模块。该操作指南引用该 dc1 组,该组在清单文件中定义相应的连接和网络操作系统值。
- name: Get Device Facts
hosts: dc1
gather_facts: no
tasks:
- name: Retrieve facts from a Junos device
juniper.device.junos_facts:
register: response
- name: Print version
ansible.builtin.debug:
var: response.ansible_facts.ansible_net_version
juniper.device 模块
表 3 概述了该集合中的juniper.device原始juniper.device模块。有关模块的当前模块列表、文档和用法示例,请参阅 https://ansible-juniper-collection.readthedocs.io。
|
模块名称 |
描述 |
支持的 Ansible 连接 |
|---|---|---|
|
|
在 Junos 设备上执行操作模式命令,并将输出保存在本地。 |
|
|
|
管理 Junos 设备的配置。 |
|
|
|
从远程主机检索设备特定信息,包括 Junos OS 版本、序列号和硬件型号。 |
|
|
|
在本地 Ansible 控制节点和 Junos 设备之间传输文件。 |
|
|
|
通过 Ansible 在 Python 中执行 Junos Snapshot Administrator (JSNAPy) 测试。 |
|
|
|
从 Junos 设备执行 |
|
|
|
在 Junos 设备上执行路径 MTU 发现 (PMTUD)。 |
|
|
|
执行 Junos OS RPC。 |
|
|
|
安装软件包并重新启动 Junos 设备。 |
|
|
|
为支持 群集 的SRX 系列防火墙创建SRX 系列机箱群集。 |
|
|
|
在 Junos 设备上执行系统操作,包括重置、重新启动或关闭设备。 |
|
|
|
使用 Junos PyEZ 操作表和视图从 Junos 设备检索操作信息。 |
|
junipernetworks.junos 模块
从版本 2.0.0 开始 juniper.device ,集合 juniper.device 包括模块 junipernetworks.junos 。 表 4 概述了 junipernetworks.junos 集合 juniper.device 中的模块。模块集使您能够执行操作任务。它还包含许多配置模板模块,用于为 Junos 设备上的各种功能、协议和服务配置通用设置。
| 模块名称 | 描述 | 支持的 Ansible 连接 |
|---|---|---|
| 操作模块 | ||
|
|
在 Junos 设备上执行操作模式命令。 |
|
|
|
从远程主机检索设备特定信息。 |
|
|
|
安装软件包并重新启动 Junos 设备。 |
|
|
|
从 Junos 设备执行 |
|
|
|
在 Junos 设备上通过 NETCONF 执行 Junos OS RPC。 |
|
| 配置模块 | ||
|
|
对接口应用防火墙过滤器。 |
|
|
|
配置防火墙过滤器,有时称为 访问控制列表 (ACL)。 |
|
|
|
配置横幅。 |
|
|
|
管理接口的 BGP 地址族属性。 |
|
|
|
配置 BGP 全局属性。 |
|
|
|
管理 Junos 设备的配置。 |
|
|
|
配置设备主机名。 |
|
|
|
配置基本物理和逻辑接口属性。 |
|
|
|
配置 L2 接口。 |
|
|
|
配置 L3 接口。 |
|
|
|
为聚合以太网接口配置全局链路聚合控制协议 (LACP) 属性。 |
|
|
|
管理接口的 LACP 属性。 |
|
|
|
配置链路聚合组 (LAG)。 |
|
|
|
为链路层发现协议 (LLDP) 配置全局设置。 |
|
|
|
管理接口的 LLDP 属性。 |
|
|
|
配置系统日志记录。 |
|
|
|
配置 NETCONF 系统服务。 |
|
|
|
配置网络时间协议 (NTP)。 |
|
|
|
管理接口的 OSPF 配置。 |
|
|
|
配置 OSPFv2。 |
|
|
|
配置 OSPFv3。 |
|
|
|
配置路由策略前缀列表。 |
|
|
|
配置路由实例。 |
|
|
|
配置路由选项。 |
|
|
|
配置和管理安全策略。 |
|
|
|
配置全局安全策略设置。 |
|
|
|
配置安全区域。 |
|
|
|
管理 SNMP 服务器配置。 |
|
|
|
配置静态路由。 |
|
|
|
管理主机名和 DNS 配置。 |
|
|
|
配置本地用户帐户。 |
|
|
|
配置 VLAN。 |
|
|
|
管理设备上的 VRF 定义。 |
|