Chef: вложенная проблема LWRP с ресурсами cookbook_file/template

Я написал пару кулинарных книг 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

person gnat    schedule 22.08.2014    source источник
comment
Вы когда-нибудь решали эту проблему?   -  person jmif    schedule 26.10.2014


Ответы (1)


Мне это не очень нравится, и я надеюсь, что кто-то знает лучший способ решить проблему, но я обнаружил, что могу запросить new_resource.source_line, чтобы получить информацию, которая мне нужна:

callingCookbook = new_resource.cookbook_name
if (new_resource.source_line =~ /\/cookbooks\/([^\/]+)\//) then
  callingCookbook = $1
end

Затем я могу использовать callCookbook там, где раньше использовал new_resource.cookbook_name.

person gnat    schedule 22.08.2014