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