使用jinja2生成配置文件
来源:互联网 发布:海贼王888 知乎 编辑:程序博客网 时间:2024/05/22 08:08
经常会遇到开新服的时候需要修改好多配置文件的情况,刚开始做运维的时候只知道傻傻地手动修改,很痛苦不说还经常会出错误。后来学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, FileSystemLoaderimport ConfigParserimport os, sysreload(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.20mysql_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 0
- 使用jinja2生成配置文件
- [Jinja2]基本使用
- jinja2
- jinja2
- Jinja2
- jinja2
- Flask中的Jinja2模板使用
- 使用MAVEN动态生成配置文件
- web.py中使用Jinja2问题汇总
- Jinja2模版语言自定义filter的使用
- [Webpy]在webpy中使用jinja2模板
- 在django中使用jinja2模版引擎
- flask中jinja2设置使用全局变量
- 如何使用PHP生成动态配置文件
- java使用Properties类生成配置文件
- 使用boost property_tree 生成XML配置文件
- 使用mybatis生成配置文件bean、xml、dao
- 使用generator自动生成Mybatis映射配置文件
- 探寻C++最快的读取文件的方案(转)
- jquery JSON的解析方式
- 利用ssrf 掩盖自己的ip地址,从而攻击其他网站
- iOS面试题非技术面试(四)
- 一些常用的工具类方法
- 使用jinja2生成配置文件
- view视图
- android 瀑布流照片墙
- 使用Auto-Scaling服务在Bluemix平台构建可自动伸缩的应用
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- html5+css3
- UITableView跳转的另类写法
- sencha touch 2.3 自定义图标字体
- iOS面试题非技术面试(五)