lib/ohai/plugins/ec2.rb in ohai-0.5.8 vs lib/ohai/plugins/ec2.rb in ohai-0.6.0.beta.0

- old
+ new

@@ -17,89 +17,40 @@ # See the License for the specific language governing permissions and # limitations under the License. provides "ec2" -require 'open-uri' -require 'socket' +require 'ohai/mixin/ec2_metadata' require_plugin "hostname" require_plugin "kernel" require_plugin "network" -EC2_METADATA_ADDR = "169.254.169.254" unless defined?(EC2_METADATA_ADDR) -EC2_METADATA_URL = "http://#{EC2_METADATA_ADDR}/2008-02-01/meta-data" unless defined?(EC2_METADATA_URL) -EC2_USERDATA_URL = "http://#{EC2_METADATA_ADDR}/2008-02-01/user-data" unless defined?(EC2_USERDATA_URL) -EC2_ARRAY_VALUES = %w(security-groups) +extend Ohai::Mixin::Ec2Metadata -def can_metadata_connect?(addr, port, timeout=2) - t = Socket.new(Socket::Constants::AF_INET, Socket::Constants::SOCK_STREAM, 0) - saddr = Socket.pack_sockaddr_in(port, addr) - connected = false - - begin - t.connect_nonblock(saddr) - rescue Errno::EINPROGRESS - r,w,e = IO::select(nil,[t],nil,timeout) - if !w.nil? - connected = true - else - begin - t.connect_nonblock(saddr) - rescue Errno::EISCONN - t.close - connected = true - rescue SystemCallError - end - end - rescue SystemCallError - end - - connected -end - def has_ec2_mac? network[:interfaces].values.each do |iface| unless iface[:arp].nil? - return true if iface[:arp].value?("fe:ff:ff:ff:ff:ff") + has_mac = iface[:arp].value?("fe:ff:ff:ff:ff:ff") + Ohai::Log.debug("has_ec2_mac? == true") + return true if has_mac end end + Ohai::Log.debug("has_ec2_mac? == false") false end -def metadata(id='') - OpenURI.open_uri("#{EC2_METADATA_URL}/#{id}").read.split("\n").each do |o| - key = "#{id}#{o.gsub(/\=.*$/, '/')}" - if key[-1..-1] != '/' - ec2[key.gsub(/\-|\//, '_').to_sym] = - if EC2_ARRAY_VALUES.include? key - OpenURI.open_uri("#{EC2_METADATA_URL}/#{key}").read.split("\n") - else - OpenURI.open_uri("#{EC2_METADATA_URL}/#{key}").read - end - else - metadata(key) - end - end -end - -def userdata() - ec2[:userdata] = nil - # assumes the only expected error is the 404 if there's no user-data - begin - ec2[:userdata] = OpenURI.open_uri("#{EC2_USERDATA_URL}/").read - rescue OpenURI::HTTPError - end -end - def looks_like_ec2? # Try non-blocking connect so we don't "block" if # the Xen environment is *not* EC2 has_ec2_mac? && can_metadata_connect?(EC2_METADATA_ADDR,80) end if looks_like_ec2? + Ohai::Log.debug("looks_like_ec2? == true") ec2 Mash.new - self.metadata - self.userdata + self.fetch_metadata.each {|k, v| ec2[k] = v } + ec2[:userdata] = self.fetch_userdata +else + Ohai::Log.debug("looks_like_ec2? == false") + false end -