一、fabric2 模塊使用
1)fabric2 介紹
fabric2 是python的一個庫,同時也是命令行工具,使用 fabric2 模塊,可以方便的執行應用部署和系統管理等操作
fabric2 依賴於paramiko 進行ssh 交互,fabric2的設計思路是通過幾個API接口來完成所有的部署
pip install fabric2 -i "https://pypi.doubanio.com/simple/"
2)fabric2 的簡單使用
from fabric2 import Connection def deploy(): # 如果服務器配置了ssh免密碼登錄,就不需要 connect_kwargs 來指定密碼 conn = Connection("root@192.168.44.13", connect_kwargs={"password": "123456"}) conn.run("ls") with conn.cd('/home'): conn.run("mkdir testdir") with conn.cd('/home/testdir'): conn.run('mkdir aaa') conn.put('test', '/home/testdir') # 上傳文件 if __name__ == '__main__': deploy()
3)Connection 參數詳解
def __init__( self, host, # 主機 ip user=None, # 用戶名 port=None, # ssh 端口,默認 22 config=None, # 登錄配置文件 gateway=None, # 連接網關 forward_agent=None, # 是否開啟 agent forwarding connect_timeout=None, # 設置超時 connect_kwargs=None, # 設置密碼登錄 connect_kwargs={"password": "123456"} # 還是密鑰登錄 connect_kwargs={"key_filename": "/home/myuser/.ssh/id_rsa"} inline_ssh_env=None, )
4)conn對象屬性
run # 執行遠程命令,如:run('uname -a') cd # 切換遠程目錄,如:cd('/root'); with conn.cd('/root'),繼承這個狀態 put # 上傳本地文件到遠程主機,如:put('/root/test.py','/root/test.py') get # 獲取服務器上文件,如:get('/root/test.py') sudo # sudo方式執行遠程命令,如: sudo('service docker start') local # 執行本地命令,如:conn.local('ls')
二、 fabric2對多台機器使用
1)對多台機器使用時,Connection
from fabric2 import Connection for host in ('root@192.168.44.20','root@192.168.44.21','root@192.168.44.22'): result = Connection(host,connect_kwargs={'password':'123456'}).run('uname -s') print("{}: {}".format(host,result.stdout.strip()))
輸出結果
Linux root@192.168.44.20: Linux Linux root@192.168.44.21: Linux Linux root@192.168.44.22: Linux
2)對多台機器使用時,SerialGroup
from fabric2 import SerialGroup pool = SerialGroup('root@192.168.44.20','root@192.168.44.21','root@192.168.44.22',connect_kwargs={'password':'123456'}) print(pool) pool.run('uname -s') for conn in pool: conn.run('mkdir testfiles')
3)擴展,運行本地命令
import invoke invoke.run('ls')