欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何利用Fabric自動化你的任務(wù)

 更新時間:2016年10月20日 16:01:38   作者:心內(nèi)求法  
大家都知道Fabric是一個Python庫,可以通過SSH在多個host上批量執(zhí)行任務(wù)。你可以編寫任務(wù)腳本,然后通過Fabric在本地就可以使用SSH在大量遠(yuǎn)程服務(wù)器上自動運(yùn)行。這些功能非常適合應(yīng)用的自動化部署,或者執(zhí)行系統(tǒng)管理任務(wù)。本文將介紹如何利用Fabric自動化你的任務(wù)。

首先讓我們首先看一個例子。我們知道在*NIX下面,uname命令是查看系統(tǒng)的發(fā)行版。

可以寫這樣一個Fabric腳本:

from fabric.api import run
def host_type():
 run('uname -s')

將上面的腳本保存為fabfile.py,就可以通過fab命令在多個主機(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í)行過程中可能需要你輸入系統(tǒng)密碼。

安裝

如果你看到這里了,說明你開始對Fabric感興趣了。但是上述操作在你那里無法執(zhí)行,因?yàn)槟氵€沒有安裝Fabric。安裝Fabric很簡單,可以用pip或者easy_install,也可以下載原代碼安裝。

任務(wù)函數(shù)

很好,安裝Fabric并沒有難住你??赡苣阋呀?jīng)成功的執(zhí)行了前面的任務(wù),現(xiàn)在讓我們更深入一些。

Fabric中的任務(wù)就是一個python函數(shù),姑且讓我們稱之為“任務(wù)函數(shù)”。既然是python函數(shù),那么對函數(shù)的一些用法也適用于任務(wù)函數(shù)。比如傳遞參數(shù)、互相調(diào)用、返回值等等。

首先看一個傳遞參數(shù)的例子:

def hello(name="world"):
 print("Hello %s!" % name)

在執(zhí)行任務(wù)的時候,可以通過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提供的命令

前面我們見過了fabric.api模塊中的run函數(shù),其功能是在遠(yuǎn)端主機(jī)上執(zhí)行命令。fabric.api中還提供了local函數(shù),用于執(zhí)行本地(Fabric所在的主機(jī))命令。

如下:

from fabric.api import local
def lslocal():
 local('ls')

類似遠(yuǎn)端命令和本地命令,F(xiàn)abric也區(qū)分遠(yuǎn)端目錄和本地目錄。Fabric提供的對遠(yuǎn)端和本地目錄的操作分別是cd和lcd。如果你用過命令行的ftp,這很容易理解。

讓我們看一個例子:

def filepath():
 remote_dir = '/opt/xxx'
 with cd(remote_dir):
  run("touch README")

上面代碼的功能是進(jìn)入遠(yuǎn)端的/opt/xxx目錄,并創(chuàng)建一個README文件。

Fabric還提供了很多的命令,比如文件操作等。

管理服務(wù)器連接

前面的例子中,都需要在fab命令行參數(shù)中指定server。當(dāng)要管理大量服務(wù)器時很麻煩。Fabric提供了環(huán)境變量的字典env,其中就包含了hosts字典項(xiàng),可以定義需要連接的server。

如下:

from fabric.api import env, run

env.hosts = ['host1', 'host2']
def mytask():
 run('ls /var/www')

也可以為每個任務(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時,就可以為set_hosts中指定的兩個host執(zhí)行mytask任務(wù)了。如果你懶得寫函數(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)對,為每個server設(shè)置單獨(dú)的ssh密碼。

上面的host字符串采用這種格式:username@hostname:port。所以,在指定ssh密碼的同時,也就指定了ssh用戶。同密碼一樣,你也可以在env.user中指定一個默認(rèn)的用戶。如果都沒有指定,執(zhí)行fab命令時會提示你輸入密碼。

使用Fabric,你可以管理一系列host的SSH連接(包括主機(jī)名,用戶,密碼),定義一系列的任務(wù)函數(shù),然后靈活的指定在哪些host上執(zhí)行哪些任務(wù)。這非常使用于需要管理大量host的場景,比如運(yùn)維,私有云管理,應(yīng)用自動化部署等。

總結(jié)

本文只是一篇入門文檔,遠(yuǎn)沒有體現(xiàn)出Fabric的強(qiáng)大。實(shí)際上,F(xiàn)abric還包括大量的功能,比如Role的定義,遠(yuǎn)程交互及異常處理,并發(fā)執(zhí)行,文件操作等,并且不僅僅局限于命令行方式,可以在你的應(yīng)用中調(diào)用Fabric。

以上就是本文的全部內(nèi)容了,希望本文的內(nèi)容能夠引起你對Fabric的興趣,并在你的實(shí)際應(yīng)用中解決問題。如果有疑問大家可以留言交流。

相關(guān)文章

  • Tornado 多進(jìn)程實(shí)現(xiàn)分析詳解

    Tornado 多進(jìn)程實(shí)現(xiàn)分析詳解

    這篇文章主要介紹了Tornado 多進(jìn)程實(shí)現(xiàn)分析詳解,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python3.7 dataclass使用指南小結(jié)

    Python3.7 dataclass使用指南小結(jié)

    本文將帶你走進(jìn)python3.7的新特性dataclass,通過本文你將學(xué)會dataclass的使用并避免踏入某些陷阱。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Python如何識別銀行卡卡號?

    Python如何識別銀行卡卡號?

    今天給大家?guī)淼氖怯嘘P(guān)Python的相關(guān)知識,文章圍繞著Python如何識別銀行卡卡號展開,文中有非常詳細(xì)的代碼示例及介紹,需要的朋友可以參考下
    2021-06-06
  • python中幾種自動微分庫解析

    python中幾種自動微分庫解析

    這篇文章主要介紹了python中幾種自動微分庫解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • django如何設(shè)置csrf_token

    django如何設(shè)置csrf_token

    這篇文章主要介紹了django如何設(shè)置csrf_token問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python調(diào)用c++傳遞數(shù)組的實(shí)例

    python調(diào)用c++傳遞數(shù)組的實(shí)例

    今天小編就為大家分享一篇python調(diào)用c++傳遞數(shù)組的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python安裝圖文教程 Pycharm安裝教程

    Python安裝圖文教程 Pycharm安裝教程

    這篇文章主要為大家詳細(xì)介紹了Pycharm及Python安裝圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • django 利用Q對象與F對象進(jìn)行查詢的實(shí)現(xiàn)

    django 利用Q對象與F對象進(jìn)行查詢的實(shí)現(xiàn)

    這篇文章主要介紹了django 利用Q對象與F對象進(jìn)行查詢的實(shí)現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python檢測PE所啟用保護(hù)方式詳解

    Python檢測PE所啟用保護(hù)方式詳解

    Python通過pywin32模塊調(diào)用WindowsAPI接口,可以實(shí)現(xiàn)對特定進(jìn)程加載模塊的枚舉輸出并檢測該P(yáng)E程序模塊所啟用的保護(hù)方式,感興趣的可以了解一下
    2022-10-10
  • Pandas時間序列:時期(period)及其算術(shù)運(yùn)算詳解

    Pandas時間序列:時期(period)及其算術(shù)運(yùn)算詳解

    今天小編就為大家分享一篇Pandas時間序列:時期(period)及其算術(shù)運(yùn)算詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論