厨师长:一个ruby_块中的变量集可以在以后的食谱中使用吗?
假设我有一个变量,厨师长:一个ruby_块中的变量集可以在以后的食谱中使用吗?,ruby,chef-infra,devops,Ruby,Chef Infra,Devops,假设我有一个变量,directory\u list,我在名为get\u directory\u list的ruby\u块中定义并设置了它。我可以稍后在我的配方中使用目录列表,还是编译/聚合过程会阻止这一点 例如: ruby_block "get_file_list" do block do transferred_files = Dir['/some/dir/*'] end end transferred_files.each do |file| fil
directory\u list
,我在名为get\u directory\u list
的ruby\u块中定义并设置了它。我可以稍后在我的配方中使用目录列表
,还是编译/聚合过程会阻止这一点
例如:
ruby_block "get_file_list" do
block do
transferred_files = Dir['/some/dir/*']
end
end
transferred_files.each do |file|
file "#{file}" do
group "woohoo"
user "woohoo"
end
end
选项1:您还可以将文件资源放在ruby_块中
ruby_block "get_file_list" do
block do
files = Dir['/some/dir/*']
files.each do |f|
t = Chef::Resource::File.new(f)
t.owner("woohoo")
t.group("woohoo")
t.mode("0600")
t.action(:create)
t.run_context=(rc)
t.run_action(:create)
end
end
end
选项2:可以使用node.run\u状态传递数据
ruby_block "get_file_list" do
block do
node.run_state['transferred_files'] = Dir['/some/dir/*']
end
end
node.run_state['transferred_files'].each do |file|
file "#{file}" do
group "woohoo"
user "woohoo"
end
end
选项3:如果这只是一个文件,您可以使用操作:nothing
声明文件资源,从ruby_块中查找资源,设置文件名,然后在ruby_块运行时通知文件资源
选项4:如果这是今天IRC的例子,只需将rsync和递归chown放在一个bash资源中即可。rsync和chown已经是幂等的了,所以我不认为在这个特殊的情况下这是令人反感的。我觉得今天有人在#chef的Freenode上反复问了这个问题。这当然是可能的。听起来好像有人真的想要答案。哈哈哈@烤一个好的,很有趣。我甚至不知道这些选择是可能的。谢谢你的帮助。