module Facter::Util::EC2

Provide a set of utility static methods that help with resolving the EC2 fact.

Public Class Methods

can_connect?(wait_sec=2) click to toggle source

Test if we can connect to the EC2 api. Return true if able to connect. On failure this function fails silently and returns false.

The wait_sec parameter provides you with an adjustable timeout.

# File lib/facter/util/ec2.rb, line 13
def can_connect?(wait_sec=2)
  Facter.warnonce("#{self}.#{__method__} is deprecated; see the Facter::EC2 classes instead")
  url = "http://169.254.169.254:80/"
  Timeout::timeout(wait_sec) {open(url)}
  return true
rescue Timeout::Error
  return false
rescue
  return false
end
has_ec2_arp?() click to toggle source

Test if the host has an arp entry in its cache that matches the EC2 arp, which is normally fe:ff:ff:ff:ff:ff.

# File lib/facter/util/ec2.rb, line 41
def has_ec2_arp?
  Facter.warnonce("#{self}.#{__method__} is deprecated; see the Facter::EC2 classes instead")
  kernel = Facter.value(:kernel)

  mac_address_re = case kernel
                   when /Windows/i
                     /fe-ff-ff-ff-ff-ff/i
                   else
                     /fe:ff:ff:ff:ff:ff/i
                   end

  arp_command = case kernel
                when /Windows/i, /SunOS/i
                  "arp -a"
                else
                  "arp -an"
                end

  if arp_table = Facter::Core::Execution.exec(arp_command)
    return true if arp_table.match(mac_address_re)
  end
  return false
end
has_euca_mac?() click to toggle source

Test if this host has a mac address used by Eucalyptus clouds, which normally is d0:0d.

# File lib/facter/util/ec2.rb, line 26
def has_euca_mac?
  Facter.warnonce("#{self}.#{__method__} is deprecated; see the Facter::EC2 classes instead")
  !!(Facter.value(:macaddress) =~ %r{^[dD]0:0[dD]:})
end
has_openstack_mac?() click to toggle source

Test if this host has a mac address used by OpenStack, which normally starts with FA:16:3E (older versions of OpenStack may generate mac addresses starting with 02:16:3E)

# File lib/facter/util/ec2.rb, line 34
def has_openstack_mac?
  Facter.warnonce("#{self}.#{__method__} is deprecated; see the Facter::EC2 classes instead")
  !!(Facter.value(:macaddress) =~ %r{^(02|[fF][aA]):16:3[eE]})
end
userdata(version="latest") click to toggle source

userdata returns a single string containing the body of the response of the GET request for the URI 169.254.169.254/latest/user-data/ If the metadata server responds with a 404 Not Found error code then this method retuns `nil`.

@param version [String] containing the API version for the request. Defaults to “latest” and other examples are documented at aws.amazon.com/archives/Amazon%20EC2

@api public

@return [String] containing the response body or `nil`

# File lib/facter/util/ec2.rb, line 79
def self.userdata(version="latest")
  Facter.warnonce("#{self}.#{__method__} is deprecated; see the Facter::EC2 classes instead")
  uri = "http://169.254.169.254/#{version}/user-data/"
  begin
    read_uri(uri)
  rescue OpenURI::HTTPError => detail
    case detail.message
    when /404 Not Found/i
      Facter.debug "No user-data present at #{uri}: server responded with #{detail.message}"
      return nil
    else
      raise detail
    end
  end
end

Private Class Methods

read_uri(uri) click to toggle source

::read_uri provides a seam method to easily test the HTTP client functionality of a HTTP based metadata server.

@api private

@return [String] containing the body of the response

# File lib/facter/util/ec2.rb, line 102
def self.read_uri(uri)
  open(uri).read
end