facter 2.4.4 → 2.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. data/lib/facter/core/execution/posix.rb +2 -2
  2. data/lib/facter/gid.rb +1 -1
  3. data/lib/facter/ipaddress.rb +5 -14
  4. data/lib/facter/ipaddress6.rb +3 -2
  5. data/lib/facter/macaddress.rb +3 -8
  6. data/lib/facter/netmask.rb +9 -1
  7. data/lib/facter/processors/os.rb +1 -1
  8. data/lib/facter/util/ip.rb +17 -0
  9. data/lib/facter/util/netmask.rb +0 -6
  10. data/lib/facter/util/virtual.rb +2 -2
  11. data/lib/facter/version.rb +1 -1
  12. data/spec/fixtures/ifconfig/net_route_all_with_multiple_interfaces +2 -0
  13. data/spec/fixtures/ifconfig/net_route_net_tools_1.60.txt +3 -0
  14. data/spec/fixtures/unit/ipaddress/net_route_multiple_127_addresses.txt +3 -0
  15. data/spec/fixtures/unit/ipaddress/net_route_net_tools_1.60.txt +3 -0
  16. data/spec/fixtures/unit/ipaddress/net_route_non_english_locale.txt +3 -0
  17. data/spec/fixtures/unit/ipaddress/net_route_ubuntu_1204.txt +3 -0
  18. data/spec/fixtures/unit/netmask/{darwin_10_8_5.txt → ifconfig_darwin_10_8_5.txt} +0 -0
  19. data/spec/fixtures/unit/netmask/net_route_multiple_127_addresses.txt +3 -0
  20. data/spec/fixtures/unit/netmask/net_route_net_tools_1.60.txt +3 -0
  21. data/spec/fixtures/unit/netmask/net_route_non_english_locale.txt +3 -0
  22. data/spec/fixtures/unit/netmask/net_route_ubuntu_1204.txt +3 -0
  23. data/spec/fixtures/virtual/proc_1_cgroup/in_a_docker_container_with_systemd_slices +10 -0
  24. data/spec/unit/core/execution/posix_spec.rb +10 -0
  25. data/spec/unit/gid_spec.rb +9 -0
  26. data/spec/unit/ipaddress6_spec.rb +16 -4
  27. data/spec/unit/ipaddress_spec.rb +12 -12
  28. data/spec/unit/macaddress_spec.rb +6 -1
  29. data/spec/unit/netmask_spec.rb +17 -4
  30. data/spec/unit/processors/os_spec.rb +2 -0
  31. data/spec/unit/util/virtual_spec.rb +11 -0
  32. metadata +26 -4
@@ -11,11 +11,11 @@ class Facter::Core::Execution::Posix < Facter::Core::Execution::Base
11
11
 
12
12
  def which(bin)
13
13
  if absolute_path?(bin)
14
- return bin if File.executable?(bin)
14
+ return bin if File.executable?(bin) and File.file?(bin)
15
15
  else
16
16
  search_paths.each do |dir|
17
17
  dest = File.join(dir, bin)
18
- return dest if File.executable?(dest)
18
+ return dest if File.executable?(dest) and File.file?(dest)
19
19
  end
20
20
  end
21
21
  nil
@@ -10,7 +10,7 @@
10
10
 
11
11
  Facter.add(:gid) do
12
12
  confine do
13
- Facter::Core::Execution.which('id') && Facter.value(:kernel) != "SunOS"
13
+ Facter::Core::Execution.which('id') && !["SunOS", "windows"].include?(Facter.value(:kernel))
14
14
  end
15
15
  setcode { Facter::Core::Execution.exec('id -ng') }
16
16
  end
@@ -3,7 +3,9 @@
3
3
  # Purpose: Return the main IP address for a host.
4
4
  #
5
5
  # Resolution:
6
- # On the Unixes does an ifconfig, and returns the first non 127.0.0.0/8
6
+ # On Linux and AIX, it examines the routing table and uses the IP address
7
+ # of the default interface.
8
+ # On other Unixes does an ifconfig, and returns the first non 127.0.0.0/8
7
9
  # subnetted IP it finds.
8
10
  # On Windows, it attempts to use the socket library and resolve the machine's
9
11
  # hostname via DNS.
@@ -27,19 +29,8 @@ require 'facter/util/ip'
27
29
  Facter.add(:ipaddress) do
28
30
  confine :kernel => :linux
29
31
  setcode do
30
- ip = nil
31
- output = Facter::Util::IP.exec_ifconfig(["2>/dev/null"])
32
- if output
33
- regexp = /inet (?:addr:)?([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/
34
- output.split("\n").each do |line|
35
- match = regexp.match(line)
36
- if match and not /^127\./.match(match[1])
37
- ip = match[1]
38
- break
39
- end
40
- end
41
- end
42
- ip
32
+ iface = Facter::Util::IP.linux_default_iface
33
+ Facter.value("ipaddress_#{iface}")
43
34
  end
44
35
  end
45
36
 
@@ -37,11 +37,12 @@ def get_address_after_token(output, token, return_first=false)
37
37
  ip
38
38
  end
39
39
 
40
+
40
41
  Facter.add(:ipaddress6) do
41
42
  confine :kernel => :linux
42
43
  setcode do
43
- output = Facter::Util::IP.exec_ifconfig(["2>/dev/null"])
44
- get_address_after_token(output, 'inet6(?: addr:)?')
44
+ iface = Facter::Util::IP.linux_default_iface
45
+ Facter.value("ipaddress6_#{iface}")
45
46
  end
46
47
  end
47
48
 
@@ -12,15 +12,10 @@ require 'facter/util/macaddress'
12
12
  require 'facter/util/ip'
13
13
 
14
14
  Facter.add(:macaddress) do
15
- confine :kernel => 'Linux'
15
+ confine :kernel => :linux
16
16
  setcode do
17
- ether = []
18
- output = Facter::Util::IP.exec_ifconfig(["-a","2>/dev/null"])
19
-
20
- String(output).each_line do |s|
21
- ether.push($1) if s =~ /(?:ether|HWaddr) ((\w{1,2}:){5,}\w{1,2})/
22
- end
23
- Facter::Util::Macaddress.standardize(ether[0])
17
+ iface = Facter::Util::IP.linux_default_iface
18
+ Facter.value("macaddress_#{iface}")
24
19
  end
25
20
  end
26
21
 
@@ -16,8 +16,16 @@
16
16
  #
17
17
  require 'facter/util/netmask'
18
18
 
19
+ Facter.add(:netmask) do
20
+ confine :kernel => :linux
21
+ setcode do
22
+ iface = Facter::Util::IP.linux_default_iface
23
+ Facter.value("netmask_#{iface}")
24
+ end
25
+ end
26
+
19
27
  Facter.add("netmask") do
20
- confine :kernel => [ :sunos, :linux, :freebsd, :openbsd, :netbsd, :darwin, :"gnu/kfreebsd", :dragonfly, :AIX ]
28
+ confine :kernel => [ :sunos, :freebsd, :openbsd, :netbsd, :darwin, :"gnu/kfreebsd", :dragonfly, :AIX ]
21
29
  setcode do
22
30
  Facter::NetMask.get_netmask
23
31
  end
@@ -112,7 +112,7 @@ module Facter
112
112
  # get each physical processor
113
113
  Facter::Util::WMI.execquery("select * from Win32_Processor").each do |proc|
114
114
  # not supported before 2008
115
- if proc.respond_to?(:NumberOfLogicalProcessors)
115
+ if proc.ole_respond_to?(:NumberOfLogicalProcessors)
116
116
  processor_num = proc.NumberOfLogicalProcessors
117
117
  else
118
118
  processor_num = 1
@@ -337,4 +337,21 @@ module Facter::Util::IP
337
337
  network = ip.mask(subnet.to_s).to_s
338
338
  end
339
339
  end
340
+
341
+ def self.read_proc_net_route
342
+ File.read("/proc/net/route")
343
+ end
344
+
345
+ def self.linux_default_iface
346
+ routes = read_proc_net_route
347
+ iface = nil
348
+ routes.split("\n").each do |line|
349
+ parts = line.split
350
+ if parts[1] == "00000000"
351
+ iface = alphafy(parts[0])
352
+ break
353
+ end
354
+ end
355
+ iface
356
+ end
340
357
  end
@@ -5,12 +5,6 @@ module Facter::NetMask
5
5
 
6
6
  ops = nil
7
7
  case Facter.value(:kernel)
8
- when 'Linux'
9
- ops = {
10
- :ifconfig_opts => ['2>/dev/null'],
11
- :regex => %r{#{Facter.value(:ipaddress)}.*?(?:Mask:|netmask)\s*(#{ipregex})}x,
12
- :munge => nil,
13
- }
14
8
  when 'SunOS'
15
9
  ops = {
16
10
  :ifconfig_opts => ['-a'],
@@ -162,7 +162,7 @@ module Facter::Util::Virtual
162
162
  path = Pathname.new('/proc/1/cgroup')
163
163
  return false unless path.readable?
164
164
  begin
165
- in_lxc = path.readlines.any? {|l| l.split(":")[2].to_s.start_with? '/lxc/' }
165
+ in_lxc = path.readlines.any? {|l| l.split(":")[2].to_s.include? '/lxc' }
166
166
  rescue Errno::EPERM => exc
167
167
  # If we get "operation not permitted" here, it probably means we are
168
168
  # running OpenVZ. We are not running LXC anyway, so...
@@ -179,7 +179,7 @@ module Facter::Util::Virtual
179
179
  path = Pathname.new('/proc/1/cgroup')
180
180
  return false unless path.readable?
181
181
  begin
182
- in_docker = path.readlines.any? {|l| l.split(":")[2].to_s.start_with? '/docker/' }
182
+ in_docker = path.readlines.any? {|l| l.split(":")[2].to_s.include? '/docker' }
183
183
  rescue Errno::EPERM => exc
184
184
  # This can fail under OpenVZ, just like in .lxc?
185
185
  return false
@@ -1,6 +1,6 @@
1
1
  module Facter
2
2
  if not defined? FACTERVERSION then
3
- FACTERVERSION = '2.4.4'
3
+ FACTERVERSION = '2.4.5'
4
4
  end
5
5
 
6
6
  # Returns the running version of Facter.
@@ -0,0 +1,2 @@
1
+ eth0 00000000 01D1FC83 0003 0 0 100 00000000 0 0 0
2
+ eth0 01D1FC83 00000000 0001 0 0 100 00FFFFFF 0 0 0
@@ -0,0 +1,3 @@
1
+ Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
2
+ em1 00000000 99D1FC83 0003 0 0 100 00000000 0 0 0
3
+ em1 99D1FC83 99D1FC83 0007 0 0 100 FFFFFFFF 0 0 0
@@ -0,0 +1,3 @@
1
+ Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
2
+ venet0:1 00000000 1400DE0A 0003 0 0 100 00000000 0 0 0
3
+ venet0:1 1400DE0A 1400DE0A 0007 0 0 100 FFFFFFFF 0 0 0
@@ -0,0 +1,3 @@
1
+ Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
2
+ em1 00000000 99D1FC83 0003 0 0 100 00000000 0 0 0
3
+ em1 99D1FC83 99D1FC83 0007 0 0 100 FFFFFFFF 0 0 0
@@ -0,0 +1,3 @@
1
+ Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
2
+ wlan0 00000000 5301A8C0 0003 0 0 100 00000000 0 0 0
3
+ wlan0 5301A8C0 5301A8C0 0007 0 0 100 FFFFFFFF 0 0 0
@@ -0,0 +1,3 @@
1
+ Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
2
+ eth0 00000000 6E50570A 0003 0 0 100 00000000 0 0 0
3
+ eth0 6E50570A 6E50570A 0007 0 0 100 FFFFFFFF 0 0 0
@@ -0,0 +1,3 @@
1
+ Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
2
+ venet0:1 00000000 1400DE0A 0003 0 0 100 00000000 0 0 0
3
+ venet0:1 1400DE0A 1400DE0A 0007 0 0 100 FFFFFFFF 0 0 0
@@ -0,0 +1,3 @@
1
+ Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
2
+ em1 00000000 99D1FC83 0003 0 0 100 00000000 0 0 0
3
+ em1 99D1FC83 99D1FC83 0007 0 0 100 FFFFFFFF 0 0 0
@@ -0,0 +1,3 @@
1
+ Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
2
+ wlan0 00000000 5301A8C0 0003 0 0 100 00000000 0 0 0
3
+ wlan0 5301A8C0 5301A8C0 0007 0 0 100 FFFFFFFF 0 0 0
@@ -0,0 +1,3 @@
1
+ Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
2
+ eth0 00000000 6E50570A 0003 0 0 100 00000000 0 0 0
3
+ eth0 6E50570A 6E50570A 0007 0 0 100 FFFFFFFF 0 0 0
@@ -0,0 +1,10 @@
1
+ 10:hugetlb:/
2
+ 9:perf_event:/
3
+ 8:blkio:/system.slice/docker-8255e18aa44c5809a33db5f324a4b34e3a73b246394e4070cff752cd84d79a6d.scope
4
+ 7:net_cls:/
5
+ 6:freezer:/system.slice/docker-8255e18aa44c5809a33db5f324a4b34e3a73b246394e4070cff752cd84d79a6d.scope
6
+ 5:devices:/system.slice/docker-8255e18aa44c5809a33db5f324a4b34e3a73b246394e4070cff752cd84d79a6d.scope
7
+ 4:memory:/system.slice/docker-8255e18aa44c5809a33db5f324a4b34e3a73b246394e4070cff752cd84d79a6d.scope
8
+ 3:cpuacct,cpu:/system.slice/docker-8255e18aa44c5809a33db5f324a4b34e3a73b246394e4070cff752cd84d79a6d.scope
9
+ 2:cpuset:/system.slice/docker-8255e18aa44c5809a33db5f324a4b34e3a73b246394e4070cff752cd84d79a6d.scope
10
+ 1:name=systemd:/system.slice/docker-8255e18aa44c5809a33db5f324a4b34e3a73b246394e4070cff752cd84d79a6d.scope
@@ -16,6 +16,7 @@ describe Facter::Core::Execution::Posix, :unless => Facter::Util::Config.is_wind
16
16
 
17
17
  context "and provided with an absolute path" do
18
18
  it "should return the binary if executable" do
19
+ File.expects(:file?).with('/opt/foo').returns true
19
20
  File.expects(:executable?).with('/opt/foo').returns true
20
21
  subject.which('/opt/foo').should == '/opt/foo'
21
22
  end
@@ -24,12 +25,21 @@ describe Facter::Core::Execution::Posix, :unless => Facter::Util::Config.is_wind
24
25
  File.expects(:executable?).with('/opt/foo').returns false
25
26
  subject.which('/opt/foo').should be_nil
26
27
  end
28
+
29
+ it "should return nil if the binary is not a file" do
30
+ File.expects(:file?).with('/opt/foo').returns false
31
+ File.expects(:executable?).with('/opt/foo').returns true
32
+ subject.which('/opt/foo').should be_nil
33
+ end
27
34
  end
28
35
 
29
36
  context "and not provided with an absolute path" do
30
37
  it "should return the absolute path if found" do
38
+ File.expects(:file?).with('/bin/foo').never
31
39
  File.expects(:executable?).with('/bin/foo').returns false
40
+ File.expects(:file?).with('/sbin/foo').returns true
32
41
  File.expects(:executable?).with('/sbin/foo').returns true
42
+ File.expects(:file?).with('/usr/sbin/foo').never
33
43
  File.expects(:executable?).with('/usr/sbin/foo').never
34
44
  subject.which('foo').should == '/sbin/foo'
35
45
  end
@@ -39,4 +39,13 @@ describe "gid fact" do
39
39
  Facter.fact(:gid).value.should == nil
40
40
  end
41
41
  end
42
+
43
+ describe "on windows systems" do
44
+ it "is not supported" do
45
+ Facter.fact(:kernel).stubs(:value).returns("windows")
46
+ Facter::Core::Execution.expects(:which).with('id').returns(true)
47
+
48
+ Facter.fact(:gid).value.should == nil
49
+ end
50
+ end
42
51
  end
@@ -26,8 +26,11 @@ describe "The IPv6 address fact" do
26
26
  it "should return ipaddress6 information for Linux" do
27
27
  Facter::Core::Execution.stubs(:exec).with('uname -s').returns('Linux')
28
28
  Facter::Util::IP.stubs(:get_ifconfig).returns("/sbin/ifconfig")
29
- Facter::Util::IP.stubs(:exec_ifconfig).with(["2>/dev/null"]).
29
+ Facter::Util::IP.stubs(:exec_ifconfig).
30
30
  returns(ifconfig_fixture('linux_ifconfig_all_with_multiple_interfaces'))
31
+ routes = ifconfig_fixture('net_route_all_with_multiple_interfaces')
32
+ Facter::Util::IP.stubs(:read_proc_net_route).returns(routes)
33
+ Facter.collection.internal_loader.load(:interfaces)
31
34
 
32
35
  Facter.value(:ipaddress6).should == "2610:10:20:209:212:3fff:febe:2201"
33
36
  end
@@ -35,8 +38,11 @@ describe "The IPv6 address fact" do
35
38
  it "should return ipaddress6 information for Linux with recent net-tools" do
36
39
  Facter::Core::Execution.stubs(:exec).with('uname -s').returns('Linux')
37
40
  Facter::Util::IP.stubs(:get_ifconfig).returns("/sbin/ifconfig")
38
- Facter::Util::IP.stubs(:exec_ifconfig).with(["2>/dev/null"]).
41
+ Facter::Util::IP.stubs(:exec_ifconfig).
39
42
  returns(ifconfig_fixture('ifconfig_net_tools_1.60.txt'))
43
+ routes = ifconfig_fixture('net_route_net_tools_1.60.txt')
44
+ Facter::Util::IP.stubs(:read_proc_net_route).returns(routes)
45
+ Facter.collection.internal_loader.load(:interfaces)
40
46
 
41
47
  Facter.value(:ipaddress6).should == "2610:10:20:209:212:3fff:febe:2201"
42
48
  end
@@ -44,8 +50,11 @@ describe "The IPv6 address fact" do
44
50
  it "should return ipaddress6 with fe80 in any other octet than the first for Linux" do
45
51
  Facter::Core::Execution.stubs(:exec).with('uname -s').returns('Linux')
46
52
  Facter::Util::IP.stubs(:get_ifconfig).returns("/sbin/ifconfig")
47
- Facter::Util::IP.stubs(:exec_ifconfig).with(["2>/dev/null"]).
53
+ Facter::Util::IP.stubs(:exec_ifconfig).
48
54
  returns(ifconfig_fixture('linux_ifconfig_all_with_multiple_interfaces_and_fe80'))
55
+ routes = ifconfig_fixture('net_route_all_with_multiple_interfaces')
56
+ Facter::Util::IP.stubs(:read_proc_net_route).returns(routes)
57
+ Facter.collection.internal_loader.load(:interfaces)
49
58
 
50
59
  Facter.value(:ipaddress6).should == "2610:10:20:209:212:3fff:fe80:2201"
51
60
  end
@@ -53,8 +62,11 @@ describe "The IPv6 address fact" do
53
62
  it "should not return ipaddress6 link-local address for Linux" do
54
63
  Facter::Core::Execution.stubs(:exec).with('uname -s').returns('Linux')
55
64
  Facter::Util::IP.stubs(:get_ifconfig).returns("/sbin/ifconfig")
56
- Facter::Util::IP.stubs(:exec_ifconfig).with(["2>/dev/null"]).
65
+ Facter::Util::IP.stubs(:exec_ifconfig).
57
66
  returns(ifconfig_fixture('linux_ifconfig_all_with_multiple_interfaces_and_no_public_ipv6'))
67
+ routes = ifconfig_fixture('net_route_all_with_multiple_interfaces')
68
+ Facter::Util::IP.stubs(:read_proc_net_route).returns(routes)
69
+ Facter.collection.internal_loader.load(:interfaces)
58
70
 
59
71
  Facter.value(:ipaddress6).should be_false
60
72
  end
@@ -4,10 +4,6 @@ require 'spec_helper'
4
4
  require 'facter/util/ip'
5
5
 
6
6
  describe "ipaddress fact" do
7
- before do
8
- Facter.collection.internal_loader.load(:ipaddress)
9
- end
10
-
11
7
  context 'using `ifconfig`' do
12
8
  before :each do
13
9
  Facter.fact(:hostname).stubs(:value)
@@ -18,25 +14,29 @@ describe "ipaddress fact" do
18
14
  Facter.fact(:kernel).stubs(:value).returns("Linux")
19
15
  end
20
16
 
17
+ after :each do
18
+ Facter.collection.flush
19
+ end
20
+
21
21
  def expect_ifconfig_parse(address, fixture)
22
- Facter::Util::IP.stubs(:exec_ifconfig).returns(my_fixture_read(fixture))
22
+ Facter::Util::IP.stubs(:exec_ifconfig).returns(my_fixture_read("ifconfig_#{fixture}"))
23
+ routes = my_fixture_read("net_route_#{fixture}")
24
+ Facter::Util::IP.stubs(:read_proc_net_route).returns(routes)
25
+ Facter.collection.internal_loader.load(:interfaces)
26
+ Facter.collection.internal_loader.load(:ipaddress)
23
27
  Facter.fact(:ipaddress).value.should == address
24
28
  end
25
29
 
26
30
  it "parses correctly on Ubuntu 12.04" do
27
- expect_ifconfig_parse "10.87.80.110", "ifconfig_ubuntu_1204.txt"
31
+ expect_ifconfig_parse "10.87.80.110", "ubuntu_1204.txt"
28
32
  end
29
33
 
30
34
  it "parses correctly on Fedora 17" do
31
- expect_ifconfig_parse "131.252.209.153", "ifconfig_net_tools_1.60.txt"
32
- end
33
-
34
- it "parses a real address over multiple loopback addresses" do
35
- expect_ifconfig_parse "10.0.222.20", "ifconfig_multiple_127_addresses.txt"
35
+ expect_ifconfig_parse "131.252.209.153", "net_tools_1.60.txt"
36
36
  end
37
37
 
38
38
  it "parses nothing with a non-english locale" do
39
- expect_ifconfig_parse nil, "ifconfig_non_english_locale.txt"
39
+ expect_ifconfig_parse nil, "non_english_locale.txt"
40
40
  end
41
41
  end
42
42
  end
@@ -23,8 +23,11 @@ describe "macaddress fact" do
23
23
  end
24
24
 
25
25
  it "should return the macaddress of the first interface" do
26
- Facter::Util::IP.stubs(:exec_ifconfig).with(["-a","2>/dev/null"]).
26
+ Facter::Util::IP.stubs(:exec_ifconfig).
27
27
  returns(ifconfig_fixture('linux_ifconfig_all_with_multiple_interfaces'))
28
+ routes = ifconfig_fixture("net_route_all_with_multiple_interfaces")
29
+ Facter::Util::IP.stubs(:read_proc_net_route).returns(routes)
30
+ Facter.collection.internal_loader.load(:interfaces)
28
31
 
29
32
  Facter.value(:macaddress).should == "00:12:3f:be:22:01"
30
33
  end
@@ -32,6 +35,7 @@ describe "macaddress fact" do
32
35
  it "should return nil when no macaddress can be found" do
33
36
  Facter::Util::IP.stubs(:exec_ifconfig).with(["-a","2>/dev/null"]).
34
37
  returns(ifconfig_fixture('linux_ifconfig_no_mac'))
38
+ Facter::Util::IP.stubs(:read_proc_net_route).returns("")
35
39
 
36
40
  proc { Facter.value(:macaddress) }.should_not raise_error
37
41
  Facter.value(:macaddress).should be_nil
@@ -41,6 +45,7 @@ describe "macaddress fact" do
41
45
  it "should return nil when no interface has a real macaddress" do
42
46
  Facter::Util::IP.stubs(:exec_ifconfig).with(["-a","2>/dev/null"]).
43
47
  returns(ifconfig_fixture('linux_ifconfig_venet'))
48
+ Facter::Util::IP.stubs(:read_proc_net_route).returns("")
44
49
 
45
50
  proc { Facter.value(:macaddress) }.should_not raise_error
46
51
  Facter.value(:macaddress).should be_nil
@@ -6,8 +6,21 @@ require 'facter/util/ip'
6
6
 
7
7
  shared_examples_for "netmask from ifconfig output" do |platform, address, fixture|
8
8
  it "correctly on #{platform}" do
9
- Facter::Util::IP.stubs(:exec_ifconfig).returns(my_fixture_read(fixture))
9
+ Facter::Util::IP.stubs(:exec_ifconfig).returns(my_fixture_read("ifconfig_#{fixture}"))
10
10
  Facter.collection.internal_loader.load(:netmask)
11
+ begin
12
+ routes = my_fixture_read("net_route_#{fixture}")
13
+ Facter::Util::IP.stubs(:read_proc_net_route).returns(routes)
14
+ rescue RuntimeError
15
+ # We want to try to load proc/net/route fixtures, but skip if
16
+ # they don't exist for non-linux platforms. Ideally we'd get an
17
+ # IOError here, but the fixture machinery here is dumb and
18
+ # converts this to a RuntimeError. Hopefully anything that would
19
+ # error here would also cause the actual test to fail, so I'm
20
+ # not going to worry too hard.
21
+ end
22
+ Facter.collection.internal_loader.load(:interfaces)
23
+ Facter.collection.internal_loader.load(:ipaddress)
11
24
 
12
25
  Facter.fact(:netmask).value.should eq(address)
13
26
  end
@@ -21,10 +34,10 @@ describe "The netmask fact" do
21
34
 
22
35
  example_behavior_for "netmask from ifconfig output",
23
36
  "Archlinux (net-tools 1.60)", "255.255.255.0",
24
- "ifconfig_net_tools_1.60.txt"
37
+ "net_tools_1.60.txt"
25
38
  example_behavior_for "netmask from ifconfig output",
26
39
  "Ubuntu 12.04", "255.255.255.255",
27
- "ifconfig_ubuntu_1204.txt"
40
+ "ubuntu_1204.txt"
28
41
  end
29
42
 
30
43
  context "on AIX" do
@@ -34,7 +47,7 @@ describe "The netmask fact" do
34
47
 
35
48
  example_behavior_for "netmask from ifconfig output",
36
49
  "AIX 7", "255.255.255.0",
37
- "ifconfig_aix_7.txt"
50
+ "aix_7.txt"
38
51
 
39
52
  end
40
53
 
@@ -221,6 +221,7 @@ describe Facter::Processors::Windows do
221
221
  before :each do
222
222
  proc = stubs 'proc'
223
223
  proc.stubs(:Name).returns("Intel(R) Celeron(R) processor")
224
+ proc.stubs(:ole_respond_to?).with(:NumberOfLogicalProcessors).returns(false)
224
225
  load(Array.new(2, proc))
225
226
  end
226
227
 
@@ -235,6 +236,7 @@ describe Facter::Processors::Windows do
235
236
  before :each do
236
237
  proc = stubs 'proc'
237
238
  proc.stubs(:NumberOfLogicalProcessors).returns(2)
239
+ proc.stubs(:ole_respond_to?).with(:NumberOfLogicalProcessors).returns(true)
238
240
  proc.stubs(:Name).returns("Intel(R) Celeron(R) processor")
239
241
  load(Array.new(2, proc))
240
242
  end
@@ -368,6 +368,17 @@ describe Facter::Util::Virtual do
368
368
  end
369
369
  end
370
370
 
371
+ context '/proc/1/cgroup has at least one hierarchy with docker underneath a systemd slice parent' do
372
+ before :each do
373
+ fakepath = Pathname.new(File.join(fixture_path, 'in_a_docker_container_with_systemd_slices'))
374
+ Pathname.stubs(:new).with('/proc/1/cgroup').returns(fakepath)
375
+ end
376
+
377
+ it 'is true' do
378
+ subject.should be_true
379
+ end
380
+ end
381
+
371
382
  context '/proc/1/cgroup has no hierarchies rooted in /docker/' do
372
383
  before :each do
373
384
  fakepath = Pathname.new(File.join(fixture_path, 'not_in_a_container'))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: facter
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.4
4
+ version: 2.4.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-05-19 00:00:00.000000000 Z
12
+ date: 2016-01-20 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: You can prove anything with facts!
15
15
  email: info@puppetlabs.com
@@ -201,6 +201,7 @@ files:
201
201
  - spec/fixtures/cpuinfo/two_multicore-grep
202
202
  - spec/fixtures/virtual/proc_1_cgroup/in_a_container
203
203
  - spec/fixtures/virtual/proc_1_cgroup/not_in_a_container
204
+ - spec/fixtures/virtual/proc_1_cgroup/in_a_docker_container_with_systemd_slices
204
205
  - spec/fixtures/virtual/proc_1_cgroup/in_a_docker_container
205
206
  - spec/fixtures/virtual/proc_self_status/vserver_2_1/guest
206
207
  - spec/fixtures/virtual/proc_self_status/vserver_2_1/host
@@ -219,8 +220,12 @@ files:
219
220
  - spec/fixtures/processorcount/solaris-psrinfo
220
221
  - spec/fixtures/unit/netmask/ifconfig_ubuntu_1204.txt
221
222
  - spec/fixtures/unit/netmask/ifconfig_net_tools_1.60.txt
223
+ - spec/fixtures/unit/netmask/net_route_ubuntu_1204.txt
224
+ - spec/fixtures/unit/netmask/net_route_multiple_127_addresses.txt
222
225
  - spec/fixtures/unit/netmask/ifconfig_aix_7.txt
223
- - spec/fixtures/unit/netmask/darwin_10_8_5.txt
226
+ - spec/fixtures/unit/netmask/net_route_non_english_locale.txt
227
+ - spec/fixtures/unit/netmask/net_route_net_tools_1.60.txt
228
+ - spec/fixtures/unit/netmask/ifconfig_darwin_10_8_5.txt
224
229
  - spec/fixtures/unit/selinux/selinux_sestatus2
225
230
  - spec/fixtures/unit/selinux/selinux_sestatus
226
231
  - spec/fixtures/unit/filesystems/linux
@@ -298,8 +303,12 @@ files:
298
303
  - spec/fixtures/unit/ec2/rest/meta-data/root
299
304
  - spec/fixtures/unit/ipaddress/ifconfig_ubuntu_1204.txt
300
305
  - spec/fixtures/unit/ipaddress/ifconfig_net_tools_1.60.txt
306
+ - spec/fixtures/unit/ipaddress/net_route_ubuntu_1204.txt
307
+ - spec/fixtures/unit/ipaddress/net_route_multiple_127_addresses.txt
301
308
  - spec/fixtures/unit/ipaddress/ifconfig_non_english_locale.txt
309
+ - spec/fixtures/unit/ipaddress/net_route_non_english_locale.txt
302
310
  - spec/fixtures/unit/ipaddress/ifconfig_multiple_127_addresses.txt
311
+ - spec/fixtures/unit/ipaddress/net_route_net_tools_1.60.txt
303
312
  - spec/fixtures/unit/processors/os/darwin-system-profiler
304
313
  - spec/fixtures/unit/zfs_version/zfs_new
305
314
  - spec/fixtures/unit/zfs_version/solaris_11
@@ -344,6 +353,7 @@ files:
344
353
  - spec/fixtures/unit/zpool_version/freebsd_8.2
345
354
  - spec/fixtures/unit/zpool_version/solaris_10
346
355
  - spec/fixtures/ifconfig/open_solaris_b132
356
+ - spec/fixtures/ifconfig/net_route_all_with_multiple_interfaces
347
357
  - spec/fixtures/ifconfig/ifconfig_ubuntu_1204.txt
348
358
  - spec/fixtures/ifconfig/freebsd_6_0
349
359
  - spec/fixtures/ifconfig/linux_ifconfig_venet
@@ -367,6 +377,7 @@ files:
367
377
  - spec/fixtures/ifconfig/darwin_10_3_0_en0
368
378
  - spec/fixtures/ifconfig/darwin_ifconfig_all_with_multiple_interfaces
369
379
  - spec/fixtures/ifconfig/open_solaris_10
380
+ - spec/fixtures/ifconfig/net_route_net_tools_1.60.txt
370
381
  - spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1
371
382
  - spec/fixtures/ifconfig/darwin_10_6_6_dualstack
372
383
  - spec/fixtures/ifconfig/ubuntu_7_04_eth0
@@ -549,6 +560,7 @@ test_files:
549
560
  - spec/fixtures/cpuinfo/two_multicore-grep
550
561
  - spec/fixtures/virtual/proc_1_cgroup/in_a_container
551
562
  - spec/fixtures/virtual/proc_1_cgroup/not_in_a_container
563
+ - spec/fixtures/virtual/proc_1_cgroup/in_a_docker_container_with_systemd_slices
552
564
  - spec/fixtures/virtual/proc_1_cgroup/in_a_docker_container
553
565
  - spec/fixtures/virtual/proc_self_status/vserver_2_1/guest
554
566
  - spec/fixtures/virtual/proc_self_status/vserver_2_1/host
@@ -567,8 +579,12 @@ test_files:
567
579
  - spec/fixtures/processorcount/solaris-psrinfo
568
580
  - spec/fixtures/unit/netmask/ifconfig_ubuntu_1204.txt
569
581
  - spec/fixtures/unit/netmask/ifconfig_net_tools_1.60.txt
582
+ - spec/fixtures/unit/netmask/net_route_ubuntu_1204.txt
583
+ - spec/fixtures/unit/netmask/net_route_multiple_127_addresses.txt
570
584
  - spec/fixtures/unit/netmask/ifconfig_aix_7.txt
571
- - spec/fixtures/unit/netmask/darwin_10_8_5.txt
585
+ - spec/fixtures/unit/netmask/net_route_non_english_locale.txt
586
+ - spec/fixtures/unit/netmask/net_route_net_tools_1.60.txt
587
+ - spec/fixtures/unit/netmask/ifconfig_darwin_10_8_5.txt
572
588
  - spec/fixtures/unit/selinux/selinux_sestatus2
573
589
  - spec/fixtures/unit/selinux/selinux_sestatus
574
590
  - spec/fixtures/unit/filesystems/linux
@@ -646,8 +662,12 @@ test_files:
646
662
  - spec/fixtures/unit/ec2/rest/meta-data/root
647
663
  - spec/fixtures/unit/ipaddress/ifconfig_ubuntu_1204.txt
648
664
  - spec/fixtures/unit/ipaddress/ifconfig_net_tools_1.60.txt
665
+ - spec/fixtures/unit/ipaddress/net_route_ubuntu_1204.txt
666
+ - spec/fixtures/unit/ipaddress/net_route_multiple_127_addresses.txt
649
667
  - spec/fixtures/unit/ipaddress/ifconfig_non_english_locale.txt
668
+ - spec/fixtures/unit/ipaddress/net_route_non_english_locale.txt
650
669
  - spec/fixtures/unit/ipaddress/ifconfig_multiple_127_addresses.txt
670
+ - spec/fixtures/unit/ipaddress/net_route_net_tools_1.60.txt
651
671
  - spec/fixtures/unit/processors/os/darwin-system-profiler
652
672
  - spec/fixtures/unit/zfs_version/zfs_new
653
673
  - spec/fixtures/unit/zfs_version/solaris_11
@@ -692,6 +712,7 @@ test_files:
692
712
  - spec/fixtures/unit/zpool_version/freebsd_8.2
693
713
  - spec/fixtures/unit/zpool_version/solaris_10
694
714
  - spec/fixtures/ifconfig/open_solaris_b132
715
+ - spec/fixtures/ifconfig/net_route_all_with_multiple_interfaces
695
716
  - spec/fixtures/ifconfig/ifconfig_ubuntu_1204.txt
696
717
  - spec/fixtures/ifconfig/freebsd_6_0
697
718
  - spec/fixtures/ifconfig/linux_ifconfig_venet
@@ -715,6 +736,7 @@ test_files:
715
736
  - spec/fixtures/ifconfig/darwin_10_3_0_en0
716
737
  - spec/fixtures/ifconfig/darwin_ifconfig_all_with_multiple_interfaces
717
738
  - spec/fixtures/ifconfig/open_solaris_10
739
+ - spec/fixtures/ifconfig/net_route_net_tools_1.60.txt
718
740
  - spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1
719
741
  - spec/fixtures/ifconfig/darwin_10_6_6_dualstack
720
742
  - spec/fixtures/ifconfig/ubuntu_7_04_eth0