Depois de cavar alguns arquivos fonte do Puppet Ruby, eu rastreei o problema em um bug onde há uma conflação das seções do arquivo de configuração do Puppet. Tudo se resume à palavra "mestre"
Resumo : Os mestres de marionetes que atuam como clientes de marionetes e no ambiente "mestre" causam problemas com o arquivo de configuração análise.
Detalhes :
Quando o agente fantoche inicia uma das coisas que ele faz é analisar o arquivo de configuração (normalmente /etc/puppet/puppet.conf
).
O arquivo de configuração é dividido em seções, por exemplo, "[main]", "[agent]", "[master]", etc. Cada uma dessas seções é armazenada separadamente no hash gerado a partir da análise do arquivo de configuração . No meu caso, o pmaster-dev tem estas seções: "memory", "master", "cli" e "agent".
Também pode haver seções por ambiente. Por exemplo, se houver um ambiente chamado "stable201301", pode haver uma seção no arquivo de configuração intitulada "[stable201301]".
Para cada uma das seções acima (chamadas "fontes" no código), você examina todas as configurações que associaram "ganchos". Se nessa seção a definição com um gancho for definida, você chamará o gancho dessa configuração. Algumas das configurações que possuem ganchos incluem catalog_format, node_name_fact e storeconfigs.
Uma das configurações mais interessantes é "async_storeconfigs", que tem um gancho que configura uma classe de cache.
Lembre-se de que as seções também podem incluir aquelas para cada ambiente. O PROBLEMA: E se o mestre Puppet (quando atuando como um cliente Puppet) estiver no ambiente "master"?
O papel usual da seção "[master]" é para configurações de um mestre de marionetes. Mas se o próprio mestre dos fantoches estiver usando o ambiente "mestre", teremos um conflito. Em particular, a configuração "async_storeconfigs" do "[master]" é carregada a partir do arquivo de configuração. Como o mestre Puppet (como cliente Puppet) está no ambiente "master", essa configuração faz com que a classe de cache seja definida e, assim, quando puppet agent --test
é executado, o cliente de marionetes procura fatos em cache.
Solução (?) : Você pode ter certeza de que um mestre de marionetes nunca usou o ambiente "mestre". Uma solução melhor seria fazer com que o analisador de configuração do cliente não olhasse para a seção "[master]" (já que isso é aplicável apenas aos mestres do Puppet). Uma solução ainda melhor seria separar os arquivos de configuração do cliente e do mestre por completo.