如何在ruby_block之外使用ruby_block变量

时间:2019-05-06 08:56:46

标签: chef

我有一个代码,其中包含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']

1 个答案:

答案 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