Puppet:類型的條件定義

Puppet:類型的條件定義

我不知道如何表達這個問題,所以如果您認為不合適,請建議編輯。

我正在嘗試擴展現有的木偶模組以支援不同的作業系統。我遇到了一個小問題,我不確定如何以優雅的方式解決它。在params.pp檔案中,有這樣的要安裝的作業系統特定軟體包的定義:

case $::osfamily {
  'RedHat': {
    $package_server = 'mariadb-server'
    $package_client = 'mariadb'
    $php_package_name = 'php-mysql'
  }
...

此模組的編寫方式使得整個配置取決於已$php_package_name安裝。我想為不同的作業系統擴展這個模組,它沒有單獨的 php mysql 包,因此我將$php_package_name變數設為undef.這帶來了一個問題,puppet 嘗試安裝Package[undef].

有什麼好的方法可以預防呢?到目前為止,我的想法是將其設為錯誤,並且$php_package_name只有火的完整定義if $php_package_name != false。也許有更好的方法?

答案1

是的,這似乎是一個合理的方法。我建議對此略有不同,添加一個新參數來確定是否應該應用package所使用的資源:$php_package_name

case $::osfamily {
  'RedHat': {
    $package_server = 'mariadb-server'
    $package_client = 'mariadb'
    $php_package_name = 'php-mysql'
    $php_package_install = true
  }
  'otherOS': {
    $package_server = 'mariadb-server'
    $package_client = 'mariadb'
    $php_package_install = false
  }
  ...

那麼資源在哪裡:

if $thismodule::params::php_package_install {
  package { $thismodule::params::php_package_name:
    ensure => present,
    ...
  }
}

請記住,如果在新作業系統上安裝所需的資源截然不同,那麼在 params.pp 中執行所有特定於作業系統的操作的方法可能不會變得更乾淨;這可能只會將您的清單檔案變成無法讀取的條件和參數的老鼠窩。在這種情況下,不要害怕將不同的作業系統分成一個單獨的類別(例如install_el.pp對於 RedHat 系列和install_otheros.pp新系列,正確的作業系統包含在init.pp或中params.pp)。

相關內容