Nornir是一個(gè)基于Python的自動(dòng)化編排框架,旨在簡(jiǎn)化網(wǎng)絡(luò)自動(dòng)化的任務(wù)。它提供了一些基本的操作,例如SSH,Telnet,HTTP,以及很多網(wǎng)絡(luò)設(shè)備的API。在這篇文章中,我們將介紹Nornir框架的基本用法和一些常見(jiàn)的例子。
安裝
你可以通過(guò)以下命令安裝Nornir框架:
pipinstallnornir
用法
以下是一個(gè)簡(jiǎn)單的Nornir代碼示例,它打印出了一個(gè)主機(jī)列表:
fromnornirimportInitNornir nr=InitNornir(config_file="config.yaml") forhostinnr.inventory.hosts.values(): print(host)
你需要提供一個(gè)配置文件,它將告訴Nornir框架如何連接你的網(wǎng)絡(luò)設(shè)備。以下是一個(gè)示例配置文件:
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如何讀取你的主機(jī)清單和組清單。在這個(gè)例子中,我們使用了一個(gè)簡(jiǎn)單的清單插件,它使用一個(gè)YAML格式的文件來(lái)定義主機(jī)和組。
credentials 部分告訴Nornir如何連接到設(shè)備。在這個(gè)例子中,我們使用了napalm插件來(lái)連接設(shè)備,因此我們需要提供napalm插件需要的用戶名和密碼。
runner 部分告訴Nornir如何運(yùn)行任務(wù)。在這個(gè)例子中,我們使用了一個(gè)線程插件來(lái)并行運(yùn)行任務(wù),并設(shè)置了20個(gè)工作線程。
例子
連接并獲取設(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']}")
在這個(gè)例子中,我們使用了napalm_get任務(wù)來(lái)獲取設(shè)備的接口和基本信息。
Nornir支持異步任務(wù)執(zhí)行,使用asyncio庫(kù)實(shí)現(xiàn)。通過(guò)asyncio庫(kù),我們可以使用協(xié)程并發(fā)執(zhí)行任務(wù),提高執(zhí)行效率。
下面是一個(gè)使用異步任務(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())
在上面的示例中,我們首先定義了一個(gè)異步任務(wù)task1,在任務(wù)中打印任務(wù)ID,然后等待2秒鐘,最后再次打印任務(wù)ID。然后我們定義了一個(gè)主函數(shù)main,在函數(shù)中初始化Nornir,并使用異步任務(wù)執(zhí)行多個(gè)task1任務(wù)。最后,在主程序中使用asyncio.run方法運(yùn)行主函數(shù)。
在上面的代碼中,我們使用asyncio.gather方法來(lái)并發(fā)執(zhí)行所有任務(wù)。asyncio.gather方法接受多個(gè)協(xié)程作為參數(shù),然后并發(fā)執(zhí)行這些協(xié)程,并等待它們?nèi)繄?zhí)行完成。
總結(jié)
本文介紹了Python Nornir框架的基本用法和示例代碼,包括初始化Nornir、執(zhí)行任務(wù)、使用組、使用過(guò)濾器、使用動(dòng)態(tài)數(shù)據(jù)、使用自定義插件、使用SSH、Telnet、Netmiko等插件、使用異步執(zhí)行任務(wù)等。通過(guò)本文的介紹,讀者可以了解到如何使用Nornir框架進(jìn)行自動(dòng)化網(wǎng)絡(luò)管理和配置,以及如何通過(guò)Nornir插件和自定義插件擴(kuò)展框架的功能。
審核編輯:湯梓紅
-
API
+關(guān)注
關(guān)注
2文章
1605瀏覽量
63994 -
HTTP
+關(guān)注
關(guān)注
0文章
525瀏覽量
33487 -
自動(dòng)化
+關(guān)注
關(guān)注
29文章
5778瀏覽量
84797 -
命令
+關(guān)注
關(guān)注
5文章
737瀏覽量
22871 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86688
原文標(biāo)題:網(wǎng)絡(luò)工程師學(xué)Python-39-簡(jiǎn)化網(wǎng)絡(luò)自動(dòng)化任務(wù)編排框架Nornir
文章出處:【微信號(hào):網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號(hào):網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
自動(dòng)化測(cè)試框架思想和構(gòu)建
請(qǐng)問(wèn)數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試框架結(jié)構(gòu)是怎么構(gòu)成的?
HarmonyOS自動(dòng)化測(cè)試框架—Hypium
常用軟件測(cè)試自動(dòng)化框架
Force10推出開(kāi)放式自動(dòng)化框架方案
全面提升自動(dòng)化測(cè)試,NI TestStand 2012新模塊化框架
基于Web的自動(dòng)化測(cè)試框架的研究

讓網(wǎng)絡(luò)走向自動(dòng)化的三大原因是什么?
什么是自動(dòng)化測(cè)試框架?
常規(guī)自動(dòng)化程序框架結(jié)構(gòu)
自動(dòng)化測(cè)試框架unittes詳解
什么是自動(dòng)化測(cè)試框架
Facebook群組自動(dòng)化python – 網(wǎng)絡(luò)自動(dòng)化

操作簡(jiǎn)單:自動(dòng)化和簡(jiǎn)化SAN配置

評(píng)論