Chef, ресурс Apache2 Cookbook не может найти службу [apache2] при вызове из пользовательского ресурса
В моей собственной поваренной книге шеф-повара (находится по адресу https://github.com/sanguis/chef-omeka/tree/lwrp).
Я вызываю ресурс Apache2 web_app из пользовательского ресурса (LWRP), который вызывается из пользовательского рецепта solo.rb.
include_recipe 'apache2'
web_app url do
server_name url
server_aliases aliaes
cookbook_name 'apache2'
docroot dir
allow_override 'All'
directory_index 'false'
# notifies :reload, 'service[apache2]', :delayed
end
Это это возвращает ошибку:
[#] [2016-02-23T23:02:31+00:00] FATAL: Пожалуйста, предоставьте содержимое файла stacktrace.out, если вы отправляете отчет об ошибке
[#] [2016-02-23T23:02:31+00:00] ОШИБКА: instanceomeka.dev произошла ошибка: Chef::Exceptions::ResourceNotFound: ресурс execute[заголовки a2enmod] настроен на уведомление службы ресурсов [apache2] с перезагрузкой действия, но служба [apache2] не может быть найдена в коллекции ресурсов. execute[заголовки a2enmod] определено в /tmp/kitchen/cache/cookbooks/apache2/definitions/apache_module.rb:35:in `block in from_file'
Однако, когда я вызываю тот же ресурс прямо из пользовательского рецепта здесь (строка 126), он работает.
Мой список запуска ниже
# - recipe[build-essential]
- recipe[php::default]
- recipe[apache2]
- recipe[apache2::mod_rewrite]
# - recipe[apache2::mod_expires]
- recipe[apache2::mod_ssl]
- recipe[apache2::mod_php5]
- recipe[omeka::default]
- recipe[omeka::solo]
attributes: # - recipe[build-essential]
- recipe[php::default]
- recipe[apache2]
- recipe[apache2::mod_rewrite]
# - recipe[apache2::mod_expires]
- recipe[apache2::mod_ssl]
- recipe[apache2::mod_php5]
- recipe[omeka::default]
- recipe[omeka::solo]
attributes:
machine_fqdn: omeka.dev
machine_fqdn_as_hostname: true
apache2:
listen_ports: ["80", "443"]
machine_fqdn: omeka.dev
machine_fqdn_as_hostname: true
apache2:
listen_ports: ["80", "443"]
Это не работает как на Ubuntu 14.04, так и на centos7.
1 ответ
На данный момент это известная проблема с несколькими обходными путями. Проблема в том, что использование новой системы пользовательских ресурсов обеспечивает use_inline_resources
Режим, который на 99% отличная идея, кроме этого. Этот режим создает изолированный контекст выполнения внутри пользовательского ресурса, поэтому он не может видеть "другие" ресурсы для целей уведомлений. Вспомогательная библиотека Poise предлагает некоторые инструменты, чтобы обойти это, но с ядром Chef единственным основным обходным путем является супер-неподдерживаемый (то есть это может сломаться без основного выпуска):
web_app url do
# ...
notifies :reload, Chef.run_context.resource_collection.find('service[apache2]')
end