Puppet
在部署之前檢查 puppet 生成的 exim 配置
我使用 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 %', }