Chef, ресурс поваренной книги Apache2 не может найти службу [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: выполнение ресурса [заголовки 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.


person Josh Beauregard    schedule 24.02.2016    source источник


Ответы (1)


Это известная проблема с несколькими обходными путями на данный момент. Проблема в том, что использование новой пользовательской системы ресурсов обеспечивает режим use_inline_resources, что на 99% является отличной идеей, за исключением этого. Этот режим создает изолированный контекст запуска внутри пользовательского ресурса, поэтому он не может видеть «вне» другие ресурсы для целей уведомлений. Вспомогательная библиотека Poise предлагает некоторые инструменты, чтобы обойти это, но с ядром Chef единственным серьезным обходным путем является супер-неподдерживаемый (т. е. это может сломаться без основного выпуска):

web_app url do
  # ...
  notifies :reload, Chef.run_context.resource_collection.find('service[apache2]')
end
person coderanger    schedule 24.02.2016
comment
так что, как говорится, я создаю ресурс в своей поваренной книге, который я хочу использовать из других поваренных книг, должен ли я просто использовать старый стиль LWRP, пока вышеперечисленное не будет решено? - person Josh Beauregard; 25.02.2016
comment
Вышеупомянутое не будет решено, AFAIK, это системная проблема, связанная с тем, как основная команда Chef реализует вещи. Этот вариант использования, вероятно, будет лучше обслуживаться помощниками Poise или аналогичными проектами, чем внутренними инструментами Chef. LWRP старого стиля затрагиваются таким же образом, если вы не use_inline_resources что вы не должны делать, потому что это имеет еще более странные проблемы с секвенированием. - person coderanger; 25.02.2016