При желании передать параметр в кукольный с помощью hiera
Мы используем шаблон ролей / профилей. В приведенном ниже примере я хотел бы при желании передать параметр из 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", но затем я получаю пустые значения в конфигурации.
2 ответа
Вы достигаете этого эффекта с помощью автоматического поиска параметров.
Ваши данные Hiera нацелены на настоящий модуль apache, а не на ваш профиль apache.
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,
}
}
}