diff options
-rw-r--r-- | CHANGELOG | 3 | ||||
-rw-r--r-- | lib/facter/ipmess.rb | 46 | ||||
-rw-r--r-- | lib/facter/util/ip.rb | 40 |
3 files changed, 76 insertions, 13 deletions
@@ -1,4 +1,7 @@ ?: + Refactered ipmess.rb and util/ip.rb to support separate *BSD logic for + *BSD aliased interfaces. + Updated dmidecode facts fixing ticket #60 Added AIX support for some facts diff --git a/lib/facter/ipmess.rb b/lib/facter/ipmess.rb index 0ddc315..215d557 100644 --- a/lib/facter/ipmess.rb +++ b/lib/facter/ipmess.rb @@ -14,32 +14,62 @@ Facter.add(:interfaces) do end end - -Facter::IPAddress.get_interfaces.each do |interface| +case Facter.value(:kernel) + when 'SunOS', 'Linux' + Facter::IPAddress.get_interfaces.each do |interface| mi = interface.gsub(':', '_') Facter.add("ipaddress_" + mi) do - confine :kernel => [ :sunos, :freebsd, :openbsd, :netbsd, :linux ] + confine :kernel => [ :sunos, :linux ] setcode do label = 'ipaddress' - Facter::IPAddress.get_interface_value(interface, label) + Facter::IPAddress.get_interface_value_nonbsd(interface, label) end end Facter.add("macaddress_" + mi) do - confine :kernel => [ :sunos, :freebsd, :openbsd, :netbsd, :linux ] + confine :kernel => [ :sunos, :linux ] setcode do label = 'macaddress' - Facter::IPAddress.get_interface_value(interface, label) + Facter::IPAddress.get_interface_value_nonbsd(interface, label) end end Facter.add("netmask_" + mi) do - confine :kernel => [ :sunos, :freebsd, :openbsd, :netbsd, :linux ] + confine :kernel => [ :sunos, :linux ] setcode do label = 'netmask' - Facter::IPAddress.get_interface_value(interface, label) + Facter::IPAddress.get_interface_value_nonbsd(interface, label) + end + end + end + + when 'OpenBSD', 'NetBSD', 'FreeBSD' + Facter::IPAddress.get_interfaces.each do |interface| + mi = interface.gsub(':', '_') + + Facter.add("ipaddress_" + mi) do + confine :kernel => [ :openbsd, :freebsd, :netbsd ] + setcode do + label = 'ipaddress' + Facter::IPAddress.get_interface_value_bsd(interface, label) end end + Facter.add("netmask_" + mi) do + confine :kernel => [ :openbsd, :freebsd, :netbsd ] + setcode do + label = 'netmask' + Facter::IPAddress.get_interface_value_bsd(interface, label) + end + end + + Facter.add("macaddress_" + mi) do + confine :kernel => [ :openbsd, :freebsd, :netbsd ] + setcode do + label = 'macaddress' + Facter::IPAddress.get_interface_value_bsd(interface, label) + end + end + end end diff --git a/lib/facter/util/ip.rb b/lib/facter/util/ip.rb index 6702e5f..fb13383 100644 --- a/lib/facter/util/ip.rb +++ b/lib/facter/util/ip.rb @@ -21,11 +21,9 @@ module Facter::IPAddress end - def self.get_interface_value(interface, label) + def self.get_interface_value_nonbsd(interface, label) - tmp1 =nil - tmp2 = nil - tmp3 = nil + tmp1 = nil case Facter.value(:kernel) when 'Linux' @@ -58,11 +56,43 @@ module Facter::IPAddress output_int.each { |s| tmp1 = $1 if s =~ regex } - end + end if tmp1 value = tmp1 end end + + def self.get_interface_value_bsd(interface, label) + + tmp1 = nil + + int_hash = {} + output_int = %x{/sbin/ifconfig #{interface}} + addr = /inet\s+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/ + mac = /(?:ether|lladdr)\s+(\w\w:\w\w:\w\w:\w\w:\w\w:\w\w)/ + mask = /netmask\s+(\w{10})/ + + case label + when 'ipaddress' + regex = addr + when 'macaddress' + regex = mac + when 'netmask' + regex = mask + end + + if interface != "lo" && interface != "lo0" + output_int.each { |s| + tmp1 = $1 if s =~ regex + } + end + + if tmp1 + value = tmp1 + end + + end end + |