Diciamo che ho un codice Chef come:
require 'mixlib/shellout'
yum_package 'somepackage'
myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
Dove /bin/somecommand
non esiste ancora perché è installato da somepackage
. Questo fallirà al momento della compilazione della ricetta per quel motivo, ma ovviamente funzionerà al momento della convergenza fornendo il pacchetto installato correttamente (e in caso contrario, ovviamente la ricetta non è riuscita comunque). Ciò fallisce anche se il pacchetto è installato come ricetta precedente nell'elenco di esecuzione poiché sono tutti compilati insieme in anticipo. Come posso includere elementi in una ricetta Chef che tale ricetta o runlist si installa da sola?
myvar
non esiste una risposta reale, di solito evito di utilizzare la valutazione del codice da comandi esterni in fase di compilazione, a meno che non sia strettamente necessario per definire altre risorse. In breve, farei unruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
node.run_state
era esattamente quello che stavo cercando - grazie. Fai una risposta e la accetterò!