我们说我有:
ruby_block "foo" do
block do
puts "do something"
end
end
ruby_block "bar" do
block do
puts "do something else"
end
end
如何从bar
阻止来电话foo
?
答案 0 :(得分:5)
如果您希望在Ruby中实现通用功能,则应该编写库函数并从ruby_block
调用它们。
您可以将其添加到libraries/helpers.rb
:
module MyCookbook
module Helpers
def foo
# do something
end
def bar
# do something else
end
end
end
然后您可以在ruby_block
中调用这些函数,如下所示:
extend MyCookbook::Helpers
ruby_block "foo" do
block do
foo
end
end
ruby_block "bar" do
block do
# call the foo helper method
foo
# call the bar helper method
bar
end
end
除了辅助方法之外,您还可以使用Chef的DSL中提供的notifications来通知其他资源运行,包括其他ruby_block
。
答案 1 :(得分:1)
Holger的回答是“#34;”正确的做法,但是如果你需要从另一个内部调用一个资源,你可以利用DSL方法的返回值。
每个Recipe DSL方法(file
,ruby_block
等)返回从DSL创建的对象的实例:
bar = ruby_block 'bar' do
# ...
end
现在bar
包含对DSL方法创建的Chef::Resource::RubyBlock
实例的引用。然后,您可以在其他ruby_block
中使用此功能:
ruby_block 'foo' do
block do
# in this context, bar is the RubyBlock resource, so you can call any actions
# or change any attributes you wish.
end
end