#################################### Fabric3 ##############################################
1.安裝
# pip install fabric3 #fabric3是支持python3的fabric
# python3
# import fabric #如果無報錯則證明安裝成功
2.常用參數
-l #顯示定義好的任務函數名
-f #指定fab入口文件,默認爲fabfile.py
-g #指定網關
-H #指定目標主機,多臺主機用逗號分隔
-P #以異步並行方式運行多主機任務,默認爲串行
-R #指定role(角色),以角色名區分不同業務組設備
-t #設置超時時間(秒)
-T #設置遠程主機命令執行超時時間(秒)
-w #當命令執行失敗,發出警告,而非默認的中止任務
3.編寫fabfile.py
fab默認使用當前目錄下的fabfile.py作爲默認文件
###文件第一行爲 from fabric.api import *
示例:
# vim fabfile.py
from fabric.api import *
host1 = '196.168.1.1'
env.hosts=[host1] #可用列表形式
env.passwords = 'password' #可用字典形式{'[email protected]:22':'password','[email protected]:22':'password'}
def hello():
print("hello world!")
def ping():
run('ping www.baidu.com')
def chdir():
cd('/usr')
run('ls')
def istrue():
with cd('/'):
run('ls')
4.全局屬性設定
env.host,定義目標主機,單目標主機
env.hosts,定義目標主機,列表類型。['192.168.1.1', '192.18.1.2',]。
env.exclude_hosts,排除指定主機。
env.user,定義用戶名。
env.port,定義目標主機端口。
env.password,定義密碼
env.passwords,字典類型,配置是需要用戶名@目標主機ip:端口:密碼,{'[email protected]:22':'password','[email protected]:22':'password'}
env.gateway,定義網關IP
env.deploy_release_dir,自定義全局變量
env.roledefs,定義角色分組,
env.roledefs = {'webserver':['host1','host2','host3']
'dbserver':['host4','host5']
}
使用角色修飾符,角色修飾符下面的任務函數爲其作用於,實例:
@roles('webserver')
def webtask():
run('uname')
@roles('dbserver')
def dbtask():
run('uname')
@roles('webserver', 'dbserver')
def publictask():
run('uname')
def deploy():
execute(webtask)
execute(dbtask)
execute(publictask)
5.常用API
local(),執行本地命令
lcd(),切換本地目錄
cd(),切換遠程目錄
run(),執行遠程命令
sudo(),sudo方式執行遠程命令
put(),上傳本地文件到遠程主機
get(),從遠程主機下載文件
prompt(),獲得用戶輸入信息
confirm(),獲得提示信息確認
reboot(),重啓遠程主機
@task,函數修飾符,表示的函數爲fab可調用,非標記對fab不可見,純業務邏輯
@runs_once,函數修飾符,表示的函數只會執行一次,不受多臺主機影響
@roles,