Não é possível capturar o erro do chef em um arquivo

1

Se eu executar o seguinte:

chef-client --force-formatter --logfile STDOUT 2>&1

E, em seguida, control-c-mid-run (ou encontrar qualquer tipo de erro) vejo esta mensagem de erro:

[2014-09-12T00:00:30-04:00] FATAL: SIGINT received, stopping

================================================================================
Recipe Compile Error in /var/cache/chef/cookbooks/users/recipes/fen.rb
================================================================================


SystemExit
----------
exit


Cookbook Trace:
---------------
  /var/cache/chef/cookbooks/users/recipes/default.rb:11:in '''
  /var/cache/chef/cookbooks/users/recipes/default.rb:11:in 'from_file'
  /var/cache/chef/cookbooks/users/recipes/fen.rb:15:in 'from_file'


Relevant File Content:
----------------------
/var/cache/chef/cookbooks/users/recipes/default.rb:

etc...

[2014-09-12T00:00:30-04:00] ERROR: Running exception handlers
[2014-09-12T00:00:30-04:00] ERROR: Exception handlers complete
[2014-09-12T00:00:30-04:00] FATAL: Stacktrace dumped to /var/cache/chef/chef-stacktrace.out
Chef Client failed. 0 resources updated

Mas se eu fizer o seguinte:

chef-client --force-formatter --logfile STDOUT 2>&1 | tee /tmp/chef.log

E, em seguida, control-c, vejo todas as mensagens de log que eu estava vendo antes, com exceção da mensagem fatal que me dizia o que estava acontecendo. O arquivo que estou passando também não mostra a mensagem fatal.

Então, aparentemente, o chef-client está detectando se está ou não direcionando para um descritor de arquivo real e suprimindo a saída, se estiver. Alguém sabe de uma maneira de impedir isso?

    
por Mediocre Gopher 12.09.2014 / 06:04

3 respostas

1

Eu descobri um hack puro

script -c chef-client /tmp/chef.log

Faz exatamente o que eu quero.

    
por 17.09.2014 / 17:37
1

Parece que o Chef envia o erro para STDERR em vez de STDOUT, apesar de especificar STDOUT como logfile. O seguinte comando deve funcionar:

chef-client --force-formatter --logfile STDOUT 2>&1 | tee /tmp/chef.log
    
por 12.09.2014 / 09:38
0

Uma opção melhor do que as outras duas respostas parece ser:

chef-client -o recipe_name --format doc --no-color | tee output.log

O formato doc imprime o progresso da execução chef-client usando strings completas que exibem um resumo das atualizações à medida que ocorrem.

    
por 07.05.2015 / 22:46

Tags