Как использовать переменные ruby_block, вне ruby_block - PullRequest
0 голосов
/ 06 мая 2019

У меня есть код, в этом коде он содержит 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 голосов
/ 10 мая 2019

во-первых, как правило, я бы посоветовал вам использовать ресурсы chef и не иметь код ruby ​​вне этих ресурсов (поскольку блок ruby ​​вне ресурса chef будет выполняться на этапе компиляции, а не на этапе конвергенциииз 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
...