[Pkg-puppet-devel] [SCM] Packaging of Facter for debian branch, experimental, updated. debian/1.5.8-2-160-gb26a2a8

Jacob Helwig jacob at puppetlabs.com
Tue May 10 08:40:00 UTC 2011


The following commit has been merged in the experimental branch:
commit acf0bb21c88edb0eacf4ab73402614c721cf2f76
Author: Ohad Levy <ohadlevy at gmail.com>
Date:   Tue Mar 22 23:04:23 2011 +0200

    Ensures that ARP facts are returned only on EC2 hosts
    
    ARP facts on large network might lead to inconstant values
    as we are always using the first ARP entry from the output of the ARP
    command
    
    Signed-off-by: Ohad Levy <ohadlevy at gmail.com>

diff --git a/lib/facter/arp.rb b/lib/facter/arp.rb
index 5035ad0..0a7cf67 100644
--- a/lib/facter/arp.rb
+++ b/lib/facter/arp.rb
@@ -3,14 +3,17 @@ require 'facter/util/ip'
 Facter.add(:arp) do
   confine :kernel => :linux
   setcode do
-    arp = []
     output = Facter::Util::Resolution.exec('arp -a')
     if not output.nil?
+      arp = ""
       output.each_line do |s|
-        arp.push($1) if s =~ /^\S+\s\S+\s\S+\s(\S+)\s\S+\s\S+\s\S+$/
+        if s =~ /^\S+\s\S+\s\S+\s(\S+)\s\S+\s\S+\s\S+$/
+          arp = $1
+          break # stops on the first match
+        end
       end
     end
-    arp[0]
+    EC2_ARP == arp ? arp : nil
   end
 end
 
@@ -18,7 +21,8 @@ Facter::Util::IP.get_interfaces.each do |interface|
   Facter.add("arp_" + Facter::Util::IP.alphafy(interface)) do
     confine :kernel => :linux
     setcode do
-      Facter::Util::IP.get_arp_value(interface)
+      arp = Facter::Util::IP.get_arp_value(interface)
+      EC2_ARP == arp ? arp : nil
     end
   end
 end
diff --git a/lib/facter/ec2.rb b/lib/facter/ec2.rb
index 29b2a1c..693e78e 100644
--- a/lib/facter/ec2.rb
+++ b/lib/facter/ec2.rb
@@ -6,9 +6,11 @@
 require 'open-uri'
 require 'socket'
 
-EC2_ADDR = "169.254.169.254"
+EC2_ADDR         = "169.254.169.254"
 EC2_METADATA_URL = "http://#{EC2_ADDR}/2008-02-01/meta-data"
 EC2_USERDATA_URL = "http://#{EC2_ADDR}/2008-02-01/user-data"
+EC2_ARP          = "fe:ff:ff:ff:ff:ff"
+EC2_EUCA_MAC     = %r{^[dD]0:0[dD]:}
 
 def can_metadata_connect?(addr, port, timeout=2)
   t = Socket.new(Socket::Constants::AF_INET, Socket::Constants::SOCK_STREAM, 0)
@@ -61,19 +63,11 @@ def userdata()
 end
 
 def has_euca_mac?
-  if Facter.value(:macaddress) =~ /^[dD]0:0[dD]:/
-    return true
-  else
-    return false
-  end
+  !!(Facter.value(:macaddress) =~ EC2_EUCA_MAC)
 end
 
 def has_ec2_arp?
-  if Facter.value(:arp) == 'fe:ff:ff:ff:ff:ff'
-    return true
-  else
-    return false
-  end
+  !!(Facter.value(:arp) == EC2_ARP)
 end
 
 if (has_euca_mac? || has_ec2_arp?) && can_metadata_connect?(EC2_ADDR,80)

-- 
Packaging of Facter for debian



More information about the Pkg-puppet-devel mailing list