📜  nornir 配置文件 - Python (1)

📅  最后修改于: 2023-12-03 15:17:58.531000             🧑  作者: Mango

Nornir 配置文件 - Python

Nornir 是一个基于 Python 的自动化执行 Python 3 任务的网络编程框架。在实践中,Nornir 与 Ansible 和 Saltstack 等其他工具相似,但它专注于 Python 开发人员。

1. 安装 Nornir

在使用 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
2. 创建 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,这表示只记录重要信息。

3. 创建主机清单文件和组文件

下一步,我们需要创建一个 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 组。我们还把给定的平台添加到组中。这样我们就能够在接下来的任务中指定特定组中的主机。

4. 基本任务

我们现在已经定义了我们要管理的所有主机和组,下一步是开始执行任务。

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 可以将命令输出转换为易于使用的结构化数据。

5. 其他插件

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 示例一样使用这些插件来执行各种任务。

6. 总结

Nornir 是一个基于 Python 的自动网络编程框架,旨在简化和加速自动化网络设备的配置、部署和管理。该框架集成了广泛的插件,涵盖了各种用例,并非常易于使用和扩展。在本文中,我们学习了如何使用 YAML 创建 Nornir 配置文件并执行基本任务。我们还对一些流行的插件进行了简介。