標籤:預設 hosts 下載 continue files 檔案名稱 環境變數 角色 use
Fabric 是一個 Python (2.5-2.7) 庫和命令列工具,用來流水線化執行 SSH 以部署應用或系統管理任務。
安裝:
pip install fabric
首先來一個入門通用demo,hello world。
檔案:hello_world.py
# coding: utf-8def hello(): print ‘Hello world!‘
運行結果:
預設尋找目前的目錄下fabfile.py檔案,若檔案名稱非fabfile.py,則需要使用-f指定檔案。
$ fab -f hello_world.py helloHello world!Done.
env(環境變數)對象說明:
env.hosts #定義目標主機,可以用IP或主機名稱表示,以python的列表形式定義。如env.hosts=[‘192.168.1.21‘,‘192.168.1.22‘]env.exclude_hosts #排除指定主機,如env.exclude_hosts=[‘192.168.1.21‘]env.user #定義使用者名稱,如env.user=‘root‘env.port #定義連接埠,預設為22,如env.port=‘22‘env.password #定義密碼,如env.password=‘123456‘env.passwords #定義多個密碼,不同主機對應不同密碼,如:env.passwords = {‘[email protected]:22‘:‘123456‘,‘[email protected]:22‘:‘654321‘}env.gateway #定義網關(中轉、Bastion Host)IP,如env.gateway=‘192.168.1.23env.roledefs #定義角色分組,比如web組合db組主機區分開來:env.roledefs = {‘webserver‘:[‘192.168.1.21‘,‘192.168.1.22‘],‘dbserver‘:[‘192.168.1.25‘,‘192.168.1.26‘]}env.deploy_release_dir #自訂全域變數,格式:env. + ‘變數名稱‘,如env.age,env.sex等
其中roledefs使用demo如下:
env.roledefs = {‘front‘:[‘192.168.1.111‘],‘api‘:[‘192.168.1.112‘]}@roles(‘front‘)def nginx_restart(): run(‘service nginx restart‘)@roles(‘front‘, ‘api‘)def uptime(): run(‘uptime‘)
常用API:
local #執行本地命令,如local(‘uname -s‘)lcd #切換本地目錄,如lcd(‘/home‘)cd #切換遠程目錄run #執行遠程命令sudo #sudo方式執行遠程命令,如sudo(‘/etc/init.d/httpd start‘)put #上次本地檔案導遠程主機,如put(‘/home/user.info‘,‘/data/user.info‘)get #從遠程主機下載檔案到本地,如:get(‘/data/user.info‘,‘/home/user.info‘)prompt #獲得使用者輸入資訊,如:prompt(‘please input user password:‘)confirm #獲得提示資訊確認,如:confirm(‘Test failed,Continue[Y/N]?‘)reboot #重啟遠程主機,如:reboot()@task #函數修飾符,標識的函數為fab可調用的,非標記對fab不可見,純商務邏輯@runs_once #函數修飾符,標識的函數只會執行一次,不受多台主機影響
Demo(demo.py):
運行命令:fab -f demo.py list
# coding: utf-8from fabric.api import *env.user = ‘root‘env.roledefs = { ‘api‘: [‘10.211.55.5:22‘], }env.passwords = { ‘[email protected]:22‘: ‘linjianfeng‘, }def list_files(): run(‘ls -l‘)@task # 使用@task對fab命令可見,其他沒有使用@task標記的函數對fab命令不可用,fab -f demo.py -l可查看開放函數@roles(‘api‘)def list(): list_files()
python fabric模組入門