解決方法
参考: http://www.opscode.com/blog/2012/05/30/ohai-6-14-0-released/
/etc/chef/ohai/hints/ec2.json
があれば期待通り動作する。中身は valid な JSON であれば何でも良い。
mkdir -p /etc/chef/ohai/hints
echo {} > /etc/chef/ohai/hints/ec2.json
で OK。
原因
サーバの情報を収集する Ohai で、EC2 か判定する処理で下記のメソッドが使用される。
# ohai-6.16.0/lib/ohai/plugins/ec2.rb
def has_ec2_mac?
network[:interfaces].values.each do |iface|
unless iface[:arp].nil?
if iface[:arp].value?("fe:ff:ff:ff:ff:ff")
Ohai::Log.debug("has_ec2_mac? == true")
return true
end
end
end
Ohai::Log.debug("has_ec2_mac? == false")
false
end
しかし、VPC 内ではこのメソッドは false を返すため、EC2 であると判定されない。/etc/chef/ohai/hints/ec2.json
があれば、このメソッドを使うことなく、EC2 であると判定するようになる
ちなみに /etc/chef/ohai/hints/rackspace.json
なら rackspace だと判定したりする。冒頭の参考 URL 参照。
Chef でこのファイルを作成すると...
Cookbook の template で作成してみたけど、node の情報は Cookbook のロードより前に収集してるのか、初回の cook ではうまくいかない。次からは期待通りに動作するのだけど。うーむ。
別のパスにする...のは難しそう
/etc/chef/ohai/hints
というパスは Ohai::Config.hints_path
で (1 要素の Array で) 指定されているので、ここに任意のパスを追加すればよい...のだけど、Chef 使用時にどのタイミングで指定すればいいのかわからなかった。