歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Fabric:Python遠程部署工具

關於Fabric

Fabric是一個Python庫和命令行工具,旨在為應用部署和系統管理任務的SSH的流水線式操作,使之更加高效和方便。Fabric提供了一套基本的執行本地和遠程shell命令、上傳和下載文件的操作,包括一些輔助函數,例如驅動正在運行的用戶輸入或者放棄執行。

Fabric通過把大量頻繁使用的SSH操作寫入到一個腳本中(fabric.py),來遠程執行一些應用部署或者系統維護的任務。Fabric是類似paramiko的一個庫,是對paramiko的再次封裝,所以比使用paramiko更簡單。

《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Fabric的優點

1. 角色定義

2. 代碼易讀

3. 封裝了本地、遠程操作

4. 參數靈活,能偶動態指定host/role等,還有並發執行(基於multiprocessing)

5. 完整的日志輸出

安裝Fabric

Fabric的安裝很簡單,可以直接使用pip或者easy_install安裝到當前Python環境中,或者下載最新的源碼使用"python setup.py xxx"的方式來安裝:

#pip install fabric

使用Fabric

--------------------------------------------------------------------------------

1 Fabric通過命令行工具fab來執行定義在fabfile.py中的任務,常用的配置和函數如下

--------------------------------------------------------------------------------

1. 常用的fab命令選項和參數:

-l    顯示可用的task

-H    指定host,多個host用逗號分開

-R    指定role,多個role用逗號分開

-P    並分數,默認是串行

-w    warn_only,默認為遇到異常直接放棄執行並退出

-f    指定入口文件,fab默認入口文件是:fabfile/fabfile.py

 


2. fabfile.py文件中常用配置和函數:

env.host        主機ip,也可以使用fab選項-H參數來指定

env.password    SSH密碼,若已經設置好無密碼登錄,則可以忽略

env.roledefs    角色分組,如:{'web': ['x', 'y'], 'db': ['z']}

local('pwd')    執行本地命令

lcd('/tmp')        切換本地目錄

cd('/tmp')        切換遠程目錄

run('uname -s')        執行遠程命令

sudo('service httpd restart')    執行遠程sudo,注意pty選項

 


2 任務函數

--------------------------------------------------------------------------------

Fabric中的任務就是一個個Python函數,通過將上述的函數封裝到某一個函數中來執行相應的任務

示例:

#cat fabfile.py

from fabric.api import run

def host_type():

    run('uname -s')

 


def hello(name="jayzhou"):

    print("Hello %s!" % name)

 


def combine(name="jayzhou"):

    hello(name)

    host_type()

在執行任務的時候,可以通過fab的命令行參數為任務函數傳遞參數:

#fab hello:name=Rango

 


3. 管理遠程服務

--------------------------------------------------------------------------------

1. 獲取遠程服務器版本信息

#cat fabfile.py

from fabric.api import env

from fabric.api import cd


from fabric.api import run


from fabric.api import local


from fabric.api import get


from fabric.api import put

 


env.hosts = ['192.168.56.101', '192.168.56.102']

env.user = 'root'

env.password = "password"

 


def get_version():

    local('cat /etc/issue')

    run('cat /etc/issue')

    with cd('/root/'):

        put('/home/rango/test.txt', 'test.txt', mode=0755)

        get('hello_world.txt')

    run('ls')

 


def get_host_name():

    run('hostname')

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-05/101616p2.htm 

Copyright © Linux教程網 All Rights Reserved