1
resposta

Script não funciona de maneira idempotente

Tentei escrever o código do puppet na mão e, depois, acabei tentando copiar e colar para ver se havia algo de errado, mas a linha do "file_line" é sempre adicionada não importa o caso, talvez o grep não esteja retornando corretamente (apesar do mesmo estar ok na pasta bin), segue mensagem recebida:

vagrant@precise32:~$ sudo puppet apply /vagrant/manifests/web.pp 
warning: Could not retrieve fact fqdn
notice: /Stage[main]//Exec[apt-update]/returns: executed successfully
notice: /Stage[main]//File_line[production]/Exec[/bin/echo 'JAVA_OPTS="$JAVA_OPTS -Dbr.com.caelum.vraptor.environment=production"' >> '/etc/default/tomcat7']/returns: executed successfully
notice: /Stage[main]//Service[tomcat7]: Triggered 'refresh' from 1 events
notice: Finished catalog run in 11.16 seconds

Parte do código utilizado:


file_line { "production":                                                                                                                      
   file => "/etc/default/tomcat7",                                                                                                              
   line => "JAVA_OPTS=\"\$JAVA_OPTS -Dbr.com.caelum.vraptor.environment=production\"",                                                          
   require => Package["tomcat7"],                                                                                                               
   notify => Service["tomcat7"]                                                                                                                 
 }                                                                                                                                              

 define file_line($file, $line) {                                                                                                               
  exec { "/bin/echo '$line' >> '$file'":                                                                                                       
  unless => "/bin/grep -qfx '$(line) '$(file)'"                                                                                            
    }                                                                                                                                         
}                                   
1 resposta

Como o fantoche usa o fato fqdn para determinar em qual nó está sendo executado, talvez não seja possível executá-lo se não puder ser determinado. Dado o que você está descrevendo, a coisa mais simples de depurar é o facqfn em vez da linha de comando do seu fantoche.

Se os "vários segundos" estiverem muito próximos de exatamente 5 segundos, é muito provável que sua configuração de DNS seja interrompida com um único servidor DNS inválido listado. O que há no /etc/resolv.conf? O que acontece se você executar dig -x $ HOSTIP $ DNSSERVERIP com o primeiro nameserver listado em resolv.conf?

Se você olhar no facter / fqdn.rb você pode ver o que exatamente o facter está tentando fazer para resolver o fqdn. Na versão mais útil, estou usando o facter / hostname.rb e facter / domainname.rb, que chamam o código de facter / util / resolution.rb.

Exatamente o que acontece depende de qual versão do facter você tem, qual SO e, possivelmente, o que exatamente você instalou. Chamar / bin / hostname, uname (etc) e fazer pesquisas de DNS são muito prováveis. Você sempre pode usar strace -t facter fqdn para ver o que está demorando (procure a lacuna no timestamp)

De tudo o que você descreveu, parece que o problema é que o fantoche realmente quer ter um nome de domínio e você não tem um, você só tem um nome de máquina "naked".

Adicionar o domínio example.com ao /etc/resolv.conf deve fazer o truque. A execução do nome do host foo.example.com também deve funcionar (mas precisará ser reaplicada). Soluções permanentes dependem da configuração exata do sistema operacional.