Powiedzmy, że mam kod szefa kuchni, taki jak:
require 'mixlib/shellout'
yum_package 'somepackage'
myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
Gdzie /bin/somecommand
jeszcze nie istnieje, ponieważ jest zainstalowany przez somepackage
. Z tego powodu to się nie powiedzie w czasie kompilacji receptury, ale oczywiście zadziała w czasie konwergencji, pod warunkiem, że pakiet zostanie zainstalowany pomyślnie (a jeśli nie, to oczywiście i tak się nie powiedzie). Nie powiedzie się to również, jeśli pakiet zostanie zainstalowany jako poprzedni przepis na liście run, ponieważ wszystkie są kompilowane razem z góry. Jak zawrzeć w przepisie szefa kuchni rzeczy, które ten przepis lub lista startowa instaluje się sam?
myvar
nie ma prawdziwej odpowiedzi, zwykle unikam używania oceny kodu z zewnętrznych poleceń w czasie kompilacji, chyba że jest to bardzo konieczne do zdefiniowania innych zasobów. W skrócie, zrobiłbymruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
node.run_state
było dokładnie tym, czego szukałem - dzięki. Uczyń to odpowiedź, a ja ją zaakceptuję!