Использование файлов с кулинарной книгой-оболочкой и рецептами, определенными в родительской кулинарной книге

Мой шеф-повар недавно выдает эту ошибку:

Chef Client failed. 22 resources updated in 90.306407696 seconds
[2014-12-19T19:47:24+00:00] ERROR: cookbook_file[/srv/mycookbook/static/a.png] (mycookbook::_deploy line 82) had an error: Chef::Exceptions::FileNotFound: Cookbook 'mycookbook' (0.4.5) does not contain a file at any of these locations:
  files/ubuntu-12.04/static/a.png
  files/ubuntu/static/a.png
  files/default/static/a.png

This cookbook _does_ contain: ['a.css','b.html','c.html']

Это потому, что в основной кулинарной книге mycookbook (которой у меня нет) есть такие строки:

node['myattributes']['theme']['static_files'].each do |file|
  cookbook_file node['myattributes']['install_dir'] + "/static/" + file do
    source "static/#{file}"
    owner node['myattributes']['user']
    group node['myattributes']['group']
    cookbook node['myattributes']['theme']['source_cookbook']
  end
end

но моя дочерняя кулинарная книга или поваренная книга-оболочка, которая использует mycookbook, имеет эти строки с разными атрибутами и не удалась:

override['myattributes']['theme']['compile_files'] = ['a.html']
override['myattributes']['theme']['static_files'] = ['a.png']

И у меня эти файлы хранятся под моей кулинарной книгой-оболочкой files/default/static/ и files/default/etc/

Я уже знаю, в чем проблема. В моей кулинарной книге-оболочке нет некоторых файлов, ожидаемых mycookbook, но зачем мне? Эти атрибуты в любом случае должны быть переопределены.

Мой вопрос: есть ли лучший способ обработки файлов, проверенных в files/default, что определения рецептов определены в родительской поваренной книге, а поваренная книга-оболочка просто определяет другой набор атрибутов для разных файлов?


person xbeta    schedule 20.12.2014    source источник


Ответы (1)


Вам нужно установить node['myattributes']['theme']['source_cookbook'] на `тогда имя вашей кулинарной книги-оболочки, чтобы она выглядела в правильной кулинарной книге.

person coderanger    schedule 20.12.2014
comment
Спасибо! Кажется, это работает! Могу я спросить, стоит ли использовать ресурс cookbook_file или нет? Потому что я не уверен, почему первоначальный автор сделал это именно так, но я подумал, что это было бы намного лучше сделать при создании вспомогательной библиотеки. - person xbeta; 20.12.2014
comment
Не уверен, что еще вы могли бы использовать, cookbook_file — единственный способ скопировать файлы из поваренной книги в файловую систему. Что касается создания рецепта или расширяемого ресурса, чтобы лучше справляться с такими вещами, я думаю, что могу с уверенностью сказать, что я в последнем лагере, поскольку я изобрел многое из этого. - person coderanger; 20.12.2014
comment
Для меня это был самый простой способ (в gerrit cookbook, чтобы кулинарная книга-оболочка предоставляла файлы для темы Gerrit. Я вижу точку, в которой gerrit_theme_file LWRP немного упростила бы задачу. (Но в целом я недоволен состоянием поваренной книги, учитывая отсутствие Но, наконец, файлы должны быть развернуты либо через remote_file, либо через cookbook_file (поскольку ресурс template, к которому вы, вероятно, больше привыкли, плохо работает для двоичных файлов (изображений). - person StephenKing; 20.12.2014