📅  最后修改于: 2023-12-03 15:17:58.531000             🧑  作者: Mango
Nornir 是一个基于 Python 的自动化执行 Python 3 任务的网络编程框架。在实践中,Nornir 与 Ansible 和 Saltstack 等其他工具相似,但它专注于 Python 开发人员。
在使用 Nornir 之前,我们需要先安装它。
我们可以使用 pip 安装 Nornir。
pip install nornir
如果使用 pyenv、conda、virtualenvwrapper 等 Python 环境管理工具,我们可以在虚拟环境中安装。
python3 -m pip install virtualenv
python3 -m virtualenv nornir-project
source nornir-project/bin/activate
pip install nornir
在使用 Nornir 之前,我们需要创建 Nornir 配置文件。
在 Python 中,我们可以使用 YAML 文件格式创建 Nornir 配置文件。YAML 格式非常易于阅读和编写,可以更好地理解配置。
---
inventory:
plugin: SimpleInventory
options:
host_file: "hosts.yaml"
group_file: "groups.yaml"
runner:
plugin: "threaded"
logging:
level: "INFO"
在这个配置文件中:
inventory
: 我们指定我们的 inventory 的类型。在这个例子中,我们使用的是 SimpleInventory
插件,这是一个 INI 格式的文件,包含主机和组的列表。
runner
: 我们定义程序执行任务的方式。在这个例子中,我们指定 threaded
插件,这个插件使用多线程来加速任务的执行。
logging
: 我们定义日志级别。在这个例子中,我们定义为 INFO
,这表示只记录重要信息。
下一步,我们需要创建一个 inventory 文件。这是包含我们要管理的主机和组的列表的文件。我们可以使用 YAML 或 INI 格式创建,但是在这个例子中,我们将使用 YAML。
---
bgp_lab:
hostname: "bgp-lab.example.com"
platform: "cisco_nxos"
bgp_prod:
hostname: "bgp-prod.example.com"
platform: "cisco_ios"
access_lab:
hostname: "access-lab.example.com"
platform: "cisco_nxos"
access_prod:
hostname: "access-prod.example.com"
platform: "cisco_ios"
现在我们已经定义了我们要管理的所有主机及其平台。接下来,我们需要定义主机所属的组。我们可以使用 groups.yaml 文件定义它们。
---
nxos:
platform: "cisco_nxos"
groups:
- bgp_lab
- access_lab
ios:
platform: "cisco_ios"
groups:
- bgp_prod
- access_prod
在这个 YAML 文件中,我们定义了我们两个不同的组。一个是 nxos
组,另一个是 ios
组。我们还把给定的平台添加到组中。这样我们就能够在接下来的任务中指定特定组中的主机。
我们现在已经定义了我们要管理的所有主机和组,下一步是开始执行任务。
from nornir import InitNornir
from nornir.plugins.tasks.networking import netmiko_send_command
nr = InitNornir(config_file="config.yaml")
def cmd():
cmd = input("Please enter your command: ")
return cmd
cmd = cmd()
results = nr.run(
task=netmiko_send_command,
command_string=cmd,
use_textfsm=True
)
for host, result in results.items():
print(result.result, end="")
这个简单的代码片段允许我们在初始化 Nornir 后从控制台输入命令,用 netmiko_send_command
插件执行该命令并检查执行结果。use_textfsm
设置为 True 可以将命令输出转换为易于使用的结构化数据。
Nornir 的插件是它的核心功能之一。它几乎支持用于自动化的所有插件。例如:
Netmiko:用于 SSH 连接到以太网设备。
Napalm: 与 Netmiko 类似,但是它使用 PyEZ 库与 Juniper、Arista 和基于 NX-OS 的网络设备进行通信。
Paramiko: 用于 SSH 连接到 Linux 服务器。
Napalm Python library: 支持多种设备类型的统一自动化库。
nornir_http:用于向网络设备发送 HTTP 请求。该插件可用于在网络设备上执行 CRUD 操作,并用于在网络设备上进行 REST API 测试。
nornir_capirca:用于自动在网络设备上创建和更新 ACL。
我们可以像上面的 netmiko_send_command 示例一样使用这些插件来执行各种任务。
Nornir 是一个基于 Python 的自动网络编程框架,旨在简化和加速自动化网络设备的配置、部署和管理。该框架集成了广泛的插件,涵盖了各种用例,并非常易于使用和扩展。在本文中,我们学习了如何使用 YAML 创建 Nornir 配置文件并执行基本任务。我们还对一些流行的插件进行了简介。