Passer des variables entre le chef des ressources
je voudrais vous montrer mon cas d'utilisation, puis de discuter des solutions possibles:
Problème:
j'ai 2 recettes, "a" et "b".. "un" installe un programme sur mon système de fichiers (par exemple au "/usr/local/bin/stuff.sh" et la recette "b" doit exécuter ce et faire quelque chose avec le la sortie.
donc la recette de "une" ressemble à quelque chose comme:
execute "echo 'echo stuff' > /usr/local/bin/stuff.sh"
(le script juste écho(es) "trucs" sur la sortie standard stdout)
et de la recette "b" ressemble à quelque chose comme:
include_recipe "a"
var=`/usr/local/bin/stuff.sh`
(notez les backquotes, var
doit contenir stuff
)
et maintenant, j'ai besoin de faire quelque chose avec elle, par exemple, créer un utilisateur avec ce nom d'utilisateur. donc au script "b" - je ajouter
user "#{node[:var]}"
Comme il arrive, cela ne fonctionne pas.. apparemment le chef exécute tout ce qui n'est pas une ressource, et seulement alors, exécute les ressources de sorte que dès que je lance le script chef se plaint qu'il ne peut pas compiler, car il tente d'abord d'exécuter le "var=..." à la ligne-recette de "b" et échoue en raison de la "exécuter ...", une recette n'a pas couru encore et donc "stuff.sh" script n'existe pas encore.
Inutile de dire, c'est très ennuyeux car il rompt le "Chef dirige tout dans l'ordre, de haut en bas" qui m'a été promis quand j'ai commencé à l'utiliser.
Cependant, je ne suis pas très pointilleux j'ai donc commencé à chercher d'autres solutions à ce problème, donc:
Problème B: j'ai couru à travers l'idée de "ruby_block". apparemment, c'est une ressource de sorte qu'il sera évalué, ainsi que les autres ressources. J'ai dit ok, alors j'aimerais créer le script, obtenir la sortie dans un "ruby_block" et puis la passer à "l'utilisateur". donc recette "b" ressemble maintenant à:
include_recipe "a"
ruby_block "a_block" do
block do
node.default[:var] = `/usr/local/bin/stuff.sh`
end
end
user "#{node[:var]}"
Cependant, il s'avère que la variable (var
) n'a pas été passé de "ruby_block" à "utilisateur" et il reste vide. Peu importe ce que la jonglerie, j'ai essayé de le faire avec elle, je n'ai pas réussi (ou peut-être que je n'ai tout simplement pas trouvé la bonne jonglerie méthode)
De la chef/ruby maîtres autour de: Comment puis-je résoudre le Problème? Comment puis-je résoudre le Problème B?
OriginalL'auteur ShinySpiderdude | 2013-07-17
Vous devez vous connecter pour publier un commentaire.
Vous avez déjà résolu Un problème avec le Rubis bloc.
Maintenant que vous avez à résoudre le problème B avec une approche similaire:
Vous pouvez également résoudre Un problème en créant le fichier lors de la phase de compilation:
Si à l'issue de ce cours d'action, assurez-vous que:
/usr/local/bin
existent lors de Chef de la phase de compilation;stuff.sh
est exécutable; OUvar=`sh /usr/local/bin/stuff.sh`
OriginalL'auteur cassianoleal