Opcionalmente, passe o parâmetro para o fantoche usando hiera

Opcionalmente, passe o parâmetro para o fantoche usando hiera

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 apachetiver um $keepaliveparâ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.yamle 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,
    }
  }

}

informação relacionada