厨师:一个 ruby_block 内的变量集可以在以后的食谱中使用吗?
Chef: Can a variable set within one ruby_block be used later in a recipe?
假设我有一个变量 directory_list
,我在名为 get_directory_list
的 ruby_block 中定义和设置了它。我可以稍后在我的食谱中使用 directory_list
,还是 compile/converge 进程会阻止这种情况?
示例:
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_block.
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_state 来传递数据。
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:如果这只是一个文件,您可以使用 action :nothing
声明文件资源,从 ruby_block 中查找资源并设置文件名,然后通知ruby_block 运行时的文件资源。
选项 4:如果这是今天来自 IRC 的示例,只需将您的 rsync 和递归 chown 放在单个 bash 资源中。 rsync 和 chown 已经是幂等的,所以我不认为在这种特殊情况下它是令人反感的。
假设我有一个变量 directory_list
,我在名为 get_directory_list
的 ruby_block 中定义和设置了它。我可以稍后在我的食谱中使用 directory_list
,还是 compile/converge 进程会阻止这种情况?
示例:
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_block.
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_state 来传递数据。
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:如果这只是一个文件,您可以使用 action :nothing
声明文件资源,从 ruby_block 中查找资源并设置文件名,然后通知ruby_block 运行时的文件资源。
选项 4:如果这是今天来自 IRC 的示例,只需将您的 rsync 和递归 chown 放在单个 bash 资源中。 rsync 和 chown 已经是幂等的,所以我不认为在这种特殊情况下它是令人反感的。