повар перематывает определение cookbook_file из рецепта поваренной книги оболочки

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

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

У меня есть файл PEM в файле рецептов оболочки lab_openldap / ssl / # {node ['openldap'] ['server']}. Pem "location.

Можно ли изменить рецепт lab_openldap :: server.rb для загрузки PEM из поваренной книги оболочки?

Примечания. Мне известно о https://github.com/bryanwb/chef-rewind, но это похоже, не справляется с этой ситуацией.

Обновлять

Предоставленный ответ с использованием r.resource правильный.

На самом деле проблема в конкретном коде связана с ключевым словом "источник", которое согласно 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

person epcim    schedule 10.01.2014    source источник
comment
Не забудьте отметить ответ как правильный :)   -  person sethvargo    schedule 13.01.2014


Ответы (2)


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

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

Если вы посмотрите на Chef Rewind Брайана, вы увидите его делает то же самое

person sethvargo    schedule 10.01.2014

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

include_recipe "openldap::server" 

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

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

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

person lamont    schedule 25.08.2020