Скажімо, у мене є такий код шеф-кухаря, як:
require 'mixlib/shellout'
yum_package 'somepackage'
myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
Де /bin/somecommand
ще не існує, оскільки його встановлено somepackage
. З цієї причини це не вдасться під час компіляції рецептів, але, очевидно, буде працювати в час конвергенції, забезпечуючи успішне встановлення пакета (і якщо цього не відбувається, явно рецепт все одно не вдався). Це також не вдається, якщо встановлений пакет буде попереднім рецептом у списку запуску, оскільки всі вони складені разом наперед. Як я включаю речі в рецепт шеф-кухаря, який цей рецепт чи список списку встановлює сам?
myvar
реальної відповіді, зазвичай я уникаю використання коду з зовнішніх команд під час компіляції, якщо це не дуже необхідно для визначення інших ресурсів. Якщо коротко, я б зробивruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
node.run_state
був саме тим, що я шукав - дякую. Зробіть цю відповідь, і я прийму її!