Puppet às vezes não consegue encontrar fatos padrão como osfamily

5

Breve resumo - para fins de teste, instalei o agente fantoche em 5 nós (Debian Squeeze + puppet 2.7.20-1puppetlabs1) e o mestre de marionetes em 1 servidor (mesma versão).

No lado do puppetmaster em cada manifesto eu checo se $ :: osfamily == 'Debian'. Às vezes eu também uso $ :: fqdn, e verifico se não está vazio.

O problema é que todos os dias, em horários aleatórios, recebo correspondência do mestre de marionetes que ele não pode compilar o catálogo de um dos nós. Por exemplo:

Fri Jan 18 19:18:24 +0100 2013 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: Not supported osfamily at /etc/puppet/modules/system/manifests/skel.pp:20 on node mynodeX
Fri Jan 18 19:18:24 +0100 2013 Puppet (notice): Using cached catalog
Fri Jan 18 19:18:24 +0100 2013 Puppet (err): Could not retrieve catalog; skipping run

Outro exemplo, de logs de puppetmaster:

Jan 15 18:58:49 monitor puppet-master[14218]: No fqdn at /etc/puppet/modules/system/manifests/motd.pp:29 on node nodeY

É claro que após a próxima iteração do agente de marionetes, tudo está bem. Não tenho ideia de como encontrar a causa desse problema. O problema é comum a todos os 5 nós.

Tenho 100% de certeza de que não está relacionado ao cron.

    
por Tomasz Olszewski 19.01.2013 / 08:53

2 respostas

6

Eu já vi esse problema no RedHat / CentOS. O agente fantoche na máquina cliente ficaria sem descritores de arquivo devido a algum bug ruby / puppet que não os fechava. Depois de atingir o limite de 1024 fd, ele não seria capaz de executar o facter mais, então os fatos estariam faltando.

Se o fantoche subsequente for executado a partir do mesmo processo, não será um problema diferente, mas talvez valha a pena conferir. No meu caso, o agente de marionetes registraria a impossibilidade de iniciar o facetador e, em /proc/PIDOFPUPPETD/fd , haveria 1024 descritores de arquivos.

    
por 19.01.2013 / 11:34
2

Eu encontrei a fonte do meu problema. Foi o meu plugin nagios, que verifica se o agente fantoche funciona e escuta as conexões ( eu corro com o agente fantoche com listen = true )

Parece que se houver mais de uma conexão com o agente fantoche de uma só vez, o fantoche não pode reunir os fatos. Por exemplo, se minha osfamily é "Debian", ela retorna apenas um "Linux" genérico.

Como eu testei? Eu corro 2 loops, com comandos que se conectam a:

https://127.0.0.1:8139/production/facts/no_key

Exemplo de resultado:

OK: connection with puppet agent works (facter: 1.6.17, kernel: 2.6.32-5-amd64, os: Debian)
OK: connection with puppet agent works (facter: 1.6.17, kernel: 2.6.32-5-amd64, os: Debian)
OK: connection with puppet agent works (facter: 1.6.17, kernel: 2.6.32-5-amd64, os: Linux)
OK: connection with puppet agent works (facter: 1.6.17, kernel: 2.6.32-5-amd64, os: Debian)
OK: connection with puppet agent works (facter: 1.6.17, kernel: 2.6.32-5-amd64, os: Debian)

Se eu executar o loop com apenas 1 comando, ele funcionará sempre.

Não tenho certeza se é realmente um problema de marionetes ou algo mais profundo (módulos Ruby), mas para corrigir esse problema, preciso parar de me conectar ao servidor do agente de marionetes.

    
por 21.02.2013 / 13:55