• 「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")
    
    
    
    
    
        
  • 相关阅读:
    在日本被禁止的コンプガチャ設計
    Starling常见问题解决办法
    Flixel引擎学习笔记
    SQLSERVER中修复状态为Suspect的数据库
    T4 (Text Template Transformation Toolkit)实现简单实体代码生成
    创建Linking Server in SQL SERVER 2008
    Linq to Sql 与Linq to Entities 生成的SQL Script与分页实现
    Linq to Entity 的T4 模板生成代码
    在VisualStudio2008 SP1中调试.net framework 源代码
    使用HttpModules实现Asp.net离线应用程序
  • 原文地址:https://www.cnblogs.com/awakenjoys/p/3304112.html
Copyright © 2020-2023  润新知