Opcionalmente passe parâmetro para marionete usando hiera

1

Estamos usando o padrão de papéis / perfis. No exemplo abaixo, eu gostaria de passar um parâmetro opcionalmente de hiera para que, se nenhum valor for fornecido, o padrão de classe :: apache seja usado (o qual é internamente a partir de sua classe :: apache :: params). Isso nos permitiria definir o valor keepalive em alguns servidores, mas permitir que a classe :: apache determine o valor em si 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,
  }

}

Eu tentei definir o valor padrão da pesquisa hiera para 'undef', mas acabei com valores vazios na configuração.

    
por Michelle 19.05.2015 / 09:15

2 respostas

1

Você obtém esse efeito por meio da pesquisa automática de parâmetros .

Seus dados do Hiera são direcionados ao módulo atual do apache, não ao perfil do apache.

apache::keepalive: true

Isso só funciona se class apache tiver um parâmetro $keepalive .

E sim, o padrão para isso deve ser retirado de apache::params .

class apache($keepalive = $::apache::params::keepalive)
    inherits ::apache::params { 
        ...
}
    
por 19.05.2015 / 15:43
0

Eu pessoalmente prefiro ter todas as minhas variáveis explicitamente declaradas. Nesse caso, eu declararia o valor padrão em common.yaml e, em seguida, 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 hierarquia em hiera.yaml

:hierarchy: - servertype.yaml
            - common.yaml

Se você não quer fazer isso, então eu 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,
    }
  }

}
    
por 19.05.2015 / 14:09

Tags