【问题标题】:chef rewind cookbook_file definition from a wrapper cookbook recipe厨师从包装菜谱食谱中倒带菜谱文件定义
【发布时间】:2020-08-25 11:09:23
【问题描述】:

我正在使用一本食谱 github.com opscode-cookbooks/openldap。 我写了一本包装食谱“lab_openldap”,其中包括“openldap::server”食谱。

server.rb 配方使用以下子句将 PEM 文件从 cookbooks files/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

尝试从“openldap”说明书文件/ssl/#{node['openldap']['server']}.pem”位置读取 PEM。

我的 PEM 文件位于包装器“lab_openldap”说明书文件/ssl/#{node['openldap']['server']}.pem”位置。

是否可以修改“lab_openldap::server.rb”配方以从包装食谱加载 PEM?

注意事项: 我知道https://github.com/bryanwb/chef-rewind,但它似乎无法处理这种情况。

更新

使用r.resource 提供的答案是正确的。

实际上,特定代码中的问题在于“source”关键字,根据http://docs.opscode.com/resource_cookbook_file.html,该关键字指的是位于 chef-repo 中的食谱中 /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

【问题讨论】:

  • 请不要忘记将答案标记为正确:)

标签: overloading chef-infra openldap chef-recipe cookbook


【解决方案1】:

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

include_recipe "openldap::server" 

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

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

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

【讨论】:

    【解决方案2】:

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

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

    如果您查看 Bryan 的 Chef Rewind,您会看到 does the same thing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多