在部署之前检查木偶生成的eximconfiguration

我使用Puppet来生成/etc/exim4.conf并且在生产系统上安装文件之前,我想确保configuration是有效的。

我考虑过 –

理想情况是我想要的是某种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生成之后安装之前检查configuration文件的语法?

我在Debian Wheezy系统上使用Exim 4.80和Puppet 2.7.26。

这听起来像你正在描述validate_cmd参数。 从file的Puppettypes引用 :

replace之前用于validation文件语法的命令。 如果Puppet由于新的来源或内容需要重写文件,它将首先检查新内容的有效性。 如果validation失败,则文件资源将失败。

这个命令必须有一个完全限定的path,并且应该包含一个百分比(%)的令牌,在这个令牌中会有一个input文件。 如果语法正确,它必须退出0,否则不为零。 该命令将在目标系统上运行,而不是在puppet master上。

在你的例子中,我想你会这样做:

 file { '/etc/exim4/exim4.conf': content => template("exim/etc/exim4/exim4.conf.erb"), notify => Service[exim4], validate_cmd => '/usr/bin/exim4 -bV -C %', } 

你可以通过使用一个git钩子来启动一个虚拟机/容器(Docker将是理想的),并在这个环境中应用清单来testing结果configuration。

如果你经常这样做,你可能会考虑实施一个CI系统(比如Jenkins ),你可以把你的改变推向CI,让CI运行一套testing,并在成功的时候将改变推向生产。

我可能只是创build三个相互依赖的任务:

  • 在/ tmp中生成模板化的.conf
  • testing生成的.conf
  • 移动.conf并通知服务

在这种情况下,有没有这个原因呢?