diff options
Diffstat (limited to 'lib/facter')
-rw-r--r-- | lib/facter/arp.rb | 22 | ||||
-rw-r--r-- | lib/facter/util/ip.rb | 7 |
2 files changed, 29 insertions, 0 deletions
diff --git a/lib/facter/arp.rb b/lib/facter/arp.rb new file mode 100644 index 0000000..f4b7709 --- /dev/null +++ b/lib/facter/arp.rb @@ -0,0 +1,22 @@ +require 'facter/util/ip' + +Facter.add(:arp) do + confine :kernel => :linux + setcode do + arp = [] + output = %x{/usr/sbin/arp -a} + output.each_line do |s| + arp.push($1) if s =~ /^\S+\s\S+\s\S+\s(\S+)\s\S+\s\S+\s\S+$/ + end + arp[0] + end +end + +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) + end + end +end diff --git a/lib/facter/util/ip.rb b/lib/facter/util/ip.rb index e4370dc..8b6dbf4 100644 --- a/lib/facter/util/ip.rb +++ b/lib/facter/util/ip.rb @@ -169,4 +169,11 @@ module Facter::Util::IP network = ip.mask(subnet.to_s).to_s end end + + def self.get_arp_value(interface) + arp = Facter::Util::Resolution.exec("arp -en -i #{interface} | sed -e 1d") + if arp =~ /^\S+\s+\w+\s+(\S+)\s+\w\s+\S+$/ + return $1 + end + end end |