Estamos usando el patrón roles/perfiles. En el siguiente ejemplo, me gustaría pasar opcionalmente un parámetro de hiera para que, si no se proporciona ningún valor, se utilice la clase ::apache predeterminada (que obtiene internamente de su clase ::apache::params). Esto nos permitiría establecer el valor de keepalive en algunos servidores pero permitiría que la clase ::apache determine el valor por sí misma cuando no lo hagamos.
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,
}
}
Intenté configurar el valor predeterminado de la búsqueda de hiera en 'undef' pero luego termino con valores vacíos en la configuración.
Respuesta1
Este efecto se consigue mediantebúsqueda automática de parámetros.
Sus datos de Hiera se dirigen aactualmódulo de Apache, no su perfil de Apache.
apache::keepalive: true
Esto sólo funciona si class apache
tiene un $keepalive
parámetro.
Y sí, el valor predeterminado para esto debe tomarse de apache::params
.
class apache($keepalive = $::apache::params::keepalive)
inherits ::apache::params {
...
}
Respuesta2
Personalmente prefiero declarar explícitamente todas mis variables. En este caso, declararía el valor predeterminado common.yaml
y luego usaría otros archivos yaml para declarar valores que difieren del predeterminado como
common.yaml
-----------
profiles::apache::keepalive : On
profiles::apache::keepalive_timeout : 5
servertype.yaml
---------------
profiles::apache::keepalive : On
profiles::apache::keepalive_timeout : 30
Luego establezca la jerarquía enhiera.yaml
:hierarchy: - servertype.yaml
- common.yaml
Si no desea hacer esto, creo que el único otro enfoque sería utilizar declaraciones 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,
}
}
}