Допустим, у меня есть некоторый код Chef, например:
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
был именно тем, что я искал - спасибо. Сделай ответ, и я приму его!