Ohai::Mixin::Ec2Metadata

Public Instance Methods

can_metadata_connect?(addr, port, timeout=2) click to toggle source
# File lib/ohai/mixin/ec2_metadata.rb, line 34
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
  Ohai::Log.debug("can_metadata_connect? == #{connected}")
  connected
end
fetch_dir_metadata(id) click to toggle source
# File lib/ohai/mixin/ec2_metadata.rb, line 90
def fetch_dir_metadata(id)
  metadata = Hash.new
  http_client.get("#{EC2_METADATA_URL}/#{id}").body.split("\n").each do |o|
    key = expand_path(o)
    if key[-1..-1] != '/'
      metadata[metadata_key(key)] = http_client.get("#{EC2_METADATA_URL}/#{id}#{key}").body
    elsif not key.eql?('/')
      metadata[key[0..-2]] = fetch_dir_metadata("#{id}#{key}")
    end
  end
  metadata
end
fetch_json_dir_metadata(id) click to toggle source
# File lib/ohai/mixin/ec2_metadata.rb, line 103
def fetch_json_dir_metadata(id)
  metadata = Hash.new
  http_client.get("#{EC2_METADATA_URL}/#{id}").body.split("\n").each do |o|
    key = expand_path(o)
    if key[-1..-1] != '/'
      data = http_client.get("#{EC2_METADATA_URL}/#{id}#{key}").body
      json = StringIO.new(data)
      parser = Yajl::Parser.new
      metadata[metadata_key(key)] = parser.parse(json)
    elsif not key.eql?('/')
      metadata[key[0..-2]] = fetch_json_dir_metadata("#{id}#{key}")
    end
  end
  metadata
end
fetch_metadata(id='') click to toggle source
# File lib/ohai/mixin/ec2_metadata.rb, line 64
def fetch_metadata(id='')
  metadata = Hash.new
  http_client.get("#{EC2_METADATA_URL}/#{id}").body.split("\n").each do |o|
    key = expand_path("#{id}#{o}")
    if key[-1..-1] != '/'
      metadata[metadata_key(key)] =
        if EC2_ARRAY_VALUES.include? key
          http_client.get("#{EC2_METADATA_URL}/#{key}").body.split("\n")
        else
          http_client.get("#{EC2_METADATA_URL}/#{key}").body
        end
    elsif not key.eql?(id) and not key.eql?('/')
      name = key[0..-2]
      sym = metadata_key(name)
      if EC2_ARRAY_DIR.include?(name)
        metadata[sym] = fetch_dir_metadata(key)
      elsif EC2_JSON_DIR.include?(name)
        metadata[sym] = fetch_json_dir_metadata(key)
      else
        fetch_metadata(key).each{|k,v| metadata[k] = v}
      end
    end
  end
  metadata
end
fetch_userdata() click to toggle source
# File lib/ohai/mixin/ec2_metadata.rb, line 119
def fetch_userdata()
  response = http_client.get("#{EC2_USERDATA_URL}/")
  response.code == "200" ? response.body : nil
end
http_client() click to toggle source
# File lib/ohai/mixin/ec2_metadata.rb, line 60
def http_client
  Net::HTTP.start(EC2_METADATA_ADDR).tap {|h| h.read_timeout = 600}
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.