blob: db3805bb36aeaca6c398578c8b841da94301e5cb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# Fact: ipaddress6
#
# Purpose: Returns the "main" IPv6 IP address of a system.
#
# Resolution:
# OS dependant code that parses the output of various networking
# tools and currently not very intelligent. Returns the first
# non-loopback and non-linklocal address found in the ouput unless
# a default route can be mapped to a routeable interface. Guessing
# an interface is currently only possible with BSD type systems
# to many assumptions have to be made on other platforms to make
# this work with the current code. Most code ported or modeled
# after the ipaddress fact for the sake of similar functionality
# and familiar mechanics.
#
# Caveats:
#
# Cody Herriges <c.a.herriges@gmail.com>
#
# Used the ipaddress fact that is already part of
# Facter as a template.
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|
match = match.first
unless match =~ /fe80.*/ or match == "::1"
ip = match
break if return_first
end
end
ip
end
Facter.add(:ipaddress6) do
confine :kernel => :linux
setcode do
output = Facter::Util::Resolution.exec('/sbin/ifconfig')
get_address_after_token(output, 'inet6 addr:')
end
end
Facter.add(:ipaddress6) do
confine :kernel => %w{SunOS}
setcode do
output = Facter::Util::Resolution.exec('/usr/sbin/ifconfig -a')
get_address_after_token(output, 'inet6')
end
end
Facter.add(:ipaddress6) do
confine :kernel => %w{Darwin FreeBSD OpenBSD}
setcode do
output = Facter::Util::Resolution.exec('/sbin/ifconfig -a')
get_address_after_token(output, 'inet6', true)
end
end
|