我想检查配方中resource_collection
的内容,看看在节点运行期间是否正在调用特定的LWRP。但是由于编译加载逻辑和菜谱名称排序等等,很难做到这样的事情:
if run_context.resource_collection.any?{|r| r.resource_name.to_s == 'my_lwrp_resource'}
template "/tmp/example.rb" do
source "test.erb"
action :nothing
end.run_action(:create)
end
因为在将所有资源添加到resource_collection之前可能会运行此代码。
有没有办法在编译阶段结束之前推迟运行此代码,以确保完全填充resource_collection
并且查询将正确查找资源?
感谢
答案 0 :(得分:1)
您可以定义将在收敛期间执行的ruby_block资源。您无法访问配方DSL,使用DSL定义模板资源,但在ruby中定义模板资源同样容易:
ruby_block 'run_my_template_resource' do
action :create
block do
r = Chef::Resource::Template.new('template_name', run_context)
r.path '/path/to/write.to'
r.source 'source.erb'
r.cookbook 'cookbook-name'
r.owner 'root'
r.group 'root'
r.mode 00600
r.variables my: 'variables'
r.run_action :create
end
end