lib/facter/ipaddress6.rb in facter-1.7.2 vs lib/facter/ipaddress6.rb in facter-1.7.3.rc1

- old
+ new

@@ -24,11 +24,11 @@ require 'facter/util/ip' def get_address_after_token(output, token, return_first=false) ip = nil - output.scan(/#{token} ((?>[0-9,a-f,A-F]*\:{1,2})+[0-9,a-f,A-F]{0,4})/).each do |match| + String(output).scan(/#{token}\s?((?>[0-9,a-f,A-F]*\:{1,2})+[0-9,a-f,A-F]{0,4})/).each do |match| match = match.first unless match =~ /fe80.*/ or match == "::1" ip = match break if return_first end @@ -64,10 +64,19 @@ end Facter.add(:ipaddress6) do confine :kernel => :windows setcode do - output = Facter::Util::Resolution.exec("#{ENV['SYSTEMROOT']}/system32/netsh.exe interface ipv6 show address level=verbose") + require 'facter/util/ip/windows' + ipaddr = nil - get_address_after_token(output, 'Address', true) + adapters = Facter::Util::IP::Windows.get_preferred_ipv6_adapters + adapters.find do |nic| + nic.IPAddress.any? do |addr| + ipaddr = addr if Facter::Util::IP::Windows.valid_ipv6_address?(addr) + ipaddr + end + end + + ipaddr end end