内附源码!实现60台服务器跨平台自动化运维的Python小神器

Posted 马哥Linux运维

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内附源码!实现60台服务器跨平台自动化运维的Python小神器相关的知识,希望对你有一定的参考价值。

当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 内附源码!实现60台服务器跨平台自动化运维的Python小神器 内附源码!实现60台服务器跨平台自动化运维的Python小神器

本文由马哥教育Python自动化实战班5期学员推荐,转载自互联网,作者为kaifly,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出。


python是吉多·范罗苏姆发明的一种面向对象的脚本语言,可能有些人不知道面向对象和脚本具体是什么意思,但是对于一个初学者来说,现在并不需要明白。大家都知道,当下全栈工程师的概念很火,而Python是一种全栈的开发语言,所以你如果能学好Python,那么前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。


这阵子一直在学Python,碰巧最近想把线上服务器环境做一些规范化/统一化,于是便萌生了用python写一个小工具的冲动。

就功能方面来说,基本上是在“重复造轮子”吧,但是当我用这小工具完成了30多台服务器从系统层面到应用层面的一些规范化工作之后,觉得效果还不算那么low(高手可忽略这句话~~),这才敢拿出来跟小伙伴们分享一下。

(注:笔者所用为python版本为3.5,其他版本未经测试~~)

经过数次修改(最新修改日期 20170320),现在主要功能包括:

  1. 可批量执行远程命令,上传下载文件

  2. 支持多线程并发执行(对于某些耗时的命令或上传文件,可大大减少等待时间)

  3. 严格模式(批量执行中若某一台server执行错误则退出)和非严格模式

  4. 上传下载文件实现了类似rsync的机制

  5. 完善的命令行提示

  6. 跨平台,Linux和Windows均可

大致实现思路如下:

外部包依赖docopt和paramiko

有一个server信息文件,内容格式为 : “主机名-IP:端口”。脚本读取此文件来决定要对哪些server进行操作(该文件内部支持#注释掉某些server)

采用了docopt提供命令行界面

paramiko模块实现远程命令和sftp客户端功能。这里paramiko的sftp实例其只包含了基本的单个文件传输功能;并且不保存文件相关时间信息。

paramiko 通过sftp实例传输文件环节,这里额外实现“保持文件时间信息”和“实现目录传输”以及“实现类似rsync的传输机制”是要考虑很多问题和逻辑的。传输机制模仿rsync的默认机制,检查文件的mtime和size,有差异才会真正传输。

实现了参数中原路径和目标路径的自动判断,例如传输目录时不要求路径后面加‘/’

对于远程命令(cmd),可以通过设置(--skip-err)跳过某些server的错误继续执行。例如批量执行‘ls’命令,一般情况会因为某些server上不存在而报错退出

全面的错误信息提示。对于执行中的几乎所有可能出现的错误,都有捕获机制获取并输出

下面先来看一些基本的使用截图吧

帮助信息:

内附源码!实现60台服务器跨平台自动化运维的Python小神器


批量执行远程命令:

内附源码!实现60台服务器跨平台自动化运维的Python小神器


上传:

内附源码!实现60台服务器跨平台自动化运维的Python小神器


下载:

内附源码!实现60台服务器跨平台自动化运维的Python小神器


其实批量执行命令,传输文件在Linux上用shell也是可以很好的实现(而且ssh或rsync等也肯定比这套脚本功能点更多),但是考虑到并发执行以及在linux和win平台的通用性,用Python来实现就有必要了。尤其是想在Win客户端和Linux服务器之间模仿rsync机制传输文件时,这个脚本就能派上用场了。

另外脚本里包含了两个有用的函数(类):

print_color()函数方便的在Linux下实现打印不同颜色的字体;

OutputText类在多线程任务需要在中终端打印结果时会非常有用

其实之所以想造这么一个轮子,一方面能锻炼python coding,另一方面当时确实有这么一个需求。而且用自己的工具完成工作也是小有成就的(请勿拍砖~)。

另外,在开发过程中对于一些概念性的东西也都有了更深入的了解:

例如在使用paramiko模块的过程中,又促使我深入的了解了一些ssh登陆的详细过程。

又如用到了线程模型,更深入的了解了线程进程相关的概念。

所以作为一枚运维老司机,越来越深刻的理解到“运维”和“开发”这俩概念之间的相互促进。希望大家共勉。



————开班喜讯————


温馨提醒:马哥教育Python自动化开发班将于8月28日在北京海淀上地开班,小班制魔鬼式授课,钜惠限时抢位中。

马哥教育2017年Python自动化运维开发实战班,马哥联合BAT、豆瓣等一线互联网Python开发达人,根据目前企业需求的Python开发人才进行了深度定制,加入了大量一线互联网公司:大众点评、饿了么、腾讯等生产环境真是项目,课程由浅入深,从Python基础到Python高级,让你融汇贯通Python基础理论,手把手教学让你具备Python自动化开发需要的前端界面开发、Web框架、大监控系统、CMDB系统、认证堡垒机、自动化流程平台六大实战能力,让你从0开始蜕变成Hold住年薪20万的Python自动化开发人才

内附源码!实现60台服务器跨平台自动化运维的Python小神器



以上是关于内附源码!实现60台服务器跨平台自动化运维的Python小神器的主要内容,如果未能解决你的问题,请参考以下文章

Ansible自动化运维的安装及常用模块解释

企业应用级自动化运维的建设思路与最佳实践分享

解放运维的双手,谈自动化运维管理平台设计

Windows 自动化运维的思路或者方法是什么?

Python开源软件大全(内附源码)

自动化运维的前世今生