python模塊,自動化模塊fabric2


一、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')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM