У меня есть пользовательский ресурс. Когда этот ресурс сходится, я хочу спрятать пакеты, установленные указанным ресурсом, в node.run_state [: installed_packages]. Но когда я перехожу к чтению значения позже в другой рецепт (тот же запуск клиента), он выглядит нулевым.Is node.run_state в шеф-поваре, который должен пережить весь ход шеф-повара?
Моя единственная мысль заключается в том, что это оценивается во время объявления ресурса? Если да, то как мне выполнить то, что я намерен?
Вот отрывок из моего пользовательского ресурса положить деталь в 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
Это именно то, что мне нужно. Для всех, кто сталкивается с этой проблемой, вот документация шефа по ленивым: https://docs.chef.io/resource_common.html#lazy-оценка –