「python自动化运维」之自动生成配置文件并上传到目标服务器指定的位置

记得2年前,为了实现自动化运维,我研究过puppet和func,在实际应用中,puppet中完全没用到,func只用在一个后端语言为php的网页游戏中,执行一些批量重启php的操作,2年后再想想,其实自动化运维完全不必这想麻烦,完全可以自己搞一套,与puppet、func一类的相比还有以下一些好处:

  1. 轻量级,不用在每台中都部署臃肿的puppet和Func的agent
  2. 更贴近业务,比如对于游戏服务器运维,可以精确到每台机器中每个应用的自动化配置与管理
  3. 可以与Django或tornado接合,做成资产管理、业务管理、监控系统等,完全通过WEB的方式进行运维管理
  4. 不受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")





    

 

转载于:https://www.cnblogs.com/awakenjoys/p/3304112.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值