Python开源项目推荐:跨平台批量运维小工具batch

编程狗

编程大牛技术分享平台

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180420A1JRLN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券