亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

內(nèi)附源碼!實現(xiàn)60臺服務(wù)器跨平臺自動化運維的Python小神器

本文由馬哥教育Python自動化實戰(zhàn)班5期學(xué)員推薦,轉(zhuǎn)載自互聯(lián)網(wǎng),作者為kaifly,內(nèi)容略經(jīng)小編改編和加工,觀點跟作者無關(guān),最后感謝作者的辛苦貢獻(xiàn)與付出。

Python是吉多·范羅蘇姆發(fā)明的一種面向?qū)ο蟮哪_本語言,可能有些人不知道面向?qū)ο蠛湍_本具體是什么意思,但是對于一個初學(xué)者來說,現(xiàn)在并不需要明白。大家都知道,當(dāng)下全棧工程師的概念很火,而Python是一種全棧的開發(fā)語言,所以你如果能學(xué)好Python,那么前端,后端,測試,大數(shù)據(jù)分析,爬蟲等這些工作你都能勝任。

這陣子一直在學(xué)Python,碰巧最近想把線上服務(wù)器環(huán)境做一些規(guī)范化/統(tǒng)一化,于是便萌生了用Python寫一個小工具的沖動。

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

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

經(jīng)過數(shù)次修改(最新修改日期 20170320),現(xiàn)在主要功能包括:

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

大致實現(xiàn)思路如下:

外部包依賴docopt和paramiko

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

采用了docopt提供命令行界面

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

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

實現(xiàn)了參數(shù)中原路徑和目標(biāo)路徑的自動判斷,例如傳輸目錄時不要求路徑后面加‘/’

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

全面的錯誤信息提示。對于執(zhí)行中的幾乎所有可能出現(xiàn)的錯誤,都有捕獲機(jī)制獲取并輸出

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

幫助信息:

內(nèi)附源碼!實現(xiàn)60臺服務(wù)器跨平臺自動化運維的Python小神器

批量執(zhí)行遠(yuǎn)程命令:

內(nèi)附源碼!實現(xiàn)60臺服務(wù)器跨平臺自動化運維的Python小神器

上傳:

內(nèi)附源碼!實現(xiàn)60臺服務(wù)器跨平臺自動化運維的Python小神器

下載:

內(nèi)附源碼!實現(xiàn)60臺服務(wù)器跨平臺自動化運維的Python小神器

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

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

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

OutputText類在多線程任務(wù)需要在中終端打印結(jié)果時會非常有用

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

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

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

又如用到了線程模型,更深入的了解了線程進(jìn)程相關(guān)的概念。

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

需要本Python代碼請回復(fù)關(guān)注公眾號回復(fù):Python神器

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!