Puppet

問:如何通過 Puppet 和 Hiera 定義 Apache 模組?

  • September 4, 2018

我目前正在將 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

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