我使用 Puppet 生成/etc/exim4.conf
,我想在生产系统上安装文件之前确保配置有效。
我考虑过——
使用 git hook 来调用
exim4 -bV -C filename
... 但这不起作用,因为我使用 ERB 模板来生成文件,所以在 Puppet 代理运行之前不会真正生成最终结果。我已经有一个 git 钩子来测试 ERB 语法。让初始化脚本检查配置文件......但这还不够好,因为如果配置无效,脚本将拒绝重新加载 Exim,但文件已经安装并直接调用 Exim(发送邮件例如,来自应用程序)将失败。
理想情况下,我想要的是某种 Puppet 指令,看起来像
file { '/etc/exim4/exim4.conf':
content => template("exim/etc/exim4/exim4.conf.erb"),
notify => Service[exim4],
but_before_we_install_check_syntax_with => '/usr/bin/exim4 -bV -C',
}
如何在 Puppet 生成配置文件之后但在安装之前检查配置文件的语法?
我在 Debian Wheezy 系统上使用 Exim 4.80 和 Puppet 2.7.26。
听起来您正在
validate_cmd
准确地描述参数。来自Puppet 类型参考file
:在您的示例中,我认为您会这样做:
您可以通过使用 git 挂钩来启动虚拟机/容器(Docker 非常适合)并在该环境中应用清单来测试生成的配置。
如果您经常这样做,您可能会考虑实施一个 CI 系统(如Jenkins),将您的更改推送到该系统,让 CI 运行一套测试,并在成功后将更改推送到生产环境。
我可能只创建三个相互依赖的任务:-
有没有理由在这种情况下不起作用?