Ich habe eine benutzerdefinierte Ressource. Wenn diese Ressource konvergiert, möchte ich die von dieser Ressource installierten Pakete in node.run_state [: installed_packages] speichern. Aber wenn ich später den Wert in einem anderen Rezept (gleicher Client-Lauf) lese, scheint es Null zu sein.Wird node.run_state in chef den gesamten chef-client run überleben?
Mein einziger Gedanke ist, dass das zur Ressourcenerklärungszeit ausgewertet wird? Wenn ja, wie würde ich erreichen, was ich vorhabe?
Hier ist ein Ausschnitt aus meiner benutzerdefinierten Ressource das Element in die run_state setzen:
# Push the desired package into the run_state
if (node.run_state[:installed_packages] == nil) then
node.run_state[:installed_packages] = Set.new
end
node.run_state[:installed_packages].add("/tmp/#{rpm_name}.rpm")
Und hier ist die Vorlage Ressource ich diese Werte in bin mit:
template '/tmp/my_script.sh' do
source 'my_script.sh.erb'
owner 'root'
group 'root'
mode '0755'
variables({
:packages => node.run_state[:installed_packages] || Array.new,
})
action :nothing
end
Dies ist genau das, was ich brauchte. Für alle anderen, die auf dieses Problem stoßen, ist hier die Dokumentation von Chef auf faul: https://docs.chef.io/resource_common.html#lazy-evaluation –