私は、 passenger_apache2 クックブックpassenger_apache2::mod_rails
のレシピを含む Chef クックブックを持っています。サーバーの最初の Chef 実行で、これにより 2 つの (有効な) 構成ファイルが作成されました。
# /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.erb と Passenger.conf.erb をそれぞれ使用して作成され、とを使用node[:languages][:ruby][:ruby_bin]
しnode[:languages][:ruby][:gems_dir]
ます。これらの属性はOhai によって自動的に入力されます。
を 2 回目に実行すると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
そのためnode[:languages][:ruby]
、Chef の実行中にデータが取り込まれていないようです。しかし、サーバー上の 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 実行時に問題が再発するのを止めることはできません。この問題をさらに適切にトラブルシューティングする方法に少し困惑しています。
他の誰かがこの問題に遭遇しましたか? クックブックまたはロールでこれらの属性を手動で設定しようとしたことはまだありませんが、そうすべきだとは思いません。自動属性はオーバーライドされるべきではありません。