我正在使用食谱github.com opscode-cookbooks / openldap。 我写了一本包装食谱" lab_openldap"包括" openldap :: server"配方
server.rb配方使用以下clausule将PEM文件从cookbooks文件/ ssl / * .pem上传到服务器到位置节点[' openldap'] [' ssl_cert' ]
if node['openldap']['tls_enabled'] && node['openldap']['manage_ssl']
cookbook_file node['openldap']['ssl_cert'] do
source "ssl/#{node['openldap']['server']}.pem"
mode 00644
owner "root"
group "root"
end
end
PEM试图从" openldap" cookbook文件/ ssl /#{node [' openldap'] [' server']}。pem"地点。
我的PEM文件包装在" lab_openldap" cookbook文件/ ssl /#{node [' openldap'] [' server']}。pem"地点。
是否可以修改" lab_openldap :: server.rb"从包装食谱加载PEM的配方?
注意: 我知道https://github.com/bryanwb/chef-rewind,但它似乎无法解决这种情况。
使用r.resource
提供的答案是正确的。
实际上,特定代码中的问题出现在" source"根据{{3}}的关键字是指位于chef-repo中的cookbook中/ files目录中文件的位置。
r = resources("cookbook_file[#{node['openldap']['ssl_cert']}]")
r.cookbook('lab_openldap')
cookbook_file node['openldap']['ssl_cert'] do
source "ssl/#{node['openldap']['server']}.pem"
mode 00644
owner "root"
group "root"
end
答案 0 :(得分:2)
您现在可以直接在厨师中执行此操作:
include_recipe "openldap::server"
edit_resource(:cookbook_file, node['openldap']['ssl_cert']) do
cookbook cookbook_name
end
请注意,为避免使用这种情况,应将openldap之类的库食谱编写为自定义资源,而不是配方。然后,他们应该使用此答案中的模式导出属性,以允许其模板被覆盖:
答案 1 :(得分:1)
当然是!您只需要在包装时在资源上设置cookbook
属性。默认情况下,它是“当前的食谱”,但您可以更改它:
r = resources("cookbook_file[#{node['openldap']['ssl_cert']}]")
r.cookbook('my_wrapper_cookbook')
如果你看看布莱恩的厨师倒带,你会看到它does the same thing