预部署配置分析器/生成器
prep的Python项目详细描述
prep是一个预部署配置生成器,通过解析模板工作 使用简单语法的文件。变量以级联方式加载,因此 您可以基于预期的网络区域(例如 dev或prod),或特定的主机名或子网(例如www、www.prod, www.prod.example.com)。
概述
当我开始用python开发大型web应用程序时,我找不到 一个简单的配置生成器,它没有绑定到更大的系统(例如 或者不是为一个明显不同的平台(例如 卡皮斯特拉诺)。
我有以下目标:
- 简单的一行命令,可以将应用程序的每个部分重新配置为 我选择的部署环境(特别是:dev、qa、staging、production)。
- 支持多个应用程序(几个wsgi应用程序、nginx、gearman作业, 弹性搜索)
- 不干扰当前部署系统(rsync)或更高版本 我最终选择使用的健壮的。
我认为预科课程符合这些要求,尽管它也有很大的改进空间。
用法
有关正常工作的安装,请参见附带的示例文件:
cd /path/to/prep/sample/ prep --dev
或者,可以使用长格式,并指定目录名 手动:
prep --mode=production /path/to/prep/sample/
运行prep时,它会扫描整个指定目录树中名为 prep.cfg。这些是标准的python configparser文件(如windows ini) 包含下面描述的指令。
准备.cfg
- 准备
- 指令来控制prep应如何呈现此目录的模板。
- 目前,这只包括所需的template = simple。 最终会有更多的选择,甚至可能还有其他模板 正在分析引擎。
- 变量
- 这些是将被注入到模板文件中的变量。
- 所有值都是字符串
- 文件
- 要处理的文件列表,指定为source path = destination path
- 相对路径名将与prep.cfg相关,但欢迎使用 使用绝对路径名。
- 预
- 本节中的项目在prep接触任何文件之前进行处理
- 当前支持以下命令:
- 运行(或run.name1、run.name2,…)
- set.name(运行shell命令并将var name设置为其输出)
- 对于基本结构,类似python repr()数据的值将是 这样解释(例如['item1','item2']将被解释为 列表对象)。
- 发布
- 与上面的pre相同,但在文件处理之后运行
在文件、pre和post中允许模板插值,因此 可以使用命令的输出设置包含 密码值,或将生成的文件发送到特定于环境的目录 名字。
除了prep,您还可以创建特定于模式、主机和用户的 每个指令的变体,它将重写公共配置选项 使用您提供的条件:
[vars] var1 = val1 var2 = val2 var3 = val3 [vars:mode=dev] var1 = dev-val1 [vars:host=www] var2 = www-val2 [vars:user=root] var3 = root-val3
有关一组工作示例,请参见sample/directory。
简单的模板语法
在这个简单的语法中,你只能做三件事。它们列在下面 按操作顺序。你可以根据需要混合搭配。
基本逻辑
正反匹配模式或主机:
##if:mode=dev## This content will only exist in the final file if prep was invoked with --mode=dev ##endif## ##if:host!=www## This content will only exist in the final file if prep was invoked on a host not named www ##endif## This other content will always be in the final file.
对不起,还没有else子句。
包括
我包含了一个基本的include命令。它首先查找文件名 与请求包含的文件相同的目录,在 包含当前正在操作的prep.cfg文件的目录。:
##inc:logging.inc##
变量
这个系统的全部功能是将变量解析为配置文件:
[myapp] domain = ##domain## port = ##port##
除了prep.cfg文件中定义的变量外,prep还提供 以下变量:
- 根
- 包含prep.cfg的目录的绝对路径名
- 用户
- $当前shell环境中的用户
- 时间
- 当前Unix纪元时间戳。
prep还将包括命令行上提供的任何–variable=value对 当它被调用时。这些命令行参数将覆盖任何值 来自prep.cfg。