「python自动化运维」之自动生成配置文件并上传到目标服务器指定的位置
2013-09-05 19:22
936 查看
记得2年前,为了实现自动化运维,我研究过puppet和func,在实际应用中,puppet中完全没用到,func只用在一个后端语言为php的网页游戏中,执行一些批量重启php的操作,2年后再想想,其实自动化运维完全不必这想麻烦,完全可以自己搞一套,与puppet、func一类的相比还有以下一些好处:
轻量级,不用在每台中都部署臃肿的puppet和Func的agent
更贴近业务,比如对于游戏服务器运维,可以精确到每台机器中每个应用的自动化配置与管理
可以与Django或tornado接合,做成资产管理、业务管理、监控系统等,完全通过WEB的方式进行运维管理
不受puppet和func牵制,更直接、高效地解决问题
我们常用puppet来做安装一些rpm包、修改配置的操作,在用之前还要部署个puppet-server,每台客户端上还要安装agent,然后配置,颁发证书,配置不当后的排错,然后写puppet脚本、调试等等,光是维护puppet非常繁琐。
==========================以下为正文================================
python有paramiko和fabric 2个库可以通过ssh对远程服务器进行管理,比如上传、下载文件、执行系统命令等。(这些功能是不是可以取代蹩脚的func了?)
puppet的最大的亮点就是可以修改配置文件吧?其实python可以很容易地实现,python有很多模板库,比如Jinja2、mako及tornado、Django等web框架中自带的,用模板来生成一个配置文件可能有些大材小用了。
用模板动态生成配置文件功能 + 文件上传功能也能实现puppet的文件配置修改功能,而且我们的更轻量级,定制更方便灵活。
以下为一个生成配置文件并上传至指定位置的demo:
轻量级,不用在每台中都部署臃肿的puppet和Func的agent
更贴近业务,比如对于游戏服务器运维,可以精确到每台机器中每个应用的自动化配置与管理
可以与Django或tornado接合,做成资产管理、业务管理、监控系统等,完全通过WEB的方式进行运维管理
不受puppet和func牵制,更直接、高效地解决问题
我们常用puppet来做安装一些rpm包、修改配置的操作,在用之前还要部署个puppet-server,每台客户端上还要安装agent,然后配置,颁发证书,配置不当后的排错,然后写puppet脚本、调试等等,光是维护puppet非常繁琐。
==========================以下为正文================================
python有paramiko和fabric 2个库可以通过ssh对远程服务器进行管理,比如上传、下载文件、执行系统命令等。(这些功能是不是可以取代蹩脚的func了?)
puppet的最大的亮点就是可以修改配置文件吧?其实python可以很容易地实现,python有很多模板库,比如Jinja2、mako及tornado、Django等web框架中自带的,用模板来生成一个配置文件可能有些大材小用了。
用模板动态生成配置文件功能 + 文件上传功能也能实现puppet的文件配置修改功能,而且我们的更轻量级,定制更方便灵活。
以下为一个生成配置文件并上传至指定位置的demo:
# -*- coding:utf8 -*- import paramiko from tornado import template import os #全部变量,指定配置文件的模板为当前目录下的templates文件 template_path=os.path.join(os.path.dirname(__file__), "templates") #远程执行命令 def execute(server, port, username, password, shellcmd): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(server, port, username, password) stdin, stdout, stderr = ssh.exec_command(shellcmd) ssh.close() return stdout.readlines() #上传文件 def upload(server, port, username, password, localfile, remotefile): t = paramiko.Transport((server, port)) t.connect(username = username, password = password) sftp = paramiko.SFTPClient.from_transport(t) remotepath = remotefile localpath = localfile ret = sftp.put(localpath, remotepath) t.close() return ret #下载文件 def download(server, port, username, password, remotefile, localfile): t = paramiko.Transport((server, port)) t.connect(username = username, password = password) sftp = paramiko.SFTPClient.from_transport(t) remotepath = remotefile localpath = localfile ret = sftp.get(remotepath, localpath) t.close() return ret #生成配置文件内容 def genconfigstring(configtemplate, configvalues): global template_path loader = template.Loader(template_path) ret = loader.load(configtemplate).generate(**configvalues) #print ret return ret def genconfigfile(configfile, configtemplate, configvalues): configstring = genconfigstring(configtemplate, dianing_nginx) fp_config = open(configfile, 'w') fp_config.write(configstring ) fp_config.close() if __name__ == "__main__": #配置项 dianing_nginx = { 'user' : 'www', 'group' : 'www', 'keepalive_timeout' : '3', 'access_log' : '/data1/logs/access.log', 'server_name' : 'www.dianying.at v.dianying.at', 'www_root' : '/data/dianying/wwwroot/', } config_file = "test.nginx" #要生成的配置文件名 genconfigfile(config_file, "nginx.template", dianing_nginx) #生成配置文件 #上传配置文件至/root/nginx/目录下 upload('192.168.100.200', 22, 'root', 'password', config_file, "/root/nginx/" + config_file) #从/root/nginx/下载配置文件test.nginx至本地的/tmp目录并保存为.bak文件 download('192.168.100.200', 22, 'root', 'password', "/root/nginx/" + config_file, "/tmp/" + config_file + ".bak")
相关文章推荐
- 「python自动化运维」之自动生成配置文件并上传到目标服务器指定的位置
- [自动运维]ant脚本打包,上传文件到指定服务器,并部署
- PSFTP自动登录SFTP服务器,上传指定文件...
- 自动打包日志文件并上传到ftp指定位置脚本
- Python运维自动化--nginx配置文件对比
- 自动写入文件上传到指定服务器SoftwareMeteringCLS.vbs源码
- 微信小程序业务域名配置:校验文件验证失败,请下载校验文件,上传到服务器指定的目录
- python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏。 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小
- 运维自动化之Python 实现自动配置raid 级别
- 利用Windows Service,定时监控某一目录,发现新文件后自动上传到指定web服务器
- tomcat图片上传指定位置并显示(修改配置文件)
- centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课
- Python运维自动化之nginx配置文件对比操作示例
- eXtremeDB在VS中配置,自动由mco文件生成数据库API(vs中指定文件的编译器)
- Python自动化 - Windows开发环境下提取修改过的文件并压缩上传到指定的FTP
- Python使用闭包结合配置自动生成函数
- intellij配置hibernate自动生成hbm.xml文件
- 使用fileupload实现文件上传,并自动生成不同的文件夹
- 实现core文件自动生成配置文件的方法
- Hibernate学习笔记(1)----用Ant与XDoclet自动生成Hibernate配置文件与映射文件