我有自定义资源。当该资源收敛时,我想将所述资源安装的软件包存入node.run_state [:installed_packages]。但是当我稍后在另一个食谱(同一个客户端运行)中读取该值时,它似乎是零。
我唯一的想法是在资源申报时评估?如果是这样,我将如何实现我的目标?
这是我的自定义资源片段,将项目放入run_state:
# 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")
这是我正在使用这些值的模板资源:
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
答案 0 :(得分:2)
很难从你的节目中看出来,但你认为“后来”可能是“之前”。使用lazy {}
帮助程序延迟对值的评估,直到稍后。有关何时发生特定代码位的详细信息,请参阅https://coderanger.net/two-pass/。