Sha256: df6757ebbf5d3fb5e1ace56433536d2dfcb3b7e6b816b8eb82c4e82ec9ddbe55

Contents?: true

Size: 1.66 KB

Versions: 7

Compression:

Stored size: 1.66 KB

Contents

require 'timeout'
require 'open-uri'

# Provide a set of utility static methods that help with resolving the EC2
# fact.
module Facter::Util::EC2
  class << self
    # 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.
    #
    def can_connect?(wait_sec=2)
      url = "http://169.254.169.254:80/"
      Timeout::timeout(wait_sec) {open(url)}
      return true
      rescue Timeout::Error
        return false
      rescue
        return false
    end

    # Test if this host has a mac address used by Eucalyptus clouds, which
    # normally is +d0:0d+.
    def has_euca_mac?
      !!(Facter.value(:macaddress) =~ %r{^[dD]0:0[dD]:})
    end

    # 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)
    def has_openstack_mac?
      !!(Facter.value(:macaddress) =~ %r{^(02|[fF][aA]):16:3[eE]})
    end

    # 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+.
    def has_ec2_arp?
      mac_address = "fe:ff:ff:ff:ff:ff"
      if Facter.value(:kernel) == 'windows'
        arp_command = "arp -a"
        mac_address.gsub!(":","-")
      else
        arp_command = "arp -an"
      end

      arp_table = Facter::Util::Resolution.exec(arp_command)
      if not arp_table.nil?
        arp_table.each_line do |line|
          return true if line.downcase.include?(mac_address)
        end
      end
      return false
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
facter-1.6.14 lib/facter/util/ec2.rb
facter-1.6.14.rc1 lib/facter/util/ec2.rb
facter-1.6.13 lib/facter/util/ec2.rb
facter-1.6.13.rc1 lib/facter/util/ec2.rb
facter-1.6.12 lib/facter/util/ec2.rb
facter-1.6.12.rc2 lib/facter/util/ec2.rb
facter-1.6.12.rc1 lib/facter/util/ec2.rb