使用jinja2生成配置文件

经常会遇到开新服的时候需要修改好多配置文件的情况,刚开始做运维的时候只知道傻傻地手动修改,很痛苦不说还经常会出错误。后来学Django的时候就想到,要是像模板生成页面一样生成配置文件不就好了么,于是我找到了jinja 。
这里使用了jinja2最基本的功能,将配置文件中要修改的部分用“{{ var_name }}”这种形式替换掉,再把var_name和值统一写到ini/yml/json等格式的配置文件中,运行脚本就可以一次渲染生成n个配置文件

jinja2的python api参考 jinjia2官网

安装jinja2:

pip install jinja2

渲染配置文件模板的Python脚本(render_tpl.py):

#! /usr/bin/python
# -*- coding: utf-8 -*-
from jinja2 import Environment, FileSystemLoader
import ConfigParser
import os, sys
reload(sys)
sys.setdefaultencoding('utf-8')

tamplate_dir = './tpl'
output_dir = './output/'
config_file = "server_config.ini"

#判断文件夹是否存在,不存在则创建
def chk_mkdir(dirname):
    if not os.path.isdir(dirname):
        os.makedirs(dirname)

#从ini文件中读取配置
def load_config(server_name):
    cf = ConfigParser.ConfigParser()
    cf.read(config_file)
    values = cf.items(server_name)
    return values

#用jinja渲染模板生成最终配置文件的主函数
def render_to_file(server_name):
    env = Environment(loader = FileSystemLoader(tamplate_dir))
    tpl_list = os.listdir(tamplate_dir)
    # 渲染tpl目录下的所有模板
    for t in tpl_list:
        tpl = env.get_template(t)
        info = load_config(server_name)
        output = tpl.render(info)
        with open(output_dir + t, 'w') as out:
            out.write(output)


if __name__ == "__main__":
    server_name = sys.argv[1]
    chk_mkdir(output_dir)
    render_to_file(server_name)

下面以Django的settings.py配置文件的生成为例介绍使用方法:

server_config.ini 内容类似于下面:

[Server3]
mysql_ip = 192.168.1.20
mysql_db_name = 'db_test'
msyql_user = 'test'
mysql_pwd = 'test'

配置文件的模版放在./tpl目录中,内容类似于下面:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': {{ mysql_db_name }},
        'USER': {{ msyql_user }},
        'PASSWORD': {{ mysql_pwd }},
        'HOST': '{{ mysql_ip }}',
        'PORT': '3306',
    }
}

运行./render_tpl.py Server3,会在当前目录下生成一个output目录,里面渲染好的配置文件内容如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "db_test",
        'USER': "test",
        'PASSWORD': "test",
        'HOST': '192.168.1.20',
        'PORT': '3306',
    }
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值