4

我有一本 Chef 食谱,其中包含passenger_apache2::mod_rails来自 Passenger_apache2 食谱的食谱。在服务器的第一次 Chef 运行中,这创建了两个(有效的)配置文件:

# /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /var/lib/gems/1.9.1/gems/passenger-3.0.11/ext/apache2/mod_passenger.so

# /etc/apache2/mods-available/passenger.conf
PassengerRoot /var/lib/gems/1.9.1/gems/passenger-3.0.11
PassengerRuby /usr/bin/ruby1.9.1
PassengerMaxPoolSize 6

这些是通过使用说明书的模板passenger.load.erbpassenger.conf.erb分别使用node[:languages][:ruby][:ruby_bin]和创建的node[:languages][:ruby][:gems_dir]。这些属性由 Ohai 自动填充

在第二次运行时chef-client,这些文件被搞砸了。这是他们现在的样子:

# /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /gems/passenger-3.0.11/ext/apache2/mod_passenger.so

# /etc/apache2/mods-available/passenger.conf
PassengerRoot /gems/passenger-3.0.11
PassengerRuby 
PassengerMaxPoolSize 6

因此,在 Chef 运行期间似乎node[:languages][:ruby]没有填充。但是,如果我直接从服务器上的 IRB 会话调用 Ohai,它会正确显示。

$ sudo -Hu root /usr/bin/irb1.9.1
irb(main):001:0> require 'yaml'
irb(main):002:0> require 'chef'
irb(main):003:0> node = YAML::load(`/usr/local/bin/ohai`)
irb(main):004:0> node['languages']['ruby']['ruby_bin']
=> "/usr/bin/ruby1.9.1"
irb(main):005:0> mash = Chef::Mash.new(node)
irb(main):006:0> mash[:languages][:ruby][:ruby_bin]
=> "/usr/bin/ruby1.9.1"

我可以修复该文件,但它不会阻止问题在下一次 Chef 运行时再次出现。我对如何进一步适当地解决此问题感到有些困惑。

有没有其他人遇到过这个问题?我还没有尝试在我的食谱或角色中手动设置这些属性,但我认为我不应该这样做;不应该覆盖自动属性。

4

1 回答 1

1

我想我只是通过重新启动厨师客户端解决了这个问题,但我仍然对根本原因感到困惑。

我相信(在我遇到这个问题的时候)主厨客户端守护进程的运行实例是我用knife bootstrap. 我们的引导模板安装了 ruby​​1.9.1 包,但可能是 chef-client 守护进程未能正确加载它。(我对此很模糊。)

我第一次尝试添加ohai "reload"到我的食谱中,在下一次预定的 Chef 运行中,配置文件仍然损坏。

接下来我跑了service chef-client restart,然后 Chef 正确地填充了有问题的配置文件。在下一次运行中,他们仍然是正确的。

所以我希望这会消失,但我仍然困惑为什么我正在运行的厨师客户端实例无法正确地从 Ohai 重新加载自动属性。如果有对 Chef 有更深入操作知识的人遇到这种情况,我仍然欢迎任何评论或战争故事。

于 2013-01-03T15:16:04.557 回答