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
Другие вопросы по тегам