Nornir是一個基于Python的自動化編排框架,旨在簡化網(wǎng)絡(luò)自動化的任務(wù)。它提供了一些基本的操作,例如SSH,Telnet,HTTP,以及很多網(wǎng)絡(luò)設(shè)備的API。在這篇文章中,我們將介紹Nornir框架的基本用法和一些常見的例子。
安裝
你可以通過以下命令安裝Nornir框架:
pipinstallnornir
用法
以下是一個簡單的Nornir代碼示例,它打印出了一個主機列表:
fromnornirimportInitNornir nr=InitNornir(config_file="config.yaml") forhostinnr.inventory.hosts.values(): print(host)
你需要提供一個配置文件,它將告訴Nornir框架如何連接你的網(wǎng)絡(luò)設(shè)備。以下是一個示例配置文件:
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如何連接到設(shè)備。在這個例子中,我們使用了napalm插件來連接設(shè)備,因此我們需要提供napalm插件需要的用戶名和密碼。
runner 部分告訴Nornir如何運行任務(wù)。在這個例子中,我們使用了一個線程插件來并行運行任務(wù),并設(shè)置了20個工作線程。
例子
連接并獲取設(shè)備信息
以下代碼示例演示了如何使用Nornir連接設(shè)備并獲取設(shè)備的信息:
fromnornirimportInitNornir fromnornir.plugins.tasks.networkingimportnapalm_get nr=InitNornir(config_file="config.yaml") result=nr.run(task=napalm_get,getters=["interfaces","facts"]) forhost,rinresult.items(): print(f"Host:{host}") print(f"Interfaces:{r[0].result['interfaces']}") print(f"Facts:{r[1].result['facts']}")
在這個例子中,我們使用了napalm_get任務(wù)來獲取設(shè)備的接口和基本信息。
Nornir支持異步任務(wù)執(zhí)行,使用asyncio庫實現(xiàn)。通過asyncio庫,我們可以使用協(xié)程并發(fā)執(zhí)行任務(wù),提高執(zhí)行效率。
下面是一個使用異步任務(wù)執(zhí)行的示例代碼:
importasyncio fromnornirimportInitNornir asyncdeftask1(task): print(f"Task{task.task_id}starting") awaitasyncio.sleep(2) print(f"Task{task.task_id}ending") asyncdefmain(): nr=InitNornir(config_file="config.yaml") tasks=[task1forhostinnr.inventory.hosts.values()] awaitasyncio.gather(*tasks) if__name__=="__main__": asyncio.run(main())
在上面的示例中,我們首先定義了一個異步任務(wù)task1,在任務(wù)中打印任務(wù)ID,然后等待2秒鐘,最后再次打印任務(wù)ID。然后我們定義了一個主函數(shù)main,在函數(shù)中初始化Nornir,并使用異步任務(wù)執(zhí)行多個task1任務(wù)。最后,在主程序中使用asyncio.run方法運行主函數(shù)。
在上面的代碼中,我們使用asyncio.gather方法來并發(fā)執(zhí)行所有任務(wù)。asyncio.gather方法接受多個協(xié)程作為參數(shù),然后并發(fā)執(zhí)行這些協(xié)程,并等待它們?nèi)繄?zhí)行完成。
總結(jié)
本文介紹了Python Nornir框架的基本用法和示例代碼,包括初始化Nornir、執(zhí)行任務(wù)、使用組、使用過濾器、使用動態(tài)數(shù)據(jù)、使用自定義插件、使用SSH、Telnet、Netmiko等插件、使用異步執(zhí)行任務(wù)等。通過本文的介紹,讀者可以了解到如何使用Nornir框架進行自動化網(wǎng)絡(luò)管理和配置,以及如何通過Nornir插件和自定義插件擴展框架的功能。
審核編輯:湯梓紅
-
API
+關(guān)注
關(guān)注
2文章
1463瀏覽量
61670 -
HTTP
+關(guān)注
關(guān)注
0文章
495瀏覽量
30892 -
自動化
+關(guān)注
關(guān)注
28文章
5431瀏覽量
78893 -
命令
+關(guān)注
關(guān)注
5文章
663瀏覽量
21956 -
python
+關(guān)注
關(guān)注
54文章
4756瀏覽量
84283
原文標題:網(wǎng)絡(luò)工程師學Python-39-簡化網(wǎng)絡(luò)自動化任務(wù)編排框架Nornir
文章出處:【微信號:網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號:網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論