Puppet: 型の条件付き定義

Puppet: 型の条件付き定義

この質問をどのように表現したらよいかわかりませんので、不適切と思われる場合は編集を提案してください。

既存の Puppet モジュールを拡張して、さまざまな OS をサポートしようとしています。小さな問題が発生しましたが、どうすればうまく解決できるのかわかりません。params.ppファイルには、インストールする OS 固有のパッケージの定義があります。

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

モジュールは、全体の構成がインストールされているかどうかに依存するように記述されています$php_package_name。このモジュールを、php 用の個別の mysql パッケージがない別の OS に拡張したいので、$php_package_name変数を に設定しましたundef。これにより、puppet が をインストールしようとするという問題が発生しますPackage[undef]

これを防ぐ良い方法は何でしょうか? これまでのところ、これを false に設定し、$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,
    ...
  }
}

新しい OS へのインストールに必要なリソースが大きく異なる場合、OS 固有の処理をすべて params.pp で実行する方法は、必ずしもクリーンな結果にはならないことに注意してください。マニフェスト ファイルが条件とパラメーターの読みにくいネズミの巣に変わってしまう可能性があります。その場合は、異なる OS を別のクラスに分割することをためらわないでください (たとえば、install_el.ppRedHat ファミリー用と新しいファミリー用で、正しいクラスはまたはinstall_otheros.ppから含めます)。init.ppparams.pp

関連情報