LoginSignup
13
12

More than 5 years have passed since last update.

Chef で Amazon VPC 内に配置したインスタンスの node["ec2"] が nil になってしまう場合

Posted at

解決方法

参考: 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 使用時にどのタイミングで指定すればいいのかわからなかった。

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12