Disons que j'ai du code Chef comme:
require 'mixlib/shellout'
yum_package 'somepackage'
myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
Où /bin/somecommand
n'existe pas encore car il est installé par somepackage
. Cela échouera au moment de la compilation de la recette pour cette raison, mais fonctionnera évidemment au moment de la convergence si le package s'installe avec succès (et si ce n'est pas le cas, la recette a de toute façon échoué de toute façon). Cela échoue également si le package est installé comme une recette précédente dans la liste d'exécution car ils sont tous compilés ensemble à l'avance. Comment puis-je inclure des éléments dans une recette Chef que cette recette ou runlist s'installe?
myvar
il n'y a pas de vraie réponse, généralement j'évite d'utiliser l'évaluation de code à partir de commandes externes au moment de la compilation, sauf si cela est très nécessaire pour définir d'autres ressources. En bref, je ferais unruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
node.run_state
était exactement ce que je cherchais - merci. Faites-en une réponse et je l'accepterai!