网络工程师学Python-简化网络自动化任务编排框架Nornir

举报
wljslmz 发表于 2023/04/26 12:08:49 2023/04/26
【摘要】 Nornir是一个基于Python的自动化编排框架,旨在简化网络自动化的任务。它提供了一些基本的操作,例如SSH,Telnet,HTTP,以及很多网络设备的API。在这篇文章中,我们将介绍Nornir框架的基本用法和一些常见的例子。 安装你可以通过以下命令安装Nornir框架:pip install nornir 用法以下是一个简单的Nornir代码示例,它打印出了一个主机列表:from n...

Nornir是一个基于Python的自动化编排框架,旨在简化网络自动化的任务。它提供了一些基本的操作,例如SSH,Telnet,HTTP,以及很多网络设备的API。在这篇文章中,我们将介绍Nornir框架的基本用法和一些常见的例子。

安装

你可以通过以下命令安装Nornir框架:

pip install nornir

用法

以下是一个简单的Nornir代码示例,它打印出了一个主机列表:

from nornir import InitNornir

nr = InitNornir(config_file="config.yaml")

for host in nr.inventory.hosts.values():
    print(host)

你需要提供一个配置文件,它将告诉Nornir框架如何连接你的网络设备。以下是一个示例配置文件:

inventory:
    plugin: SimpleInventory
    options:
        host_file: "hosts.yaml"
        group_file: "groups.yaml"

credentials:
    napalm:
        username: "admin"
        password: "admin"

runner:
    plugin: threaded
    options:
        num_workers: 20

inventory 部分告诉Nornir如何读取你的主机清单和组清单。在这个例子中,我们使用了一个简单的清单插件,它使用一个YAML格式的文件来定义主机和组。

credentials 部分告诉Nornir如何连接到设备。在这个例子中,我们使用了napalm插件来连接设备,因此我们需要提供napalm插件需要的用户名和密码。

runner 部分告诉Nornir如何运行任务。在这个例子中,我们使用了一个线程插件来并行运行任务,并设置了20个工作线程。

例子

连接并获取设备信息

以下代码示例演示了如何使用Nornir连接设备并获取设备的信息:

from nornir import InitNornir
from nornir.plugins.tasks.networking import napalm_get

nr = InitNornir(config_file="config.yaml")

result = nr.run(task=napalm_get, getters=["interfaces", "facts"])

for host, r in result.items():
    print(f"Host: {host}")
    print(f"Interfaces: {r[0].result['interfaces']}")
    print(f"Facts: {r[1].result['facts']}")

在这个例子中,我们使用了napalm_get任务来获取设备的接口和基本信息。

Nornir支持异步任务执行,使用asyncio库实现。通过asyncio库,我们可以使用协程并发执行任务,提高执行效率。

下面是一个使用异步任务执行的示例代码:

import asyncio
from nornir import InitNornir


async def task1(task):
    print(f"Task {task.task_id} starting")
    await asyncio.sleep(2)
    print(f"Task {task.task_id} ending")


async def main():
    nr = InitNornir(config_file="config.yaml")
    tasks = [task1 for host in nr.inventory.hosts.values()]
    await asyncio.gather(*tasks)


if __name__ == "__main__":
    asyncio.run(main())

在上面的示例中,我们首先定义了一个异步任务task1,在任务中打印任务ID,然后等待2秒钟,最后再次打印任务ID。然后我们定义了一个主函数main,在函数中初始化Nornir,并使用异步任务执行多个task1任务。最后,在主程序中使用asyncio.run方法运行主函数。

在上面的代码中,我们使用asyncio.gather方法来并发执行所有任务。asyncio.gather方法接受多个协程作为参数,然后并发执行这些协程,并等待它们全部执行完成。

总结

本文介绍了Python Nornir框架的基本用法和示例代码,包括初始化Nornir、执行任务、使用组、使用过滤器、使用动态数据、使用自定义插件、使用SSH、Telnet、Netmiko等插件、使用异步执行任务等。通过本文的介绍,读者可以了解到如何使用Nornir框架进行自动化网络管理和配置,以及如何通过Nornir插件和自定义插件扩展框架的功能。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。