编程狗
编程大牛技术分享平台
batch_ops是一个用Python实现的跨平台批量运维小工具。通过它可以执行远程命令/上传下载文件。它基于yaml配置文件可灵活指定操作单位:host(s)或hostgroup(s);基于多线程可实现多主机并行;基于docopt提供详细的命令行界面。
特点:
完善的命令行提示,比较优雅的输出
基于yaml的配置文件,实现灵活的对主机或主机组的操作
支持多线程并发执行
批量执行支持忽略某个(些)节点的错误
传输文件实现了类似rsync的机制
跨平台,支持Linux和Windows
依赖和实现思路:
包依赖:docopt(0.6.2),paramiko(2.4.0),pyyaml(3.12)
将主机组以及主机(格式 name:ip:port)信息写进yaml配置文件,以便灵活选取操作目标
paramiko 模块实现远程命令和sftp客户端功能。
要同时支持并行和串行:抽象出多线程模型,将串行视为多线程中只有一个线程的特例,解决多线程输出乱序问题
文件传输功能:由于ssh的sftp子系统只支持单个文件传输,所以需要以递归思想传输目录;尽量减少无谓通信;基于两端文件的mtime和size判断是否需要传输
当过程遇到错误时,发送信号给主线程,对于还未开启的线程,则不再开启;对于以开启的线程,等待其完成(这里以任何一种方式将其杀死,都不好阻止其在远程已经开使的命令)
使用说明
帮助信息:
批量执行远程命令: 以主机组为单位批量执行远程命令
上例也可以主机为单位批量执行
也可以通过--parallel参数实现并发执行
也可通过--skip-err参数忽略批量执行中的错误
关于--skip-err: 不提供此参数时 串行情况下:遇到错误便退出,不会继续在后续的主机上执行命令 并行情况下:对于还未开启的线程(一个线程对应一个主机),则不再开启;对于以开启的线程,等待其完成(或报错)
上传:
下载:
希望能对大家有所帮助。
本文作者
jkklee,6年运维老司机一枚,擅长高并发及复杂场景下的故障排查和性能优化。目前比较侧重于将自己的运维积累转化成通用易用的各种工具,希望能帮到更多的运维同胞。
本文项目GitHub地址,欢迎star和fork:
https://github.com/jkklee/ops-batch
领取专属 10元无门槛券
私享最新 技术干货