銀狐NetDevOps-網絡工程師Python初篇(一)Netmiko抓取設備配置

簡書斷更了一段時間,因爲疫情和一些壓力較大的項目,沒太多時間照顧簡書平臺。這次回來分享和以前可能有些不同,因爲之前一直是科技自媒體的身份,所以一直以來輸出的都是科技互聯網行業的洞察、見解,從來沒分享過純技術乾貨。

但我還有另一個身份,就是一名技術人員,並且看到行業內有一些同行確實在NetDevOps方面碰到許多困難,而且都是我走過的道路,所以想專門搞一個專欄輸出技術型文章,希望可以幫到大家,並找到同路人。

以下正文:


前言:

本人在網絡行業有8年以上工作經驗,CCIE塊10年了,HCIE也5年了,目前就職於國內某知名互聯網公司。大型國企和大型互聯網公司都擁有一定的運維經驗,也能體會到相互之間的需求差異。對於前幾年大熱的SDN網絡、NetDevOps自動化運維都有真實的實戰經驗,對於行業內的尷尬處境還是有一些自己的感悟。

網絡工程師大部分編程能力較弱,這個事情2年前就是如此,也有很多同行指出了這個問題。但是2年後的今天(2020年11月份)依然如此,接觸到的就算是國內互聯網TOP大廠和頭部通信廠商的同事,擁有一定編程能力的還是佔少數。但是,隨着企業基礎設施逐漸增多,就算不談互聯網巨頭,中型企業也有成百上千的硬件設備,沒有編程能力的網工很難勝任未來的工作。

目前來看最適合網工優先學習的還是python這門語言,雖然自動化神器ansible這個工具也能用一用,但是很多廠商設備並不支持ansible,而且工具畢竟沒有語言靈活,數據中心內如果是大量H3C、銳捷、山石這些自動化能力比較滯後的廠商,只會ansible這種工具的可能就瘋掉了。

相信大家都有一樣的痛點,想要學習python這門編程語言並運用到工作中,結果發現網上python教學資料很多,和網絡運維相關的寥寥無幾。雖然近幾年搞傳統網絡培訓的也開始做python方面課程,整個課程90%的內容還是把NetDevOps知識點給你過一遍,最後10%內容給你找幾個簡單案例。學過以後你會發現很難應用到自己的企業,因爲這些培訓機構的老師其實沒有互聯網公司的實戰經驗,很多場景是想象不出來的。

所以,我希望可以通過分享我微不足道的學習過程和實戰經驗,幫助更多想要學習python提升工作效率和核心競爭力,想要踏上NetDevOps道路的人。另一方面也是爲了可以找到更多同行之人,大家一起努力讓這個行業不在那麼尷尬,當更多的人都具備自動化運維能力,整個行業應該也會有所不同。

因爲網上教python基礎的內容有很多,所以文章就不多闡述基礎內容了,數據結構、算法、進程線程協程、面向對象之類的B站、百度等都有大把資料。當然,筆者在編程方面也是初學者,內容如果有錯誤或者有不足的地方,還請各位同行指正。

1、訓練場景:Netmiko單線程抓取1臺網絡設備配置

第一個場景比較簡單,也不涉及批量操作,主要是先熟悉一下如何用python來模擬我們平時的人爲操作。

這裏有幾個步驟:

導入合適的python第三方模塊,抓取網絡設備配置一般的邏輯就是python腳本調用第三方SSH庫,然後通過SSH遠程登錄到設備上,輸入CLI命令(show run),並將配置內容打印出來。

常見的SSH第三方庫有pexpect、paramiko、netmiko,paramiko屬於給系統運維使用的,針對主機層面的跑批模塊,對於網絡設備不太友好,而netmiko是在paramiko的基礎上改造的,屬於專爲網絡運維打造的模塊,除非有些常識設備不支持netmiko,那我們只能用其他的了,正常情況下還是推薦直接使用netmiko模塊,不用太關心其他模塊。(幫助大家降低學則成本)

2、實驗環境:

操作系統:windows 10 PC機

python版本:python 3.8

網絡設備:EVE-NG模擬器(3700 Software (C3725-ADVENTERPRISEK9-M), Version 12.4(15)T14)

編輯器:vscode(pycharm、sublime均可,推薦vscode)

3、本章節整體代碼(可複製粘貼直接使用)

```

#!/usr/bin/env python

# -*- coding: UTF-8 -*-


from netmiko import ConnectHandler                                         #導入netmiko模塊

session = ConnectHandler(device_type = "cisco_ios",               #創建SSH連接,並填入相關信息

                        ip = "192.168.147.146",                                       #設備IP

                        username = "root",                                                

                        password = "root@123",

                        port = 22,

                        verbose = True

                        )


print("connected to 192.168.147.146")                                          #打印連接成功提示

config = session.send_command("show running-config")              #抓取配置引入config

print(config)                                                                                     #回顯內容,類似登錄設備show run

session.disconnect()                                                                        #最後斷開與設備的SSH連接

```

以下爲執行程序後的回顯內容,其實就和我們人工SSH登錄設備show run結果一樣


有2個點單獨說明一下:

device_type(字符串str):就是設備類型,其實就是讓netmiko知道你要連接什麼廠商什麼類型的設備,

官網可以找到支持什麼廠商、什麼系統,常見的思科、華爲、Juniper、H3C、F5、A10等都支持,系統也比較全面,比如思科:Cisco IOS-XE,Cisco IOS-XR,Cisco ASA,Cisco NX-OS等,華爲的CE系統等,有興趣的可以看下官方資料。

常用的device_type:

思科:ciscoios,cisco_nxos

華爲:huawei(CE系列交換機)

H3C:hp_comware(這個注意下,很多人不知道)

juniper:juniper_junos


除了send_command以外還有很多方法,以後我們會慢慢用到。

session.send_command() # 向設備發送命令,返回輸出(基於模式)

session.send_command_timing() # 沿通道發送命令,返回輸出(基於時序)

session.send_config_set() # 將配置命令發送到遠程設備

session.send_config_from_file() # 發送從文件加載的配置命令

session.save_config() # 保存配置

session.enable() # 輸入啓用模式

session.find_prompt() # 返回當前路由器提示符

session.commit() # 提交配置(華爲和juniper適用)

第一篇文章只是一個開端,沒有過多的python內容,也沒講解太多模塊細則,主要還是先做一個開始,讓大家有一個體會。下一章節會對netmiko進行更深一步的詳解,整體內容也會循序漸進,根據需求的遞進將簡單的代碼慢慢填充內容,個人感覺這樣更有利於學習,也是我的學習路徑。

另外還有一個問題,這些內容會在簡書和知乎同步更新,大體內容是一致的,不過簡書這邊代碼庫的功能感覺不太好用,所以很多內容我會刪減,但整個內容架構差不多的,可能邏輯性和文章觀看體驗還是有差距。未來代碼複雜了會對整體代碼進行詳細拆分和講解,如果發現簡書代碼塊確實不太友好,可能這邊就不做這一步了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章