预部署配置分析器/生成器

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相同,但在文件处理之后运行

文件prepost中允许模板插值,因此 可以使用命令的输出设置包含 密码值,或将生成的文件发送到特定于环境的目录 名字。

除了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。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java这算是人工智能吗?   java@OnDelete(级联)不处理双向映射(hibernate)   java我怎样才能在基元类型(int)上修复这个等式   java如何初始化PrintWriter数组?   arraylist如何使用java添加敌人   java如何处理2019年的背景地理围栏?   java是否有一个XPath表达式可用于在CDATA区域中导航XML?   Kotlin(Android Studio)中的java选项卡式活动   安卓 java。lang.IllegalArgumentException:provider=网络   广播控制流和主流的java排序   java Apache Nifi无法启动Nifi实例   java我正在尝试将内容作为字符串放入ListView   java阻止mozilla会话还原   java在春季选择引用哪个bean?