chef-infra - 如何在 ruby_block 之外使用 ruby_block 变量
问题描述
我有一个代码,在该代码中它包含 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']
解决方案
首先,根据经验,我建议您使用 Chef 资源,并且不要在这些资源之外使用 ruby 代码(因为 Chef 资源之外的 ruby 块将在编译阶段而不是 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
推荐阅读
- docker - FeathersJS 和 Docker 应用程序存在套接字和连接问题
- xml - 如何将 xml 文件“复制”到 PostgreSQL?
- sql-server - 恢复时备份 SQL Server Developer 大喊它启用了数据压缩,仅在企业版上可用
- c - 我的 if 语句与我希望它做的相反
- mysql - AND , OR 子句在 MYSQL 中对我不起作用
- python - 查看字符串是否包含不同数据帧中的子字符串
- amazon-cognito - AWS Cognito - preAuthentication 和 customMessage 触发器
- vue.js - Vue 不使用 Webpack 渲染模板,只考虑运行时构建
- python - 无法在 Visual Studio Code 中调试 Flask 应用程序
- javascript - 错误的
- 标签行为