厨师从包装食谱食谱中倒回cookbook_file定义

时间:2014-01-10 13:41:17

标签: overloading chef openldap chef-recipe cookbook

我正在使用食谱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

2 个答案:

答案 0 :(得分:2)

您现在可以直接在厨师中执行此操作:

include_recipe "openldap::server" 

edit_resource(:cookbook_file, node['openldap']['ssl_cert']) do
  cookbook cookbook_name
end

请注意,为避免使用这种情况,应将openldap之类的库食谱编写为自定义资源,而不是配方。然后,他们应该使用此答案中的模式导出属性,以允许其模板被覆盖:

https://stackoverflow.com/a/63570830/506908

答案 1 :(得分:1)

当然是!您只需要在包装时在资源上设置cookbook属性。默认情况下,它是“当前的食谱”,但您可以更改它:

r = resources("cookbook_file[#{node['openldap']['ssl_cert']}]")
r.cookbook('my_wrapper_cookbook')

如果你看看布莱恩的厨师倒带,你会看到它does the same thing