Я написал пару кулинарных книг LWRP для установки и управления некоторыми сервисами (Monit и Omnicheck). Одна из функций, которую они предоставляют, заключается в том, чтобы вы предоставили файл, который будет использоваться с ресурсами template или cookbook_file.
Я обнаружил, что когда я вызываю любой из этих ресурсов, я должен указать «cookbook new_resource.cookbook», чтобы заставить его искать данный файл в вызывающей поваренной книге, а не в поваренной книге LWRP.
Все это работает нормально, пока, по-видимому, вызовы не станут вложенными. В этом случае, если вы используете Omnicheck LWRP для настройки нового экземпляра и запускаете его через Monit, он обновит Monit для вас через Monit LWRP. Это отлично работает для задания Omnicheck по умолчанию, которое создается как часть кулинарной книги LWRP, но когда я пытаюсь создать новое задание Omnicheck из другой кулинарной книги, Monit LWRP задыхается и жалуется, что не может найти файл для ресурса шаблона. .
Проблема в том, что рассматриваемый файл шаблона находится в кулинарной книге Omnicheck, но new_resource.cookbook в Monit LWRP оценивается в кулинарную книгу верхнего уровня, а не в кулинарную книгу Omnicheck.
Итак, путь выглядит так:
приложение -> Omnicheck -> Monit
В данном случае в Monit LWRP значением new_resource.cookbook является «приложение», а не «Omnicheck».
Поскольку кажется, что new_resource.cookbook — это не то, что мне нужно/хочу, как я могу определить кулинарную книгу вызывающей стороны LWRP?
Соответствующая ошибка выглядит примерно так:
[2014-08-21T00:46:15+00:00] ERROR: my_omnicheck_service[chef] (application::default line 30) had an error: Chef::Exceptions::FileNotFound: template[/some/path/omnicheck/etc/stage/chef.conf] (/var/chef/cache/cookbooks/my_omnicheck/providers/service.rb line 10) had an error: Chef::Exceptions::FileNotFound: Cookbook 'application' (0.1.5) does not contain a file at any of these locations:
templates/centos-5.8/omnicheck.erb
templates/centos/omnicheck.erb
templates/default/omnicheck.erb