Мы используем шаблон ролей/профилей. В примере ниже я хотел бы опционально передать параметр из 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
Лично я предпочитаю явно объявлять все переменные. В этом случае я бы объявил значение по умолчанию on 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,
}
}
}