Chef,Apache2 cookbook 资源在从自定义资源调用时无法找到服务 [apache2]
Chef, Apache2 cookbook ressource fails to find service[apache2] when called from a custom resource
在我的定制厨师食谱中(位于 https://github.com/sanguis/chef-omeka/tree/lwrp)。
我正在从自定义资源 (LWRP) 中调用 Apache2 资源 web_app,该资源是从自定义 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
这个这个returns一个错误:
[#] [2016-02-23T23:02:31+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[#] [2016-02-23T23:02:31+00:00] ERROR: instanceomeka.dev had an error: Chef::Exceptions::ResourceNotFound: resource execute[a2enmod headers] is configured to notify resource service[apache2] with action reload, but service[apache2] cannot be found in the resource collection. execute[a2enmod headers] is defined in /tmp/kitchen/cache/cookbooks/apache2/definitions/apache_module.rb:35:in `block in from_file'
然而,当我直接从自定义配方内部调用相同的资源时 here(第 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 上都失败了。
这是一个已知问题,目前几乎没有解决方法。问题是使用新的自定义资源系统强制执行 use_inline_resources
模式,除此之外,这是 99% 的好主意。该模式在自定义资源内创建了一个隔离的 运行 上下文,因此它无法看到 "out" 其他资源以进行通知。 Poise 帮助程序库提供了一些工具来解决这个问题,但对于 Chef 核心,唯一的主要解决方法是超级不受支持(即这可能会在没有主要版本的情况下中断):
web_app url do
# ...
notifies :reload, Chef.run_context.resource_collection.find('service[apache2]')
end
在我的定制厨师食谱中(位于 https://github.com/sanguis/chef-omeka/tree/lwrp)。
我正在从自定义资源 (LWRP) 中调用 Apache2 资源 web_app,该资源是从自定义 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
这个这个returns一个错误:
[#] [2016-02-23T23:02:31+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[#] [2016-02-23T23:02:31+00:00] ERROR: instanceomeka.dev had an error: Chef::Exceptions::ResourceNotFound: resource execute[a2enmod headers] is configured to notify resource service[apache2] with action reload, but service[apache2] cannot be found in the resource collection. execute[a2enmod headers] is defined in /tmp/kitchen/cache/cookbooks/apache2/definitions/apache_module.rb:35:in `block in from_file'
然而,当我直接从自定义配方内部调用相同的资源时 here(第 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 上都失败了。
这是一个已知问题,目前几乎没有解决方法。问题是使用新的自定义资源系统强制执行 use_inline_resources
模式,除此之外,这是 99% 的好主意。该模式在自定义资源内创建了一个隔离的 运行 上下文,因此它无法看到 "out" 其他资源以进行通知。 Poise 帮助程序库提供了一些工具来解决这个问题,但对于 Chef 核心,唯一的主要解决方法是超级不受支持(即这可能会在没有主要版本的情况下中断):
web_app url do
# ...
notifies :reload, Chef.run_context.resource_collection.find('service[apache2]')
end