Шеф-повар перемотать определение cookbook_file из рецепта обертки поваренной книги

Я использую кулинарную книгу github.com opscode-cookbooks/openldap. Я написал кулинарную книгу "lab_openldap", которая включает в себя рецепт "openldap::server".

Рецепт server.rb использует следующий пункт для загрузки файла 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" поваренной книги / местоположение ssl/#{node['openldap']['server']}. 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 ссылается на местоположение файла в каталоге / files в кулинарной книге, расположенной в chef-repo.,

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

1 ответ

Решение

Конечно, это! Вам просто нужно установить cookbook Атрибут на ресурсе, когда вы оберните его. По умолчанию это "текущая кулинарная книга", но вы можете изменить ее:

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

Если вы посмотрите на Bewan's Chef Rewind, вы увидите, что он делает то же самое

Вы можете сделать это прямо сейчас в chef:

include_recipe "openldap::server" 

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

Обратите внимание: чтобы избежать использования этой ситуации, библиотечные кулинарные книги, такие как openldap, должны быть написаны как пользовательские ресурсы, а не как рецепты. Затем они должны экспортировать свойства, позволяющие перезаписывать их шаблоны, используя шаблон из этого ответа:

/questions/52924434/chef-mozhno-li-opredelit-resurs-chef-ispolzuyuschij-shablon-i-vyizvat-ego-iz-dru/52924441#52924441

Другие вопросы по тегам