如何高效地遠端部署?自動化運維利器 Fabric 教程
關於 Python 自動化的話題,在上一篇文章中,我介紹了 Invoke 庫,它是 Fabric 的最重要元件之一。Fabric 也是一個被廣泛應用的自動化工具庫,是不得不提的自動化運維利器,所以,本文將來介紹一下它。
Fabric 主要用在應用部署與系統管理等任務的自動化,簡單輕量級,提供有豐富的 SSH 擴充套件介面。在 Fabric 1.x 版本中,它混雜了本地及遠端兩類功能;但自 Fabric 2.x 版本起,它分離出了獨立的 Invoke 庫,來處理本地的自動化任務,而 Fabric 則聚焦於遠端與網路層面的任務。
為了做到這點,Fabric 主要依賴另一大核心元件 Paramiko,它是基於 SSH 協議的遠端控制模組,Fabric 在其基礎上封裝出了更加友好的介面,可以遠端執行 Shell 命令、傳輸檔案、批量操作伺服器、身份認證、多種配置與設定代理,等等。
一、Fabric 的版本區分
Python 2 版本已經被官宣在今年元旦“退休”了,未來只會是 Python 3 的舞臺。為了適應 Python 版本的非相容性遷移,很多專案也必須推出自己的新版本(相容或只支援 Python 3),其中就包括本文的主角 Fabric。
Fabric 自身存在著 2 個大版本:Fabric 1 和 Fabric 2,而在這個庫的基礎上,還有兩個很容易混淆的相關庫:Fabric2 和 Fabric3(注意這裡的數字是庫名的一部分)。
它們的區分如下:
Fabric 1.x:支援 Python 2.5-2.7,但不支援 Python 3
Fabric 2.x:支援 Python 2.7 與 3.4+,但不相容 Fabric 1.x 的 fabfile
Fabric2:等同於 Fabric 2.x,為了使不同版本共存(裝一個 1.x 舊版本,再裝它作為新版本)
Fabric3:一個基於 Fabric 1.x 的 fork(非官方),相容 Python 2&3,相容 Fabric1.x 的 fabfile
綜上可見,我們推薦使用官方的 Fabric 2.x 系列版本,但同時要注意,某些過時的教程可能是基於早期版本的(或非官方的 Fabric3,也是基於 Fabric 1.x),需要注意識別。
例如,在 Fabric 1.x 系列中這麼寫匯入:from fabric.api import run;在新版本中將報錯:“ImportError: No module named api”(PS:可根據是否有 fabric.api 來判斷 Fabric 的版本,就像在 Python 中根據 print 語句或 print 函式來判斷版本一樣)。同時,由於新版本不支援老版本的 fabfile,在使用時就可能報錯:“No idea what 'xxx' is!”
Fabric 2 是非相容性版本,相比於前個版本,它主要改進的點有:
支援 Python 2.7 與 3.4+
執行緒安全,取消了多程式的併發實現
API 圍繞 fabric.connection.Connection 進行了重組
全面修改了命令列解析器,允許在每個任務的基礎上使用規則的 GNU/POSIX 風格的標誌和選項(不再需要 fab mytask:weird = custom,arg = format)
可以宣告前置任務與後置任務
……(官方列了10幾條 [1],本文不一一羅列)
之前介紹過的 invoke,就是在開發 Fabric 2 時被分離出來的,具體的原因可參見這個回答 [2]。總而言之,在使用 Fabric 時,應該注意版本差異的問題。
二、Fabric 的基本用法
1、安裝
首先是安裝:pip intall fabric ,安裝後,可在命令列視窗檢視版本資訊:
>>> fab -V
Fabric 2.5.0
Paramiko 2.7.1
Invoke 1.4.0
執行“fab -V”,以上結果可看出我安裝的是 Fabric 2.5.0 版本,同時可看到它的兩個核心依賴庫 Paramiko 及 Invoke 的版本資訊。
2、一個簡單的例子
Fabric 主要用於遠端任務,即要對遠端伺服器進行操作,下面是一個簡單的例子:
# 可使用任意的檔名
from fabric import Connection
host_ip = '47.xx.xx.xx' # 伺服器地址
user_name = 'root' # 伺服器使用者名稱
password = '****' # 伺服器密碼
cmd = 'date' # shell 命令,查詢伺服器上的時間
con = Connection(host_ip, user_name, connect_kwargs={'password': password})
result = con.run(cmd, hide=True)
print(result)
以上程式碼,通過賬號+密碼登入到遠端伺服器,然後執行date命令,檢視伺服器的時間,執行結果:
Command exited with status 0.
=== stdout ===
Fri Feb 14 15:33:05 CST 2020
(no stderr)
現在列印的結果中,除了伺服器時間,還有一些無關的資訊。這是因為它列印的“result”是一個"fabric.runners.Result"類,我們可以把其中的資訊解析出來
groups.tianya.cn/post-5311-f3fc8754ed0140be9531816826dde718-1.shtml
groups.tianya.cn/post-5311-acf068b966314398abe76a3598b308f6-1.shtml
groups.tianya.cn/post-5311-9c6af9c9a2754122aacdd2a762467323-1.shtml
groups.tianya.cn/post-5311-0a2c1367cf9d4c0d9955fb99866f30b0-1.shtml
groups.tianya.cn/post-5311-7012c685fa3c4dc5b571fa7e14d79080-1.shtml
groups.tianya.cn/post-5311-eb2c5e661b7f46c9808081e3544b6f78-1.shtml
groups.tianya.cn/post-5311-a6d6fada86a34a3f935ff4d5b2c351b3-1.shtml
groups.tianya.cn/post-5311-3f123ac0e7014dfdaec926343d8ffc6d-1.shtml
groups.tianya.cn/post-5311-723933acd37146e7b5e46125ffdebdf3-1.shtml
groups.tianya.cn/post-5311-1f2a87cd27b54c048bdf5e3d140136d2-1.shtml
groups.tianya.cn/post-5311-409e236db58f400ebc521ff3d114504a-1.shtml
groups.tianya.cn/post-5311-b37b909c15944fab8c5fa99e963a9d87-1.shtml
groups.tianya.cn/post-5311-a28620d8c0f4487eb24889dc4e5bfe77-1.shtml
groups.tianya.cn/post-5311-fdc61188fb4b41b78090ebebd87bd856-1.shtml
groups.tianya.cn/post-5311-3395911f8a99448ca4388975e3df1079-1.shtml
groups.tianya.cn/post-5311-f6bc803a97c94f9da9b2ba015f281fa7-1.shtml
groups.tianya.cn/post-5311-fe18cf44c1984503a87bb7694e5c3ee4-1.shtml
groups.tianya.cn/post-5311-f17dbbd754be47aab8bd9e053e59db8b-1.shtml
groups.tianya.cn/post-5311-de7989ead4744523aa3e68e21cab23a3-1.shtml
groups.tianya.cn/post-5311-2852da33f83348c88f0c5f71f918f1c3-1.shtml
groups.tianya.cn/post-5311-10c37913b2f440839e268b09a25fa094-1.shtml
groups.tianya.cn/post-5311-abe8883c27ce487e8ac8f48d42e01065-1.shtml
groups.tianya.cn/post-5311-b1adbb0ff2ce4bdbb35a6388607832e7-1.shtml
groups.tianya.cn/post-5311-61bee67dfa764a5e834498eee1936c37-1.shtml
groups.tianya.cn/post-5311-4e67686110754f5c8da2546c8b0abfc9-1.shtml
groups.tianya.cn/post-5311-8008d41fbb894275ab8d06ee5655aca7-1.shtml
groups.tianya.cn/post-5311-e05bbca7ef7f449bbc984b50c7a5301d-1.shtml
groups.tianya.cn/post-5311-c429807f103f41ef9e3e0a963d746760-1.shtml
groups.tianya.cn/post-5311-baa46d0e707748f9abf1c087f651b2b0-1.shtml
相關文章
- python學習-fabric(高效遠端自動化部署工具)Python
- Python遠端部署利器Fabric詳解Python
- Python自動化運維工具-Fabric部署及使用總結Python運維
- 介紹一個 MySQL 自動化運維利器 - InceptionMySql運維
- 自動化運維利器Ansible要點彙總運維
- Python自動化部署工具-FabricPython
- 自動化運維工具SaltStack詳細部署運維
- IT運維之自動化運維運維
- 自動化運維工具Ansible詳細部署運維
- fabric實現遠端操作和部署
- 高效前端專案自動化構建部署實踐——使用webhook鉤子運維前端WebHook運維
- 自動化運維 Expect運維
- 用自動化運維工具解放IT運維運維
- python django blog 2 : fabric 自動化部署PythonDjango
- 遠端部署神器 Fabric,支援 Python3Python
- 自動化運維 Ansible運維
- IT遠端運維是什麼意思?遠端運維軟體哪個好?運維
- 專訪鄭東雲:自動化運維時代,DBA命運如何?運維
- PLC雲閘道器助力非標自動化裝置實現遠端除錯運維除錯運維
- mysql-inception自動化運維MySql運維
- Ansible自動化運維工具運維
- 簡化IT運維工作,就要學會使用自動化運維工具!運維
- 基於 Nebula Operator 的 K8s 自動化部署運維K8S運維
- ansible自動化運維詳細教程及playbook詳解運維
- 什麼是自動化運維?為什麼選擇Python做自動化運維?運維Python
- ansible自動化運維入門運維
- 自動化運維工具之Puppet模組運維
- 自動化運維的快速演進運維
- 自動化運維的發展方向運維
- 分層運維自動化監控運維
- 裝置製造商如何實現菸草裝置的遠端監控與高效運維運維
- 指標是構築自動化運維與智慧化運維的基石指標運維
- 自動化運維,國產化信創替代方案運維
- 智慧變電站遠端監控高效運維繫統解決方案運維
- Centos7部署輕量級自動化運維工具psshCentOS運維
- 作為運維人員,如何在遠端辦公的同時保障運維效率?運維
- 論IT運維自動化的重要性運維
- 自動化運維工具Ansible介紹運維