Nehmen wir an, ich habe einen Chef-Code wie:
require 'mixlib/shellout'
yum_package 'somepackage'
myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
Wo /bin/somecommand
existiert noch nicht, weil es von installiert wird somepackage
. Dies schlägt aus diesem Grund zur Kompilierungszeit des Rezepts fehl, funktioniert jedoch offensichtlich zur Konvergenzzeit, sofern das Paket erfolgreich installiert wird (und wenn dies nicht der Fall ist, ist das Rezept offensichtlich trotzdem fehlgeschlagen). Dies schlägt auch fehl, wenn das Paket als vorheriges Rezept in der Runlist installiert wurde, da alle im Voraus zusammen kompiliert wurden. Wie füge ich Dinge in ein Chef-Rezept ein, die dieses Rezept oder diese Runlist selbst installiert?
myvar
gibt es keine wirkliche Antwort. Normalerweise vermeide ich die Verwendung der Code-Auswertung von externen Befehlen zur Kompilierungszeit, es sei denn, dies ist sehr notwendig, um andere Ressourcen zu definieren. Kurz ruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
node.run_state
war genau das, wonach ich gesucht habe - danke. Machen Sie das eine Antwort und ich werde es akzeptieren!