Estamos usando o padrão role/profiles. No exemplo abaixo, eu gostaria de passar opcionalmente um parâmetro de hiera para que, se nenhum valor for fornecido, o padrão da classe ::apache seja usado (que ele obtém internamente de sua classe ::apache::params). Isso nos permitiria definir o valor keepalive em alguns servidores, mas permitiria que a classe ::apache determinasse o próprio valor quando não o fizermos.
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,
}
}
Tentei definir o valor padrão da pesquisa hiera como 'undef', mas acabei com valores vazios na configuração.
Responder1
Você consegue esse efeito atravéspesquisa automática de parâmetros.
Seus dados Hiera têm como alvo orealmódulo apache, não seu perfil apache.
apache::keepalive: true
Isso só funciona se class apache
tiver um $keepalive
parâmetro.
E sim, o padrão para isso deve ser apache::params
.
class apache($keepalive = $::apache::params::keepalive)
inherits ::apache::params {
...
}
Responder2
Pessoalmente, prefiro que todas as minhas variáveis sejam declaradas explicitamente. Nesse caso, eu declararia o valor padrão ativado common.yaml
e usaria outros arquivos yaml para declarar valores diferentes do padrão, como
common.yaml
-----------
profiles::apache::keepalive : On
profiles::apache::keepalive_timeout : 5
servertype.yaml
---------------
profiles::apache::keepalive : On
profiles::apache::keepalive_timeout : 30
Em seguida, defina a hierarquiahiera.yaml
:hierarchy: - servertype.yaml
- common.yaml
Se você não quiser fazer isso, acho que a única outra abordagem seria usar instruções 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,
}
}
}