內附源碼!實現60臺服務器跨平臺自動化運維的Python小神器

本文由馬哥教育Python自動化實戰班5期學員推薦,轉載自互聯網,作者為kaifly,內容略經小編改編和加工,觀點跟作者無關,最后感謝作者的辛苦貢獻與付出。

python是吉多·范羅蘇姆發明的一種面向對象的腳本語言,可能有些人不知道面向對象和腳本具體是什么意思,但是對于一個初學者來說,現在并不需要明白。大家都知道,當下全棧工程師的概念很火,而Python是一種全棧的開發語言,所以你如果能學好Python,那么前端,后端,測試,大數據分析,爬蟲等這些工作你都能勝任。

這陣子一直在學Python,碰巧最近想把線上服務器環境做一些規范化/統一化,于是便萌生了用python寫一個小工具的沖動。

就功能方面來說,基本上是在“重復造輪子”吧,但是當我用這小工具完成了30多臺服務器從系統層面到應用層面的一些規范化工作之后,覺得效果還不算那么low(高手可忽略這句話~~),這才敢拿出來跟小伙伴們分享一下。

(注:筆者所用為python版本為3.5,其他版本未經測試~~)

經過數次修改(最新修改日期 20170320),現在主要功能包括:

  1. 可批量執行遠程命令,上傳下載文件
  2. 支持多線程并發執行(對于某些耗時的命令或上傳文件,可大大減少等待時間)
  3. 嚴格模式(批量執行中若某一臺server執行錯誤則退出)和非嚴格模式
  4. 上傳下載文件實現了類似rsync的機制
  5. 完善的命令行提示
  6. 跨平臺,Linux和Windows均可

大致實現思路如下:

外部包依賴docopt和paramiko

有一個server信息文件,內容格式為 : “主機名-IP:端口”。腳本讀取此文件來決定要對哪些server進行操作(該文件內部支持#注釋掉某些server)

采用了docopt提供命令行界面

paramiko模塊實現遠程命令和sftp客戶端功能。這里paramiko的sftp實例其只包含了基本的單個文件傳輸功能;并且不保存文件相關時間信息。

paramiko 通過sftp實例傳輸文件環節,這里額外實現“保持文件時間信息”和“實現目錄傳輸”以及“實現類似rsync的傳輸機制”是要考慮很多問題和邏輯的。傳輸機制模仿rsync的默認機制,檢查文件的mtime和size,有差異才會真正傳輸。

實現了參數中原路徑和目標路徑的自動判斷,例如傳輸目錄時不要求路徑后面加‘/’

對于遠程命令(cmd),可以通過設置(–skip-err)跳過某些server的錯誤繼續執行。例如批量執行‘ls’命令,一般情況會因為某些server上不存在而報錯退出

全面的錯誤信息提示。對于執行中的幾乎所有可能出現的錯誤,都有捕獲機制獲取并輸出

下面先來看一些基本的使用截圖吧

幫助信息:

內附源碼!實現60臺服務器跨平臺自動化運維的Python小神器

批量執行遠程命令:

內附源碼!實現60臺服務器跨平臺自動化運維的Python小神器

上傳:

內附源碼!實現60臺服務器跨平臺自動化運維的Python小神器

下載:

內附源碼!實現60臺服務器跨平臺自動化運維的Python小神器

其實批量執行命令,傳輸文件在Linux上用shell也是可以很好的實現(而且ssh或rsync等也肯定比這套腳本功能點更多),但是考慮到并發執行以及在linux和win平臺的通用性,用Python來實現就有必要了。尤其是想在Win客戶端和Linux服務器之間模仿rsync機制傳輸文件時,這個腳本就能派上用場了。

另外腳本里包含了兩個有用的函數(類):

print_color()函數方便的在Linux下實現打印不同顏色的字體;

OutputText類在多線程任務需要在中終端打印結果時會非常有用

其實之所以想造這么一個輪子,一方面能鍛煉python coding,另一方面當時確實有這么一個需求。而且用自己的工具完成工作也是小有成就的(請勿拍磚~)。

另外,在開發過程中對于一些概念性的東西也都有了更深入的了解:

例如在使用paramiko模塊的過程中,又促使我深入的了解了一些ssh登陸的詳細過程。

又如用到了線程模型,更深入的了解了線程進程相關的概念。

所以作為一枚運維老司機,越來越深刻的理解到“運維”和“開發”這倆概念之間的相互促進。希望大家共勉。

需要本Python代碼請回復關注公眾號回復:Python神器

相關新聞

聯系我們

400-080-6560

在線咨詢:點擊這里給我發消息

郵件:[email protected]

工作時間:周一至周日,09:00-18:30

QR code
云南快乐10分开奖直播