Issue #6976 has been updated by James Turnbull.

Status changed from Ready For Testing to Available In Testing Branch

commit:53cd946685fe5790dbbe5b2a3964e6d861bbfdde
----------------------------------------
Bug #6976: Better EC2 fact and Arp facts
https://projects.puppetlabs.com/issues/6976

Author: James Turnbull
Status: Available In Testing Branch
Priority: Normal
Assignee: 
Category: library
Target version: 1.5.9
Keywords: 
Branch: https://github.com/jamtur01/facter/tree/tickets/master/6976


Ohad's updated code for EC2 and Arp.

<pre>
From: Ohad Levy <[email protected]>

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 <[email protected]>
---
 lib/facter/arp.rb |   12 ++++++++----
 lib/facter/ec2.rb |   16 +++++-----------
 2 files changed, 13 insertions(+), 15 deletions(-)

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..b36790b 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)
-- 
1.7.4
</pre>



-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://projects.puppetlabs.com/my/account

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-bugs?hl=en.

Reply via email to