网络自动化有何不同之处
网络自动化使用 Ansible 的基本概念,但是网络模块的工作方式存在重要区别。本简介将帮助您理解本指南中的练习。
在控制节点上执行
与大多数 Ansible 模块不同,网络模块不在被管理的节点上运行。从用户的角度来看,网络模块的工作方式与其他模块一样。它们可以使用临时命令、playbook 和角色。但是,在幕后,网络模块使用与其他(Linux/Unix 和 Windows)模块不同的方法。Ansible 使用 Python 编写和执行。由于大多数网络设备无法运行 Python,因此 Ansible 网络模块在 Ansible 控制节点上执行,其中运行 ansible 或 ansible-playbook。
对于那些提供 backup 选项的模块,网络模块还使用控制节点作为备份文件的目标。对于 Linux/Unix 模块,如果被管理节点上已存在配置文件,则默认情况下,备份文件将写入与新的已更改文件相同的目录中。网络模块不会更新被管理节点上的配置文件,因为网络配置并非写入文件中。网络模块在控制节点上写入备份文件,通常位于 playbook 根目录下的 backup 目录中。
当使用连接插件(例如,ansible.netcommon.network_cli)用于网络模块时,诸如 ansible.builtin.file 和 ansible.builtin.copy 之类的 Unix/Linux 模块也在控制节点上运行。
多种通信协议
由于网络模块在控制节点而不是被管理的节点上执行,因此它们可以支持多种通信协议。为每个网络模块选择的通信协议(通过 SSH 的 XML、通过 SSH 的 CLI、通过 HTTPS 的 API)取决于平台和模块的用途。一些网络模块只支持一种协议;一些模块提供选择。最常见的协议是通过 SSH 的 CLI。您可以使用 ansible_connection 变量设置通信协议。
| ansible_connection 的值 | 协议 | 需要 | 持久化? | 
|---|---|---|---|
| ansible.netcommon.network_cli | 通过 SSH 的 CLI | network_os 设置 | 是 | 
| ansible.netcommon.netconf | 通过 SSH 的 XML | network_os 设置 | 是 | 
| ansible.netcommon.httpapi | 通过 HTTP/HTTPS 的 API | network_os 设置 | 是 | 
| 本地 | 取决于提供程序 | 提供程序设置 | 否 | 
注意
ansible.netcommon.httpapi 已弃用 eos_eapi 和 nxos_nxapi。有关详细信息和示例,请参阅 Httpapi 插件。
ansible_connection: local 已被弃用。请改用上面列出的持久连接类型之一。使用持久连接,您可以只定义一次主机和凭据,而不是在每个任务中都定义。您还需要为要与其通信的特定网络平台设置 network_os 变量。有关在各种平台上使用每种连接类型的更多详细信息,请参阅 特定于平台的 页面。
按网络平台组织的集合
网络平台是一组具有通用操作系统并可由 Ansible 集合管理的网络设备,例如
- Arista:arista.eos 
- Cisco:cisco.ios、cisco.iosxr、cisco.nxos 
- Juniper:junipernetworks.junos 
- VyOS vyos.vyos 
一个网络平台中的所有模块共享某些要求。一些网络平台具有特定差异 - 有关详细信息,请参阅 特定于平台的 文档。
