检测编译错误

My mechanic told me, I couldn’t repair your brakes, so I made your horn louder.

— Steven Wright

通常,当出现问题时,我们会在继续运行前先停止它并修复错误。然而, 当以守护进程模式运行时,Puppet 会忽略配置清单的编译错误, 仅从缓存中应用最近一次已知可运行的版本。这个行为是由 usecacheonfailure 配置设置的, 且默认值为 true:

# puppet --genconfig |grep usecacheonfailure
  # usecacheonfailure = true

值得注意的是,当你手动执行 puppet agent --test 应用配置清单时, 这种情况不会发生:如果配置清单中有任何错误,Puppet 将提示错误并拒绝执行。 这是因为 --test 开关是如下选项的缩写:

# puppet agent --onetime --verbose --ignorecache --no-daemonize --no-usecacheonfailure

因为 usecacheonfailure 仅当 Puppet 以守护进程运行时有效, 有时你不会注意到一段时间内配置清单中的错误,因为 Puppet 会静默地运行旧版本的配置清单而不是显示出错信息。

操作步骤

如果你想改变这一行为,在 puppet.conf 中做如下设置:

    usecacheonfailure = false

工作原理

使用这种设置后,Puppet 将立即输出错误信息并拒绝运行,直至所有的配置清单均正确。