ロール/プロファイルパターンを使用しています。以下の例では、オプションでhieraからパラメーターを渡して、値が指定されていない場合に:: Apacheクラスのデフォルトが使用されるようにします(:: Apache :: paramsクラスから内部的に取得します)。これにより、一部のサーバーでキープアライブ値を設定できますが、設定しない場合は:: 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」に設定しようとしましたが、構成に空の値が表示されてしまいます。
この効果は、 自動パラメータルックアップ によって実現されます。
Hieraデータは、Apacheプロファイルではなく、actualApacheモジュールを対象としています。
Apache::keepalive: true
これは、class Apache
に$keepalive
パラメーターがある場合にのみ機能します。
はい、これのデフォルトはApache::params
から取得する必要があります。
class Apache($keepalive = $::Apache::params::keepalive)
inherits ::Apache::params {
...
}
私は個人的に、すべての変数を明示的に宣言することを好みます。この場合、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,
}
}
}