關於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