批处理工具fabric简单教程

Python 批处理工具Fabric教程

Author: Vaedit

Time:二〇二一年二月二十日 11:03:52

1 Fabric安装

1.1 环境要求

python == 3.6

系统:Centos 等Linux发行版

1.2 官网

http://www.fabfile.org/

安装
pip install fabric==2.5

2 基础使用

2.1 示例1
from fabric import Connection
from invoke.exceptions import UnexpectedExit
ne = Connection('127.0.0.1')
# 执行命令
ne.run('uname -r')                                                      
3.10.0-957.el7.x86_64
<Result cmd='uname -r' exited=0>
# 执行命令不输出
ne.run('uname -r',hide=True)                                            
<Result cmd='uname -r' exited=0>

re=ne.run('uname -r',hide=True)  
# 查看退出状态码
re.exited                                                               
Out[6]: 0
# 是否执行成功
re.ok                                                                   
Out[9]: True
# 是否执行失败
re.failed                                                              
Out[10]: False
# 标准输出
re.stdout                                                              
Out[11]: '3.10.0-957.el7.x86_64\n'
# 错误输出
re.stderr                                                              
Out[12]: ''
# 执行的命令
re.command                                                             
Out[16]: 'uname -r'
re.connection                                                          
Out[17]: <Connection host=127.0.0.1>
# 连接的主机信息
re.connection.host                                                     
Out[18]: '127.0.0.1'

# 其他主机连接用法
Connection(host='web1', user='deploy', port=2202)
Connection('deploy@web1:2202')
2.2 示例2
# 推送文件到目标主机,可以结合模板批量生成和推送配置文件
ne.put(‘./xxx.txt’,'/tmp')
# 从目标主机下载文件到本地
ne.get('/tmp/xxx.txt','./')
# 本地执行命令
ne.local()
# 如果执行的命令有可能报错,例如创建用户时已存在或者不关心命令执行的结果,可以用warn=True防止异常自动停止执行任务
ne.run('adduser vaedit',warn=True)
2.3 示例3

主机组的使用

from fabric import ThreadingGroup as tGroup # 并发执行
from fabric import SerialGroup as sGroup # 顺序执行
from fabric import exceptions

gne = sGroup('127.0.0.1','127.0.0.1')
gne1 = tGroup('127.0.0.1','127.0.0.1')

def start(g):
    try:
        # 主机组暂时没有put和get的功能,如果要使用,则 for ne in gne: ne.put/ne.get 
        result = g.run('sh start.sh')
        for con,result in result.items():
            print(con,con.host,result.stdout,result.stderr ,result.ok,result.failed,result.exited)
            print(result.succeeded) # 返回成功的 ,可以继续遍历,for con,result in result.succeeded
            print(result.failed) # 返回失败的 for con,result in result.failed (如果warn=True,则不管任务成功与否,都全部在result.succeeded,result.failed为空)
    except exceptions.GroupException as e:
        print(e)

猜你喜欢

转载自blog.51cto.com/vaedit/2633142