Sim, Hiera seria a melhor solução. Note que você pode (e deve) adicionar Hiera ao Pupet 2.7.x
no formulário do plugin.
Salvo isso, suas opções são limitadas. A relação require
entre duas classes não terá efeito. Pelo contrário, observe que a seguinte refatoração do seu manifesto de trabalho também gera o seu erro:
class { 'postgresql::server': }
<-
class { 'postgresql::globals':
encoding => 'UTF8',
locale => 'en_NG',
}
O motivo é que o problema é baseado em ordem de análise ou ordem de avaliação - a ordem em que o compilador de manifesto encontra as declarações de classe. Os parâmetros require/before
(e as setas de encadeamento) apenas adicionam relacionamentos ao catálogo que está sendo construído, para consumo pelo puppet agent
.
Basicamente, você deve garantir que sua própria classe de servidor PostgreSQL seja sempre avaliada antes da classe do cliente, por exemplo
role::posgre_server_with_client {
include profiles::postgre_server
include profiles::postgre_client
}
Tal ordenação nem sempre pode ser garantida em manifestos complexos (que podem include
especialmente a funcionalidade do cliente de numerosos contextos). Como tal, acho que há um strong argumento para declarar isso como um bug no módulo. Uma vez que os padrões que levam ao problema são bastante difusos (acho), pode haver motivos para questionar a prática atual de design de módulo em geral.
Vou ver mais algumas opiniões da comunidade sobre isso.