Puppet
問:如何通過 Puppet 和 Hiera 定義 Apache 模組?
我目前正在將 Puppet 與 Foreman 1.17 和 puppetlabs/apache 3.1.0 版一起使用。所有虛擬主機都使用 .yaml 文件定義:
apache::vhost: vm12345_ssl: servername: my.example.com docroot: /home/my.example.com/web logroot: /home/my.example.com/log (... more configuration)
現在我還想通過 Hiera / yaml 文件指定所需的 Apache 模組。但我找不到任何文件或範例如何執行此操作。一個網站推薦
apache::mod::proxy: true
;我嘗試了這個以及它的變體,但無法讓它工作。我想要完成的事情:我正在使用 Puppet 角色和配置文件模式,並且我的 webapp 配置文件每個都包含以下行:
class profile::webapp::my_webapp_01 ( ... some parameters ) { include profile::java include apache apache::mod { 'proxy': } apache::mod { 'proxy_ajp': } apache::mod { 'proxy_http': } ... more webapp-specific configuration
我的節點看起來像:
node 'vm12345' { ... include profile::webapp::my_webapp_01 include profile::webapp::my_webapp_02 include profile::webapp::my_webapp_03 }
當我在每個 VM 中只包含一個 webapp 時,一切都很好,但是一旦我在 VM 中包含幾個 webapp,我就會收到“重複聲明”錯誤。我認為解決這個問題的正確方法是使用 Hiera 來指定 Apache 模組,而不是顯式地將它們定義到配置文件中。
請告知如何通過 Hiera 和 yaml 文件指定 Apache 模組,或者如果整個方法被破壞,請告知如何為 Apache 模組編寫配置文件聲明,以便可以多次包含它們。
我現在在我的個人資料文件中使用以下程式碼:
class profile::webapp::my_webapp_01 ( ... some parameters ) { include profile::java include apache include apache::mod::proxy include apache::mod::proxy_ajp include apache::mod::proxy_http ... more webapp-specific configuration
這允許在沒有“重複聲明”錯誤的情況下進行多個包含。
但是我無法弄清楚如何使用 Hiera / yaml 文件來完成此操作。可能需要一些額外的程式碼來從 yaml 文件中讀取參數,例如 hiera() 和 create_resource()。
使用角色和配置文件結構:
阿帕奇簡介:
class profile::apache { include ::apache apache::mod { 'proxy': } apache::mod { 'proxy_ajp': } apache::mod { 'proxy_http': } }
網路應用角色:
class role::webapp::my_webapp_01 { include profile::java include profile::apache }
網路伺服器節點:
node 'vm12345' { include role::webapp::my_webapp_01 }
您還可以修改 Apache 角色以獲取要創建的 mod 的參數:
class profile::apache ( Array $mods = [], ) { include ::apache apache::mod { $mods: } }
應該注意的是,您還
default_mods
可以通過 Puppet 程式碼或通過 Hiera 使用 Apache 模組的參數:木偶
class { '::apache': default_mods' => ['proxy','proxy_ajp','proxy_http'], }
希拉
--- apache::default_mods: - proxy - proxy_ajp - proxy_http