一、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')
posted on 2020-01-21 14:09  可口_可乐  阅读(2794)  评论(0编辑  收藏  举报