Puppet

在部署之前檢查 puppet 生成的 exim 配置

  • April 24, 2015

我使用 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

用於在替換文件之前驗證文件語法的命令。如果 Puppet 由於新的源或內容需要重寫文件,它將首先檢查新內容的有效性。如果驗證失敗,文件資源將失敗。

此命令必須有一個完全限定的路徑,並且應該包含一個百分號 (%) 標記,它需要一個輸入文件。如果語法正確,它必須退出 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 %',
}

引用自:https://serverfault.com/questions/685265