如何利用Fabric自動(dòng)化你的任務(wù)
首先讓我們首先看一個(gè)例子。我們知道在*NIX下面,uname命令是查看系統(tǒng)的發(fā)行版。
可以寫(xiě)這樣一個(gè)Fabric腳本:
from fabric.api import run
def host_type():
run('uname -s')
將上面的腳本保存為fabfile.py,就可以通過(guò)fab命令在多個(gè)主機(jī)上執(zhí)行host_type腳本了:
$ fab -H localhost,linuxbox host_type [localhost] run: uname -s [localhost] out: Darwin [linuxbox] run: uname -s [linuxbox] out: Linux
執(zhí)行過(guò)程中可能需要你輸入系統(tǒng)密碼。
安裝
如果你看到這里了,說(shuō)明你開(kāi)始對(duì)Fabric感興趣了。但是上述操作在你那里無(wú)法執(zhí)行,因?yàn)槟氵€沒(méi)有安裝Fabric。安裝Fabric很簡(jiǎn)單,可以用pip或者easy_install,也可以下載原代碼安裝。
任務(wù)函數(shù)
很好,安裝Fabric并沒(méi)有難住你??赡苣阋呀?jīng)成功的執(zhí)行了前面的任務(wù),現(xiàn)在讓我們更深入一些。
Fabric中的任務(wù)就是一個(gè)python函數(shù),姑且讓我們稱(chēng)之為“任務(wù)函數(shù)”。既然是python函數(shù),那么對(duì)函數(shù)的一些用法也適用于任務(wù)函數(shù)。比如傳遞參數(shù)、互相調(diào)用、返回值等等。
首先看一個(gè)傳遞參數(shù)的例子:
def hello(name="world"):
print("Hello %s!" % name)
在執(zhí)行任務(wù)的時(shí)候,可以通過(guò)fab的命令行參數(shù)為任務(wù)函數(shù)傳遞參數(shù):
$ fab hello:name=Holbrook Hello Holbrook!
組合任務(wù)的例子如下:
from fabric.api import run
def host_type():
run('uname -s')
def hello(name="world"):
print("Hello %s!" % name)
def composite(name="world"):
hello(name)
host_type()
Fabric提供的命令
前面我們見(jiàn)過(guò)了fabric.api模塊中的run函數(shù),其功能是在遠(yuǎn)端主機(jī)上執(zhí)行命令。fabric.api中還提供了local函數(shù),用于執(zhí)行本地(Fabric所在的主機(jī))命令。
如下:
from fabric.api import local
def lslocal():
local('ls')
類(lèi)似遠(yuǎn)端命令和本地命令,F(xiàn)abric也區(qū)分遠(yuǎn)端目錄和本地目錄。Fabric提供的對(duì)遠(yuǎn)端和本地目錄的操作分別是cd和lcd。如果你用過(guò)命令行的ftp,這很容易理解。
讓我們看一個(gè)例子:
def filepath():
remote_dir = '/opt/xxx'
with cd(remote_dir):
run("touch README")
上面代碼的功能是進(jìn)入遠(yuǎn)端的/opt/xxx目錄,并創(chuàng)建一個(gè)README文件。
Fabric還提供了很多的命令,比如文件操作等。
管理服務(wù)器連接
前面的例子中,都需要在fab命令行參數(shù)中指定server。當(dāng)要管理大量服務(wù)器時(shí)很麻煩。Fabric提供了環(huán)境變量的字典env,其中就包含了hosts字典項(xiàng),可以定義需要連接的server。
如下:
from fabric.api import env, run
env.hosts = ['host1', 'host2']
def mytask():
run('ls /var/www')
也可以為每個(gè)任務(wù)單獨(dú)指定要執(zhí)行該任務(wù)的host列表:
from fabric.api import env, run
def set_hosts():
env.hosts = ['host1', 'host2']
def mytask():
run('ls /var/www')
這樣執(zhí)行 fab set_hosts mytask時(shí),就可以為set_hosts中指定的兩個(gè)host執(zhí)行mytask任務(wù)了。如果你懶得寫(xiě)函數(shù),在fab命令行中指定也是一樣的:
fab mytask:hosts="host1;host2"
為了更方便的執(zhí)行批量任務(wù),F(xiàn)abric中還定義了Role,有興趣可以閱讀其官方文檔。
管理SSH密碼、用戶、端口
盡管更推薦使用SSH公鑰認(rèn)證,但是Fabric還是提供了管理密碼的機(jī)制。Fabric提供了兩層密碼。
如果你的server有相同的密碼,可以在env.password中設(shè)置默認(rèn)的密碼;如果server密碼不同,還可以在env.passwords中設(shè)置(host,password)對(duì),為每個(gè)server設(shè)置單獨(dú)的ssh密碼。
上面的host字符串采用這種格式:username@hostname:port。所以,在指定ssh密碼的同時(shí),也就指定了ssh用戶。同密碼一樣,你也可以在env.user中指定一個(gè)默認(rèn)的用戶。如果都沒(méi)有指定,執(zhí)行fab命令時(shí)會(huì)提示你輸入密碼。
使用Fabric,你可以管理一系列host的SSH連接(包括主機(jī)名,用戶,密碼),定義一系列的任務(wù)函數(shù),然后靈活的指定在哪些host上執(zhí)行哪些任務(wù)。這非常使用于需要管理大量host的場(chǎng)景,比如運(yùn)維,私有云管理,應(yīng)用自動(dòng)化部署等。
總結(jié)
本文只是一篇入門(mén)文檔,遠(yuǎn)沒(méi)有體現(xiàn)出Fabric的強(qiáng)大。實(shí)際上,F(xiàn)abric還包括大量的功能,比如Role的定義,遠(yuǎn)程交互及異常處理,并發(fā)執(zhí)行,文件操作等,并且不僅僅局限于命令行方式,可以在你的應(yīng)用中調(diào)用Fabric。
以上就是本文的全部?jī)?nèi)容了,希望本文的內(nèi)容能夠引起你對(duì)Fabric的興趣,并在你的實(shí)際應(yīng)用中解決問(wèn)題。如果有疑問(wèn)大家可以留言交流。
- python fabric實(shí)現(xiàn)遠(yuǎn)程操作和部署示例
- Python的批量遠(yuǎn)程管理和部署工具Fabric用法實(shí)例
- Python下Fabric的簡(jiǎn)單部署方法
- python fabric使用筆記
- Python的自動(dòng)化部署模塊Fabric的安裝及使用指南
- Python自動(dòng)化部署工具Fabric的簡(jiǎn)單上手指南
- Python自動(dòng)化運(yùn)維和部署項(xiàng)目工具Fabric使用實(shí)例
- 運(yùn)維管理器Fabric使用方法
- Fabric 應(yīng)用案例
- 關(guān)于Centos安裝fabric遇到的問(wèn)題和解決方法
相關(guān)文章
python subprocess pipe 實(shí)時(shí)輸出日志的操作
這篇文章主要介紹了python subprocess pipe 實(shí)時(shí)輸出日志的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
python之tensorflow手把手實(shí)例講解斑馬線識(shí)別實(shí)現(xiàn)
目前智慧城市的發(fā)展,人們生活處處有科技,比如人臉識(shí)別,智慧交通,無(wú)人駕駛等前沿的科技產(chǎn)品也都融入了人們生活中;本篇文章帶你從頭開(kāi)始實(shí)現(xiàn)斑馬線識(shí)別2021-09-09
Python調(diào)用pyttsx3實(shí)現(xiàn)離線文字轉(zhuǎn)語(yǔ)音的方式
pyttsx3是 Python 中的文本到語(yǔ)音的離線轉(zhuǎn)換庫(kù),本文給大家介紹Python調(diào)用pyttsx3實(shí)現(xiàn)離線文字轉(zhuǎn)語(yǔ)音的方式,感興趣的朋友一起看看吧2024-03-03
在python中使用requests 模擬瀏覽器發(fā)送請(qǐng)求數(shù)據(jù)的方法
今天小編就為大家分享一篇在python中使用requests 模擬瀏覽器發(fā)送請(qǐng)求數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
Python解決兩個(gè)整數(shù)相除只得到整數(shù)部分的實(shí)例
今天小編就為大家分享一篇Python解決兩個(gè)整數(shù)相除只得到整數(shù)部分的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
使用Python設(shè)置,更新和獲取Excel單元格的值
Excel工作簿作為一款廣泛使用的數(shù)據(jù)管理工具,與Python相結(jié)合,可以使得自動(dòng)化處理大量數(shù)據(jù)成為可能,本文將演示如何使用Python設(shè)置、更新以及獲取Excel文件中單元格的值,希望對(duì)大家有所幫助2024-10-10
Python 16進(jìn)制與中文相互轉(zhuǎn)換的實(shí)現(xiàn)方法
今天小編就為大家分享一篇Python 16進(jìn)制與中文相互轉(zhuǎn)換的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

