
この質問をどのように表現したらよいかわかりませんので、不適切と思われる場合は編集を提案してください。
既存の 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.pp
RedHat ファミリー用と新しいファミリー用で、正しいクラスはまたはinstall_otheros.pp
から含めます)。init.pp
params.pp