summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG3
-rw-r--r--lib/facter/ipmess.rb46
-rw-r--r--lib/facter/util/ip.rb40
3 files changed, 76 insertions, 13 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 3be08ea..b4d5770 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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
+