可以選擇使用 hiera 將參數傳遞給 puppet

可以選擇使用 hiera 將參數傳遞給 puppet

我們正在使用角色/設定檔模式。在下面的範例中,我想選擇從 hiera 傳遞一個參數,以便如果未提供值,則使用 ::apache 類別預設值(它從其 ::apache::params 類別內部取得)。這將使我們能夠在某些伺服器上設定 keepalive 值,但在我們不這樣做時允許 ::apache 類別自行確定該值。

common.yaml
-----------
profiles::apache::keepalive               : On
profiles::apache::keepalive_timeout       : 5


apache.pp
---------
class profiles::apache {

  $apache_keepalive              = hiera('profiles::apache::keepalive')
  $apache_keepalive_timeout      = hiera('profiles::apache::keepalive_timeout')

  class {'::apache':
    keepalive              => $apache_keepalive,
    keepalive_timeout      => $apache_keepalive_timeout,
  }

}

我嘗試將 hiera 查找的預設值設為“undef”,但最終我在配置中得到了空值。

答案1

您可以透過以下方式實現此效果自動參數查找

您的 Hiera 資料目標是實際的apache 模組,而不是您的 apache 設定檔。

apache::keepalive: true

僅當class apache$keepalive參數時才有效。

是的,預設值應該取自apache::params.

class apache($keepalive = $::apache::params::keepalive)
    inherits ::apache::params { 
        ...
}

答案2

我個人更喜歡顯式聲明所有變數。在這種情況下,我將聲明預設值common.yaml,然後使用其他 yaml 檔案來聲明與預設值不同的值,例如

common.yaml
-----------
profiles::apache::keepalive               : On
profiles::apache::keepalive_timeout       : 5

servertype.yaml
---------------
profiles::apache::keepalive               : On
profiles::apache::keepalive_timeout       : 30

然後將層次結構設定為hiera.yaml

:hierarchy: - servertype.yaml
            - common.yaml

如果您不想這樣做,那麼我認為唯一的其他方法是使用 if 語句

apache.pp
---------
class profiles::apache {

  $apache_keepalive              = hiera('profiles::apache::keepalive')
  $apache_keepalive_timeout      = hiera('profiles::apache::keepalive_timeout')

  if ($apache_keepalive == undef) {
    class {'::apache': }
  }
  else {
    class {'::apache':
      keepalive              => $apache_keepalive,
      keepalive_timeout      => $apache_keepalive_timeout,
    }
  }

}

相關內容