Digamos que eu tenha algum código do Chef, como:
require 'mixlib/shellout'
yum_package 'somepackage'
myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
Onde /bin/somecommandainda não existe porque está instalado por somepackage. Isso falhará no tempo de compilação da receita por esse motivo, mas obviamente funcionará no tempo de convergência, desde que o pacote seja instalado com êxito (e, se isso não acontecer, obviamente a receita falhou de qualquer maneira). Isso também falha se o pacote estiver instalado como uma receita anterior na lista de execução, pois todos eles são compilados antecipadamente. Como incluo itens em uma receita de Chef que essa receita ou lista de execução se instala?
myvarnão há resposta real, geralmente evito usar a avaliação de código de comandos externos em tempo de compilação, a menos que seja necessário definir outros recursos. Em resumo, eu faria umruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
node.run_stateera exatamente o que eu procurava - obrigado. Faça disso uma resposta e eu aceito!