我有一个代码,其中包含ruby_block。在ruby_block
中生成的值是什么,我想在同一个配方文件的外部/另一个资源中使用它们。
Dir.chdir("#{Chef::Config[:file_cache_path]}")
Dir.glob("test-*.msi").each { |file| File.delete(file)}
windows_zipfile "#{Chef::Config[:file_cache_path]}" do
source node['seps_infrastructure']['zip_file']
action :unzip
overwrite true
end
ruby_block 'check_vpn_ip_list' do
block do
node.run_state['msi_file'] = Dir.glob(""test-*.msi"")
node.run_state['ver'] = (node.run_state['msi_file'])[0].split('- ')[3].chomp(".msi")
end
end
puts node.run_state['ver']
puts node.run_state['msi_file']
答案 0 :(得分:0)
首先,根据经验,我建议您使用厨师资源,并且不要在此类资源之外使用ruby代码(因为厨师资源之外的ruby块将在compilation phase and not the convergence phase of chef-client run上执行。)是该规则的一些例外)。例如,地方
Dir.chdir("#{Chef::Config[:file_cache_path]}")
Dir.glob("test-*.msi").each { |file| File.delete(file)}
在ruby_block
资源中。
关于您的问题,您可以在ruby_block
内分配一个节点属性,并在需要时使用相同的节点属性。例如:
ruby_block 'foo' do
block do
node.default['files'] = Dir.glob("test-*.msi")
end
end
execute 'baz' do
command "echo #{node['files']}"
end