Digamos que tengo un código de Chef como:
require 'mixlib/shellout'
yum_package 'somepackage'
myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
Donde /bin/somecommand
aún no existe porque está instalado por somepackage
. Esto fallará en el momento de la compilación de la receta por ese motivo, pero obviamente funcionará en el momento de la convergencia si el paquete se instala con éxito (y si no lo hace, obviamente la receta ha fallado de todos modos). Esto también falla si el paquete está instalado como una receta anterior en la lista de ejecución, ya que todos se compilan juntos por adelantado. ¿Cómo incluyo cosas en una receta de Chef que se instala esa receta o lista de ejecución?
myvar
no hay una respuesta real, generalmente evito usar la evaluación de código de comandos externos en tiempo de compilación a menos que sea muy necesario para definir otros recursos. En resumen, haría unruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
node.run_state
era exactamente lo que estaba buscando, gracias. ¡Responda eso y lo aceptaré!