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/somecommand
ainda 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?
myvar
nã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_state
era exatamente o que eu procurava - obrigado. Faça disso uma resposta e eu aceito!