Opcionalmente, pase el parámetro a la marioneta usando hiera

Opcionalmente, pase el parámetro a la marioneta usando hiera

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 apachetiene un $keepalivepará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.yamly 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,
    }
  }

}

información relacionada