ここでは、ロール/プロファイル パターンを使用しています。以下の例では、オプションで 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,
}
}
}