ohai 7.6.0.rc.0 → 7.6.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ohai/mixin/ec2_metadata.rb +4 -1
- data/lib/ohai/mixin/gce_metadata.rb +1 -1
- data/lib/ohai/plugins/aix/network.rb +5 -6
- data/lib/ohai/plugins/aix/uptime.rb +2 -2
- data/lib/ohai/plugins/freebsd/cpu.rb +1 -1
- data/lib/ohai/plugins/java.rb +2 -2
- data/lib/ohai/plugins/linux/network.rb +9 -2
- data/lib/ohai/plugins/linux/platform.rb +1 -1
- data/lib/ohai/plugins/linux/virtualization.rb +2 -2
- data/lib/ohai/plugins/rackspace.rb +7 -1
- data/lib/ohai/version.rb +1 -1
- data/spec/unit/mixin/ec2_metadata_spec.rb +4 -3
- data/spec/unit/plugins/aix/network_spec.rb +6 -14
- data/spec/unit/plugins/aix/uptime_spec.rb +7 -6
- data/spec/unit/plugins/freebsd/cpu_spec.rb +1 -1
- data/spec/unit/plugins/linux/network_spec.rb +435 -427
- data/spec/unit/plugins/linux/virtualization_spec.rb +19 -1
- data/spec/unit/plugins/rackspace_spec.rb +19 -1
- metadata +87 -48
- checksums.yaml +0 -7
@@ -76,7 +76,10 @@ module Ohai
|
|
76
76
|
|
77
77
|
def best_api_version
|
78
78
|
response = http_client.get("/")
|
79
|
-
|
79
|
+
if response.code == '404'
|
80
|
+
Ohai::Log.debug("Received HTTP 404 from metadata server while determining API version, assuming 'latest'")
|
81
|
+
return "latest"
|
82
|
+
elsif response.code != '200'
|
80
83
|
raise "Unable to determine EC2 metadata version (returned #{response.code} response)"
|
81
84
|
end
|
82
85
|
# Note: Sorting the list of versions may have unintended consequences in
|
@@ -46,13 +46,12 @@ Ohai.plugin(:Network) do
|
|
46
46
|
network[:interfaces] = Mash.new unless network[:interfaces]
|
47
47
|
|
48
48
|
# :default_interface, :default_gateway - route -n get 0
|
49
|
-
so = shell_out("
|
49
|
+
so = shell_out("netstat -rn |grep default")
|
50
50
|
so.stdout.lines.each do |line|
|
51
|
-
|
52
|
-
|
53
|
-
network[:default_gateway] =
|
54
|
-
|
55
|
-
network[:default_interface] = $1
|
51
|
+
items = line.split(' ')
|
52
|
+
if items[0] == "default"
|
53
|
+
network[:default_gateway] = items[1]
|
54
|
+
network[:default_interface] = items[5]
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
@@ -27,10 +27,10 @@ Ohai.plugin(:Uptime) do
|
|
27
27
|
so = shell_out('who -b')
|
28
28
|
so.stdout.lines.each do |line|
|
29
29
|
if line =~ /.* boot (.+)/
|
30
|
-
uptime_seconds Time.now.to_i - DateTime.parse($1).strftime('%s').to_i
|
30
|
+
uptime_seconds Time.now.to_i - DateTime.parse($1 + " #{Time.now.zone}").strftime('%s').to_i
|
31
31
|
uptime seconds_to_human(uptime_seconds)
|
32
32
|
break
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
36
|
-
end
|
36
|
+
end
|
data/lib/ohai/plugins/java.rb
CHANGED
@@ -28,9 +28,9 @@ Ohai.plugin(:Java) do
|
|
28
28
|
case line
|
29
29
|
when /java version \"([0-9\.\_]+)\"/
|
30
30
|
java[:version] = $1
|
31
|
-
when /^(.+Runtime Environment.*) \((build
|
31
|
+
when /^(.+Runtime Environment.*) \((build)\s*(.+)\)$/
|
32
32
|
java[:runtime] = { "name" => $1, "build" => $3 }
|
33
|
-
when /^(.+ (Client|Server) VM) \(build
|
33
|
+
when /^(.+ (Client|Server) VM) \(build\s*(.+)\)$/
|
34
34
|
java[:hotspot] = { "name" => $1, "build" => $3 }
|
35
35
|
end
|
36
36
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
+
# Author:: Chris Read <chris.read@gmail.com>
|
3
4
|
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
4
5
|
# License:: Apache License, Version 2.0
|
5
6
|
#
|
@@ -161,10 +162,16 @@ Ohai.plugin(:Network) do
|
|
161
162
|
net_counters[tmp_int][:tx][:queuelen] = $1
|
162
163
|
end
|
163
164
|
|
164
|
-
if line =~ /vlan id (\d+)/
|
165
|
-
|
165
|
+
if line =~ /vlan id (\d+)/ or line =~ /vlan protocol ([\w\.]+) id (\d+)/
|
166
|
+
if $2
|
167
|
+
tmp_prot = $1
|
168
|
+
tmp_id = $2
|
169
|
+
else
|
170
|
+
tmp_id = $1
|
171
|
+
end
|
166
172
|
iface[tmp_int][:vlan] = Mash.new unless iface[tmp_int][:vlan]
|
167
173
|
iface[tmp_int][:vlan][:id] = tmp_id
|
174
|
+
iface[tmp_int][:vlan][:protocol] = tmp_prot if tmp_prot
|
168
175
|
|
169
176
|
vlan_flags = line.scan(/(REORDER_HDR|GVRP|LOOSE_BINDING)/)
|
170
177
|
if vlan_flags.length > 0
|
@@ -111,7 +111,7 @@ Ohai.plugin(:Platform) do
|
|
111
111
|
case platform
|
112
112
|
when /debian/, /ubuntu/, /linuxmint/, /raspbian/
|
113
113
|
platform_family "debian"
|
114
|
-
when /fedora/
|
114
|
+
when /fedora/, /pidora/
|
115
115
|
platform_family "fedora"
|
116
116
|
when /oracle/, /centos/, /redhat/, /scientific/, /enterpriseenterprise/, /amazon/, /xenserver/, /cloudlinux/, /ibm_powerkvm/, /parallels/ # Note that 'enterpriseenterprise' is oracle's LSB "distributor ID"
|
117
117
|
platform_family "rhel"
|
@@ -137,7 +137,7 @@ Ohai.plugin(:Virtualization) do
|
|
137
137
|
# Detect Linux-VServer
|
138
138
|
if File.exists?("/proc/self/status")
|
139
139
|
proc_self_status = File.read("/proc/self/status")
|
140
|
-
vxid = proc_self_status.match(/^(s_context|VxID)
|
140
|
+
vxid = proc_self_status.match(/^(s_context|VxID):\s*(\d+)$/)
|
141
141
|
if vxid and vxid[2]
|
142
142
|
virtualization[:system] = "linux-vserver"
|
143
143
|
if vxid[2] == "0"
|
@@ -158,7 +158,7 @@ Ohai.plugin(:Virtualization) do
|
|
158
158
|
# /proc/self/cgroup could have a name including alpha/digit/dashes
|
159
159
|
# <index #>:<subsystem>:/lxc/<named container id>
|
160
160
|
#
|
161
|
-
# /proc/self/cgroup could have a non-lxc cgroup name indicating other uses
|
161
|
+
# /proc/self/cgroup could have a non-lxc cgroup name indicating other uses
|
162
162
|
# of cgroups. This is probably not LXC/Docker.
|
163
163
|
# <index #>:<subsystem>:/Charlie
|
164
164
|
#
|
@@ -14,6 +14,8 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
+
require "resolv"
|
18
|
+
|
17
19
|
Ohai.plugin(:Rackspace) do
|
18
20
|
provides "rackspace"
|
19
21
|
|
@@ -129,7 +131,11 @@ Ohai.plugin(:Rackspace) do
|
|
129
131
|
rackspace[:public_ipv4] = rackspace[:public_ip]
|
130
132
|
get_global_ipv6_address(:public_ipv6, :eth0)
|
131
133
|
unless rackspace[:public_ip].nil?
|
132
|
-
rackspace[:public_hostname] =
|
134
|
+
rackspace[:public_hostname] = begin
|
135
|
+
Resolv.getname(rackspace[:public_ip])
|
136
|
+
rescue Resolv::ResolvError, Resolv::ResolvTimeout
|
137
|
+
rackspace[:public_ip]
|
138
|
+
end
|
133
139
|
end
|
134
140
|
rackspace[:local_ipv4] = rackspace[:private_ip]
|
135
141
|
get_global_ipv6_address(:local_ipv6, :eth1)
|
data/lib/ohai/version.rb
CHANGED
@@ -53,11 +53,12 @@ describe Ohai::Mixin::Ec2Metadata do
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
+
# Presume 'latest' when we get a 404 for Eucalyptus back-compat
|
56
57
|
context "when the response code is 404" do
|
57
|
-
let(:response) { double("Net::HTTP Response", :
|
58
|
+
let(:response) { double("Net::HTTP Response", :code => "404") }
|
58
59
|
|
59
|
-
it "
|
60
|
-
|
60
|
+
it "returns 'latest' as the version" do
|
61
|
+
mixin.best_api_version.should == 'latest'
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
@@ -20,17 +20,9 @@ require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper.rb')
|
|
20
20
|
describe Ohai::System, "AIX network plugin" do
|
21
21
|
|
22
22
|
before(:each) do
|
23
|
-
@
|
24
|
-
|
25
|
-
|
26
|
-
mask: default
|
27
|
-
gateway: 172.29.128.13
|
28
|
-
interface: en0
|
29
|
-
interf addr: 172.29.174.58
|
30
|
-
flags: <UP,GATEWAY,DONE>
|
31
|
-
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
|
32
|
-
0 0 0 0 0 0 0 -79
|
33
|
-
ROUTE_N_GET_0
|
23
|
+
@netstat_rn_grep_default = <<-NETSTAT_RN_GREP_DEFAULT
|
24
|
+
default 172.31.8.1 UG 2 121789 en0 - -
|
25
|
+
NETSTAT_RN_GREP_DEFAULT
|
34
26
|
|
35
27
|
@lsdev_Cc_if = <<-LSDEV_CC_IF
|
36
28
|
en0 Available Standard Ethernet Network Interface
|
@@ -74,7 +66,7 @@ ARP_AN
|
|
74
66
|
@plugin = get_plugin("aix/network")
|
75
67
|
@plugin.stub(:collect_os).and_return(:aix)
|
76
68
|
@plugin[:network] = Mash.new
|
77
|
-
@plugin.stub(:shell_out).with("
|
69
|
+
@plugin.stub(:shell_out).with("netstat -rn |grep default").and_return(mock_shell_out(0, @netstat_rn_grep_default, nil))
|
78
70
|
@plugin.stub(:shell_out).with("lsdev -Cc if").and_return(mock_shell_out(0, @lsdev_Cc_if, nil))
|
79
71
|
@plugin.stub(:shell_out).with("ifconfig en0").and_return(mock_shell_out(0, @ifconfig_en0, nil))
|
80
72
|
@plugin.stub(:shell_out).with("entstat -d en0 | grep \"Hardware Address\"").and_return(mock_shell_out(0, "Hardware Address: be:42:80:00:b0:05", nil))
|
@@ -101,13 +93,13 @@ ARP_AN
|
|
101
93
|
end
|
102
94
|
end
|
103
95
|
|
104
|
-
describe "
|
96
|
+
describe "netstat -rn |grep default" do
|
105
97
|
before do
|
106
98
|
@plugin.run
|
107
99
|
end
|
108
100
|
|
109
101
|
it "returns the default gateway of the system's network" do
|
110
|
-
@plugin[:network][:default_gateway].should == '172.
|
102
|
+
@plugin[:network][:default_gateway].should == '172.31.8.1'
|
111
103
|
end
|
112
104
|
|
113
105
|
it "returns the default interface of the system's network" do
|
@@ -22,18 +22,19 @@ describe Ohai::System, "Aix plugin uptime" do
|
|
22
22
|
before(:each) do
|
23
23
|
@plugin = get_plugin("aix/uptime")
|
24
24
|
@plugin.stub(:collect_os).and_return(:aix)
|
25
|
-
Time.stub_chain(:now, :to_i).and_return(
|
26
|
-
|
27
|
-
|
25
|
+
Time.stub_chain(:now, :to_i).and_return(1412072511)
|
26
|
+
Time.stub_chain(:now, :zone).and_return("IST")
|
27
|
+
DateTime.stub_chain(:parse, :strftime, :to_i).and_return(1411561320)
|
28
|
+
@plugin.stub(:shell_out).with("who -b").and_return(mock_shell_out(0, " . system boot Sep 24 17:52", nil))
|
28
29
|
|
29
|
-
@plugin.run
|
30
|
+
@plugin.run
|
30
31
|
end
|
31
32
|
|
32
33
|
it "should set uptime_seconds to uptime" do
|
33
|
-
@plugin[:uptime_seconds].should ==
|
34
|
+
@plugin[:uptime_seconds].should == 511191
|
34
35
|
end
|
35
36
|
|
36
37
|
it "should set uptime to a human readable date" do
|
37
|
-
@plugin[:uptime].should == "
|
38
|
+
@plugin[:uptime].should == "5 days 21 hours 59 minutes 51 seconds"
|
38
39
|
end
|
39
40
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Caleb Tennis <caleb.tennis@gmail.com>
|
3
|
+
# Author:: Chris Read <chris.read@gmail.com>
|
3
4
|
# Copyright:: Copyright (c) 2011 Opscode, Inc.
|
4
5
|
# License:: Apache License, Version 2.0
|
5
6
|
#
|
@@ -25,38 +26,25 @@ rescue LoadError => e
|
|
25
26
|
raise e
|
26
27
|
end
|
27
28
|
|
28
|
-
def do_stubs
|
29
|
-
@plugin.stub(:collect_os).and_return(:linux)
|
30
|
-
@plugin.stub(:shell_out).with("ip addr").and_return(mock_shell_out(0, @linux_ip_addr, ""))
|
31
|
-
@plugin.stub(:shell_out).with("ip -d -s link").and_return(mock_shell_out(0, @linux_ip_link_s_d, ""))
|
32
|
-
@plugin.stub(:shell_out).with("ip -f inet neigh show").and_return(mock_shell_out(0, @linux_ip_neighbor_show, ""))
|
33
|
-
@plugin.stub(:shell_out).with("ip -f inet6 neigh show").and_return(mock_shell_out(0, @linux_ip_inet6_neighbor_show, ""))
|
34
|
-
@plugin.stub(:shell_out).with("ip -o -f inet route show").and_return(mock_shell_out(0, @linux_ip_route, ""))
|
35
|
-
@plugin.stub(:shell_out).with("ip -o -f inet6 route show").and_return(mock_shell_out(0, @linux_ip_route_inet6, ""))
|
36
|
-
@plugin.stub(:shell_out).with("route -n").and_return(mock_shell_out(0, @linux_route_n, ""))
|
37
|
-
@plugin.stub(:shell_out).with("ifconfig -a").and_return(mock_shell_out(0, @linux_ifconfig, ""))
|
38
|
-
@plugin.stub(:shell_out).with("arp -an").and_return(mock_shell_out(0, @linux_arp_an, ""))
|
39
|
-
end
|
40
|
-
|
41
29
|
describe Ohai::System, "Linux Network Plugin" do
|
30
|
+
let(:plugin) { get_plugin("linux/network") }
|
42
31
|
|
43
|
-
|
44
|
-
|
45
|
-
eth0 Link encap:Ethernet HWaddr 12:31:3D:02:BE:A2
|
32
|
+
let(:linux_ifconfig) {
|
33
|
+
'eth0 Link encap:Ethernet HWaddr 12:31:3D:02:BE:A2
|
46
34
|
inet addr:10.116.201.76 Bcast:10.116.201.255 Mask:255.255.255.0
|
47
35
|
inet6 addr: fe80::1031:3dff:fe02:bea2/64 Scope:Link
|
48
36
|
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
49
37
|
RX packets:2659966 errors:0 dropped:0 overruns:0 frame:0
|
50
38
|
TX packets:1919690 errors:0 dropped:0 overruns:0 carrier:0
|
51
|
-
collisions:0 txqueuelen:1000
|
39
|
+
collisions:0 txqueuelen:1000
|
52
40
|
RX bytes:1392844460 (1.2 GiB) TX bytes:691785313 (659.7 MiB)
|
53
|
-
Interrupt:16
|
41
|
+
Interrupt:16
|
54
42
|
|
55
|
-
eth0:5 Link encap:Ethernet HWaddr 00:0c:29:41:71:45
|
43
|
+
eth0:5 Link encap:Ethernet HWaddr 00:0c:29:41:71:45
|
56
44
|
inet addr:192.168.5.1 Bcast:192.168.5.255 Mask:255.255.255.0
|
57
45
|
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
58
46
|
|
59
|
-
eth0.11 Link encap:Ethernet HWaddr 00:aa:bb:cc:dd:ee
|
47
|
+
eth0.11 Link encap:Ethernet HWaddr 00:aa:bb:cc:dd:ee
|
60
48
|
inet addr:192.168.0.16 Bcast:192.168.0.255 Mask:255.255.255.0
|
61
49
|
inet6 addr: fe80::2aa:bbff:fecc:ddee/64 Scope:Link
|
62
50
|
inet6 addr: 1111:2222:3333:4444::2/64 Scope:Global
|
@@ -64,78 +52,107 @@ eth0.11 Link encap:Ethernet HWaddr 00:aa:bb:cc:dd:ee
|
|
64
52
|
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
65
53
|
RX packets:1208795008 errors:0 dropped:0 overruns:0 frame:0
|
66
54
|
TX packets:3269635153 errors:0 dropped:0 overruns:0 carrier:0
|
67
|
-
collisions:0 txqueuelen:0
|
55
|
+
collisions:0 txqueuelen:0
|
68
56
|
RX bytes:1751940374 (1.6 GiB) TX bytes:2195567597 (2.0 GiB)
|
69
57
|
|
70
|
-
eth0.151 Link encap:Ethernet HWaddr 00:aa:bb:cc:dd:ee
|
58
|
+
eth0.151 Link encap:Ethernet HWaddr 00:aa:bb:cc:dd:ee
|
71
59
|
inet addr:10.151.0.16 Bcast:10.151.0.255 Mask:255.255.255.0
|
72
60
|
inet6 addr: fe80::2aa:bbff:fecc:ddee/64 Scope:Link
|
73
61
|
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
74
62
|
RX packets:206553677 errors:0 dropped:0 overruns:0 frame:0
|
75
63
|
TX packets:163901336 errors:0 dropped:0 overruns:0 carrier:0
|
76
|
-
collisions:0 txqueuelen:0
|
64
|
+
collisions:0 txqueuelen:0
|
77
65
|
RX bytes:3190792261 (2.9 GiB) TX bytes:755086548 (720.1 MiB)
|
78
66
|
|
79
|
-
eth0.152 Link encap:Ethernet HWaddr 00:aa:bb:cc:dd:ee
|
67
|
+
eth0.152 Link encap:Ethernet HWaddr 00:aa:bb:cc:dd:ee
|
80
68
|
inet addr:10.152.1.16 Bcast:10.152.3.255 Mask:255.255.252.0
|
81
69
|
inet6 addr: fe80::2aa:bbff:fecc:ddee/64 Scope:Link
|
82
70
|
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
83
71
|
RX packets:14016741 errors:0 dropped:0 overruns:0 frame:0
|
84
72
|
TX packets:55232 errors:0 dropped:0 overruns:0 carrier:0
|
85
|
-
collisions:0 txqueuelen:0
|
73
|
+
collisions:0 txqueuelen:0
|
86
74
|
RX bytes:664957462 (634.1 MiB) TX bytes:4876434 (4.6 MiB)
|
87
75
|
|
88
|
-
eth0.153 Link encap:Ethernet HWaddr 00:aa:bb:cc:dd:ee
|
76
|
+
eth0.153 Link encap:Ethernet HWaddr 00:aa:bb:cc:dd:ee
|
89
77
|
inet addr:10.153.1.16 Bcast:10.153.3.255 Mask:255.255.252.0
|
90
78
|
inet6 addr: fe80::2aa:bbff:fecc:ddee/64 Scope:Link
|
91
79
|
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
92
80
|
RX packets:2022667595 errors:0 dropped:0 overruns:0 frame:0
|
93
81
|
TX packets:1798627472 errors:0 dropped:0 overruns:0 carrier:0
|
94
|
-
collisions:0 txqueuelen:0
|
82
|
+
collisions:0 txqueuelen:0
|
95
83
|
RX bytes:4047036732 (3.7 GiB) TX bytes:3451231474 (3.2 GiB)
|
96
84
|
|
97
|
-
foo:veth0@eth0 Link encap:Ethernet HWaddr ca:b3:73:8b:0c:e4
|
85
|
+
foo:veth0@eth0 Link encap:Ethernet HWaddr ca:b3:73:8b:0c:e4
|
98
86
|
BROADCAST MULTICAST MTU:1500 Metric:1
|
99
87
|
|
100
|
-
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
88
|
+
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
101
89
|
inet addr:172.16.19.39 P-t-P:172.16.19.1 Mask:255.255.255.255
|
102
90
|
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1418 Metric:1
|
103
91
|
RX packets:57200 errors:0 dropped:0 overruns:0 frame:0
|
104
92
|
TX packets:13782 errors:0 dropped:0 overruns:0 carrier:0
|
105
|
-
collisions:0 txqueuelen:100
|
93
|
+
collisions:0 txqueuelen:100
|
106
94
|
RX bytes:7377600 (7.0 MiB) TX bytes:1175481 (1.1 MiB)
|
107
95
|
|
108
|
-
venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
96
|
+
venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
109
97
|
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1418 Metric:1
|
110
98
|
RX packets:57200 errors:0 dropped:0 overruns:0 frame:0
|
111
99
|
TX packets:13782 errors:0 dropped:0 overruns:0 carrier:0
|
112
|
-
collisions:0 txqueuelen:100
|
100
|
+
collisions:0 txqueuelen:100
|
113
101
|
RX bytes:7377600 (7.0 MiB) TX bytes:1175481 (1.1 MiB)
|
114
102
|
|
115
|
-
venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
103
|
+
venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
|
116
104
|
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1418 Metric:1
|
117
105
|
RX packets:57200 errors:0 dropped:0 overruns:0 frame:0
|
118
106
|
TX packets:13782 errors:0 dropped:0 overruns:0 carrier:0
|
119
|
-
collisions:0 txqueuelen:100
|
107
|
+
collisions:0 txqueuelen:100
|
120
108
|
RX bytes:7377600 (7.0 MiB) TX bytes:1175481 (1.1 MiB)
|
121
109
|
|
122
|
-
lo Link encap:Local Loopback
|
110
|
+
lo Link encap:Local Loopback
|
123
111
|
inet addr:127.0.0.1 Mask:255.0.0.0
|
124
112
|
inet6 addr: ::1/128 Scope:Host
|
125
113
|
UP LOOPBACK RUNNING MTU:16436 Metric:1
|
126
114
|
RX packets:524 errors:0 dropped:0 overruns:0 frame:0
|
127
115
|
TX packets:524 errors:0 dropped:0 overruns:0 carrier:0
|
128
|
-
collisions:0 txqueuelen:0
|
116
|
+
collisions:0 txqueuelen:0
|
129
117
|
RX bytes:35224 (34.3 KiB) TX bytes:35224 (34.3 KiB)
|
130
|
-
|
118
|
+
'
|
131
119
|
# Note that ifconfig shows foo:veth0@eth0 but fails to show any address information.
|
132
120
|
# This was not a mistake collecting the output and Apparently ifconfig is broken in this regard.
|
121
|
+
}
|
122
|
+
|
123
|
+
let(:linux_ip_route) {
|
124
|
+
'10.116.201.0/24 dev eth0 proto kernel
|
125
|
+
192.168.5.0/24 dev eth0 proto kernel src 192.168.5.1
|
126
|
+
192.168.212.0/24 dev foo:veth0@eth0 proto kernel src 192.168.212.2
|
127
|
+
172.16.151.0/24 dev eth0 proto kernel src 172.16.151.100
|
128
|
+
192.168.0.0/24 dev eth0 proto kernel src 192.168.0.2
|
129
|
+
10.5.4.0/24 \\ nexthop via 10.5.4.1 dev eth0 weight 1\\ nexthop via 10.5.4.2 dev eth0 weight 1
|
130
|
+
default via 10.116.201.1 dev eth0
|
131
|
+
'
|
132
|
+
}
|
133
|
+
|
134
|
+
let(:linux_route_n) {
|
135
|
+
'Kernel IP routing table
|
136
|
+
Destination Gateway Genmask Flags Metric Ref Use Iface
|
137
|
+
10.116.201.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
|
138
|
+
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
|
139
|
+
0.0.0.0 10.116.201.1 0.0.0.0 UG 0 0 0 eth0
|
140
|
+
'
|
141
|
+
}
|
142
|
+
|
143
|
+
let(:linux_ip_route_inet6) {
|
144
|
+
'fe80::/64 dev eth0 proto kernel metric 256
|
145
|
+
fe80::/64 dev eth0.11 proto kernel metric 256
|
146
|
+
1111:2222:3333:4444::/64 dev eth0.11 metric 1024 expires 86023sec
|
147
|
+
default via 1111:2222:3333:4444::1 dev eth0.11 metric 1024
|
148
|
+
'
|
149
|
+
}
|
133
150
|
|
134
|
-
|
135
|
-
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
|
151
|
+
let(:linux_ip_addr) {
|
152
|
+
'1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
|
136
153
|
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
|
137
154
|
inet 127.0.0.1/8 scope host lo
|
138
|
-
inet6 ::1/128 scope host
|
155
|
+
inet6 ::1/128 scope host
|
139
156
|
valid_lft forever preferred_lft forever
|
140
157
|
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
|
141
158
|
link/ether 12:31:3d:02:be:a2 brd ff:ff:ff:ff:ff:ff
|
@@ -143,35 +160,35 @@ ENDIFCONFIG
|
|
143
160
|
inet 10.116.201.75/32 scope global eth0
|
144
161
|
inet 10.116.201.74/24 scope global secondary eth0
|
145
162
|
inet 192.168.5.1/24 brd 192.168.5.255 scope global eth0:5
|
146
|
-
inet6 fe80::1031:3dff:fe02:bea2/64 scope link
|
163
|
+
inet6 fe80::1031:3dff:fe02:bea2/64 scope link
|
147
164
|
valid_lft forever preferred_lft forever
|
148
|
-
inet6 2001:44b8:4160:8f00:a00:27ff:fe13:eacd/64 scope global dynamic
|
165
|
+
inet6 2001:44b8:4160:8f00:a00:27ff:fe13:eacd/64 scope global dynamic
|
149
166
|
valid_lft 6128sec preferred_lft 2526sec
|
150
|
-
3: eth0.11@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
|
167
|
+
3: eth0.11@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
|
151
168
|
link/ether 00:aa:bb:cc:dd:ee brd ff:ff:ff:ff:ff:ff
|
152
169
|
inet 192.168.0.16/24 brd 192.168.0.255 scope global eth0.11
|
153
|
-
inet6 fe80::2e0:81ff:fe2b:48e7/64 scope link
|
170
|
+
inet6 fe80::2e0:81ff:fe2b:48e7/64 scope link
|
154
171
|
inet6 1111:2222:3333:4444::2/64 scope global
|
155
172
|
valid_lft forever preferred_lft forever
|
156
173
|
inet6 1111:2222:3333:4444::3/64 scope global
|
157
174
|
valid_lft forever preferred_lft forever
|
158
|
-
4: eth0.151@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
|
175
|
+
4: eth0.151@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
|
159
176
|
link/ether 00:aa:bb:cc:dd:ee brd ff:ff:ff:ff:ff:ff
|
160
177
|
inet 10.151.0.16/24 brd 10.151.0.255 scope global eth0.151
|
161
178
|
inet 10.151.1.16/24 scope global eth0.151
|
162
|
-
inet6 fe80::2e0:81ff:fe2b:48e7/64 scope link
|
179
|
+
inet6 fe80::2e0:81ff:fe2b:48e7/64 scope link
|
163
180
|
valid_lft forever preferred_lft forever
|
164
|
-
5: eth0.152@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
|
181
|
+
5: eth0.152@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
|
165
182
|
link/ether 00:aa:bb:cc:dd:ee brd ff:ff:ff:ff:ff:ff
|
166
183
|
inet 10.152.1.16/22 brd 10.152.3.255 scope global eth0.152
|
167
|
-
inet6 fe80::2e0:81ff:fe2b:48e7/64 scope link
|
184
|
+
inet6 fe80::2e0:81ff:fe2b:48e7/64 scope link
|
168
185
|
valid_lft forever preferred_lft forever
|
169
|
-
6: eth0.153@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
|
186
|
+
6: eth0.153@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
|
170
187
|
link/ether 00:aa:bb:cc:dd:ee brd ff:ff:ff:ff:ff:ff
|
171
188
|
inet 10.153.1.16/22 brd 10.153.3.255 scope global eth0.153
|
172
|
-
inet6 fe80::2e0:81ff:fe2b:48e7/64 scope link
|
189
|
+
inet6 fe80::2e0:81ff:fe2b:48e7/64 scope link
|
173
190
|
valid_lft forever preferred_lft forever
|
174
|
-
7: foo:veth0@eth0@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN
|
191
|
+
7: foo:veth0@eth0@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN
|
175
192
|
link/ether ca:b3:73:8b:0c:e4 brd ff:ff:ff:ff:ff:ff
|
176
193
|
inet 192.168.212.2/24 scope global foo:veth0@eth0
|
177
194
|
8: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
|
@@ -181,733 +198,724 @@ ENDIFCONFIG
|
|
181
198
|
link/void
|
182
199
|
inet 127.0.0.2/32 scope host venet0
|
183
200
|
inet 172.16.19.48/32 scope global venet0:0
|
184
|
-
|
201
|
+
'
|
202
|
+
}
|
185
203
|
|
186
|
-
|
187
|
-
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
|
204
|
+
let(:linux_ip_link_s_d) {
|
205
|
+
'1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
|
188
206
|
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
|
189
|
-
RX: bytes packets errors dropped overrun mcast
|
190
|
-
35224 524 0 0 0 0
|
191
|
-
TX: bytes packets errors dropped carrier collsns
|
192
|
-
35224 524 0 0 0 0
|
207
|
+
RX: bytes packets errors dropped overrun mcast
|
208
|
+
35224 524 0 0 0 0
|
209
|
+
TX: bytes packets errors dropped carrier collsns
|
210
|
+
35224 524 0 0 0 0
|
193
211
|
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
|
194
212
|
link/ether 12:31:3d:02:be:a2 brd ff:ff:ff:ff:ff:ff
|
195
|
-
RX: bytes packets errors dropped overrun mcast
|
196
|
-
1392844460 2659966 0 0 0 0
|
197
|
-
TX: bytes packets errors dropped carrier collsns
|
198
|
-
691785313 1919690 0 0 0 0
|
199
|
-
3: eth0.11@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
|
213
|
+
RX: bytes packets errors dropped overrun mcast
|
214
|
+
1392844460 2659966 0 0 0 0
|
215
|
+
TX: bytes packets errors dropped carrier collsns
|
216
|
+
691785313 1919690 0 0 0 0
|
217
|
+
3: eth0.11@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
|
200
218
|
link/ether 00:0c:29:41:71:45 brd ff:ff:ff:ff:ff:ff
|
201
|
-
vlan id 11 <REORDER_HDR>
|
202
|
-
RX: bytes packets errors dropped overrun mcast
|
203
|
-
0 0 0 0 0 0
|
204
|
-
TX: bytes packets errors dropped carrier collsns
|
205
|
-
0 0 0 0 0 0
|
219
|
+
vlan id 11 <REORDER_HDR>
|
220
|
+
RX: bytes packets errors dropped overrun mcast
|
221
|
+
0 0 0 0 0 0
|
222
|
+
TX: bytes packets errors dropped carrier collsns
|
223
|
+
0 0 0 0 0 0
|
206
224
|
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
|
207
|
-
link/none
|
208
|
-
RX: bytes packets errors dropped overrun mcast
|
209
|
-
1392844460 2659966 0 0 0 0
|
210
|
-
TX: bytes packets errors dropped carrier collsns
|
211
|
-
691785313 1919690 0 0 0 0
|
225
|
+
link/none
|
226
|
+
RX: bytes packets errors dropped overrun mcast
|
227
|
+
1392844460 2659966 0 0 0 0
|
228
|
+
TX: bytes packets errors dropped carrier collsns
|
229
|
+
691785313 1919690 0 0 0 0
|
212
230
|
5: venet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
|
213
231
|
link/void
|
214
|
-
RX: bytes packets errors dropped overrun mcast
|
215
|
-
1392844460 2659966 0 0 0 0
|
216
|
-
TX: bytes packets errors dropped carrier collsns
|
217
|
-
691785313 1919690 0 0 0 0
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
10.116.201.1 dev eth0 lladdr fe:ff:ff:ff:ff:ff REACHABLE
|
234
|
-
NEIGHBOR_SHOW
|
235
|
-
|
236
|
-
@linux_ip_inet6_neighbor_show = <<-NEIGHBOR_SHOW
|
237
|
-
1111:2222:3333:4444::1 dev eth0.11 lladdr 00:1c:0e:12:34:56 router REACHABLE
|
232
|
+
RX: bytes packets errors dropped overrun mcast
|
233
|
+
1392844460 2659966 0 0 0 0
|
234
|
+
TX: bytes packets errors dropped carrier collsns
|
235
|
+
691785313 1919690 0 0 0 0
|
236
|
+
'
|
237
|
+
}
|
238
|
+
|
239
|
+
let(:linux_arp_an) {
|
240
|
+
'? (10.116.201.1) at fe:ff:ff:ff:ff:ff [ether] on eth0
|
241
|
+
'
|
242
|
+
}
|
243
|
+
|
244
|
+
let(:linux_ip_neighbor_show) {
|
245
|
+
'10.116.201.1 dev eth0 lladdr fe:ff:ff:ff:ff:ff REACHABLE
|
246
|
+
'
|
247
|
+
}
|
248
|
+
|
249
|
+
let(:linux_ip_inet6_neighbor_show) {
|
250
|
+
'1111:2222:3333:4444::1 dev eth0.11 lladdr 00:1c:0e:12:34:56 router REACHABLE
|
238
251
|
fe80::21c:eff:fe12:3456 dev eth0.11 lladdr 00:1c:0e:30:28:00 router REACHABLE
|
239
252
|
fe80::21c:eff:fe12:3456 dev eth0.153 lladdr 00:1c:0e:30:28:00 router REACHABLE
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
default via 1111:2222:3333:4444::1 dev eth0.11 metric 1024
|
257
|
-
IP_ROUTE_SCOPE
|
258
|
-
|
259
|
-
@plugin = get_plugin("linux/network")
|
260
|
-
@plugin.stub(:shell_out).with("ifconfig -a").and_return([0, @linux_ifconfig, ""])
|
261
|
-
@plugin.stub(:shell_out).with("arp -an").and_return([0, @linux_arp_an, ""])
|
253
|
+
'
|
254
|
+
}
|
255
|
+
|
256
|
+
before(:each) do
|
257
|
+
allow(plugin).to receive(:collect_os).and_return(:linux)
|
258
|
+
|
259
|
+
allow(plugin).to receive(:shell_out).with("ip addr").and_return(mock_shell_out(0, linux_ip_addr, ""))
|
260
|
+
allow(plugin).to receive(:shell_out).with("ip -d -s link").and_return(mock_shell_out(0, linux_ip_link_s_d, ""))
|
261
|
+
allow(plugin).to receive(:shell_out).with("ip -f inet neigh show").and_return(mock_shell_out(0, linux_ip_neighbor_show, ""))
|
262
|
+
allow(plugin).to receive(:shell_out).with("ip -f inet6 neigh show").and_return(mock_shell_out(0, linux_ip_inet6_neighbor_show, ""))
|
263
|
+
allow(plugin).to receive(:shell_out).with("ip -o -f inet route show").and_return(mock_shell_out(0, linux_ip_route, ""))
|
264
|
+
allow(plugin).to receive(:shell_out).with("ip -o -f inet6 route show").and_return(mock_shell_out(0, linux_ip_route_inet6, ""))
|
265
|
+
|
266
|
+
allow(plugin).to receive(:shell_out).with("route -n").and_return(mock_shell_out(0, linux_route_n, ""))
|
267
|
+
allow(plugin).to receive(:shell_out).with("ifconfig -a").and_return(mock_shell_out(0, linux_ifconfig, ""))
|
268
|
+
allow(plugin).to receive(:shell_out).with("arp -an").and_return(mock_shell_out(0, linux_arp_an, ""))
|
262
269
|
end
|
263
270
|
|
264
271
|
["ifconfig","iproute2"].each do |network_method|
|
265
272
|
|
266
273
|
describe "gathering IP layer address info via #{network_method}" do
|
267
|
-
before do
|
268
|
-
File.
|
269
|
-
|
274
|
+
before(:each) do
|
275
|
+
allow(File).to receive(:exist?).with("/sbin/ip").and_return( network_method == "iproute2" )
|
276
|
+
plugin.run
|
270
277
|
end
|
271
278
|
|
272
279
|
it "completes the run" do
|
273
|
-
Ohai::Log.
|
274
|
-
|
275
|
-
@plugin['network'].should_not be_nil
|
280
|
+
expect(Ohai::Log).not_to receive(:debug).with(/Plugin linux::network threw exception/)
|
281
|
+
expect(plugin['network']).not_to be_nil
|
276
282
|
end
|
277
283
|
|
278
284
|
it "detects the interfaces" do
|
279
|
-
|
280
|
-
@plugin['network']['interfaces'].keys.sort.should == ["eth0", "eth0.11", "eth0.151", "eth0.152", "eth0.153", "eth0:5", "foo:veth0@eth0", "lo", "tun0", "venet0", "venet0:0"]
|
285
|
+
expect(plugin['network']['interfaces'].keys.sort).to eq(["eth0", "eth0.11", "eth0.151", "eth0.152", "eth0.153", "eth0:5", "foo:veth0@eth0", "lo", "tun0", "venet0", "venet0:0"])
|
281
286
|
end
|
282
287
|
|
283
288
|
it "detects the ipv4 addresses of the ethernet interface" do
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
@plugin['network']['interfaces']['eth0']['addresses']['10.116.201.76']['family'].should == 'inet'
|
289
|
+
expect(plugin['network']['interfaces']['eth0']['addresses'].keys).to include('10.116.201.76')
|
290
|
+
expect(plugin['network']['interfaces']['eth0']['addresses']['10.116.201.76']['netmask']).to eq('255.255.255.0')
|
291
|
+
expect(plugin['network']['interfaces']['eth0']['addresses']['10.116.201.76']['broadcast']).to eq('10.116.201.255')
|
292
|
+
expect(plugin['network']['interfaces']['eth0']['addresses']['10.116.201.76']['family']).to eq('inet')
|
289
293
|
end
|
290
294
|
|
291
295
|
it "detects the ipv4 addresses of an ethernet subinterface" do
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
@plugin['network']['interfaces']['eth0.11']['addresses']['192.168.0.16']['family'].should == 'inet'
|
296
|
+
expect(plugin['network']['interfaces']['eth0.11']['addresses'].keys).to include('192.168.0.16')
|
297
|
+
expect(plugin['network']['interfaces']['eth0.11']['addresses']['192.168.0.16']['netmask']).to eq('255.255.255.0')
|
298
|
+
expect(plugin['network']['interfaces']['eth0.11']['addresses']['192.168.0.16']['broadcast']).to eq('192.168.0.255')
|
299
|
+
expect(plugin['network']['interfaces']['eth0.11']['addresses']['192.168.0.16']['family']).to eq('inet')
|
297
300
|
end
|
298
301
|
|
299
302
|
it "detects the ipv6 addresses of the ethernet interface" do
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
@plugin['network']['interfaces']['eth0']['addresses']['fe80::1031:3dff:fe02:bea2']['family'].should == 'inet6'
|
303
|
+
expect(plugin['network']['interfaces']['eth0']['addresses'].keys).to include('fe80::1031:3dff:fe02:bea2')
|
304
|
+
expect(plugin['network']['interfaces']['eth0']['addresses']['fe80::1031:3dff:fe02:bea2']['scope']).to eq('Link')
|
305
|
+
expect(plugin['network']['interfaces']['eth0']['addresses']['fe80::1031:3dff:fe02:bea2']['prefixlen']).to eq('64')
|
306
|
+
expect(plugin['network']['interfaces']['eth0']['addresses']['fe80::1031:3dff:fe02:bea2']['family']).to eq('inet6')
|
305
307
|
end
|
306
308
|
|
307
309
|
it "detects the ipv6 addresses of an ethernet subinterface" do
|
308
|
-
@plugin.run
|
309
310
|
%w[ 1111:2222:3333:4444::2 1111:2222:3333:4444::3 ].each do |addr|
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
311
|
+
expect(plugin['network']['interfaces']['eth0.11']['addresses'].keys).to include(addr)
|
312
|
+
expect(plugin['network']['interfaces']['eth0.11']['addresses'][addr]['scope']).to eq('Global')
|
313
|
+
expect(plugin['network']['interfaces']['eth0.11']['addresses'][addr]['prefixlen']).to eq('64')
|
314
|
+
expect(plugin['network']['interfaces']['eth0.11']['addresses'][addr]['family']).to eq('inet6')
|
314
315
|
end
|
315
316
|
end
|
316
317
|
|
317
318
|
it "detects the mac addresses of the ethernet interface" do
|
318
|
-
|
319
|
-
|
320
|
-
@plugin['network']['interfaces']['eth0']['addresses']['12:31:3D:02:BE:A2']['family'].should == 'lladdr'
|
319
|
+
expect(plugin['network']['interfaces']['eth0']['addresses'].keys).to include('12:31:3D:02:BE:A2')
|
320
|
+
expect(plugin['network']['interfaces']['eth0']['addresses']['12:31:3D:02:BE:A2']['family']).to eq('lladdr')
|
321
321
|
end
|
322
322
|
|
323
323
|
it "detects the encapsulation type of the ethernet interface" do
|
324
|
-
|
325
|
-
@plugin['network']['interfaces']['eth0']['encapsulation'].should == 'Ethernet'
|
324
|
+
expect(plugin['network']['interfaces']['eth0']['encapsulation']).to eq('Ethernet')
|
326
325
|
end
|
327
326
|
|
328
327
|
it "detects the flags of the ethernet interface" do
|
329
|
-
@plugin.run
|
330
328
|
if network_method == "ifconfig"
|
331
|
-
|
329
|
+
expect(plugin['network']['interfaces']['eth0']['flags'].sort).to eq(['BROADCAST','MULTICAST','RUNNING','UP'])
|
332
330
|
else
|
333
|
-
|
331
|
+
expect(plugin['network']['interfaces']['eth0']['flags'].sort).to eq(['BROADCAST','LOWER_UP','MULTICAST','UP'])
|
334
332
|
end
|
335
333
|
end
|
336
334
|
|
337
335
|
it "detects the number of the ethernet interface" do
|
338
|
-
|
339
|
-
@plugin['network']['interfaces']['eth0']['number'].should == "0"
|
336
|
+
expect(plugin['network']['interfaces']['eth0']['number']).to eq("0")
|
340
337
|
end
|
341
338
|
|
342
339
|
it "detects the mtu of the ethernet interface" do
|
343
|
-
|
344
|
-
@plugin['network']['interfaces']['eth0']['mtu'].should == "1500"
|
340
|
+
expect(plugin['network']['interfaces']['eth0']['mtu']).to eq("1500")
|
345
341
|
end
|
346
|
-
|
342
|
+
|
347
343
|
it "detects the ipv4 addresses of the loopback interface" do
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
@plugin['network']['interfaces']['lo']['addresses']['127.0.0.1']['family'].should == 'inet'
|
344
|
+
expect(plugin['network']['interfaces']['lo']['addresses'].keys).to include('127.0.0.1')
|
345
|
+
expect(plugin['network']['interfaces']['lo']['addresses']['127.0.0.1']['netmask']).to eq('255.0.0.0')
|
346
|
+
expect(plugin['network']['interfaces']['lo']['addresses']['127.0.0.1']['family']).to eq('inet')
|
352
347
|
end
|
353
348
|
|
354
349
|
it "detects the ipv6 addresses of the loopback interface" do
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
@plugin['network']['interfaces']['lo']['addresses']['::1']['family'].should == 'inet6'
|
350
|
+
expect(plugin['network']['interfaces']['lo']['addresses'].keys).to include('::1')
|
351
|
+
expect(plugin['network']['interfaces']['lo']['addresses']['::1']['scope']).to eq('Node')
|
352
|
+
expect(plugin['network']['interfaces']['lo']['addresses']['::1']['prefixlen']).to eq('128')
|
353
|
+
expect(plugin['network']['interfaces']['lo']['addresses']['::1']['family']).to eq('inet6')
|
360
354
|
end
|
361
355
|
|
362
356
|
it "detects the encapsulation type of the loopback interface" do
|
363
|
-
|
364
|
-
@plugin['network']['interfaces']['lo']['encapsulation'].should == 'Loopback'
|
357
|
+
expect(plugin['network']['interfaces']['lo']['encapsulation']).to eq('Loopback')
|
365
358
|
end
|
366
359
|
|
367
360
|
it "detects the flags of the ethernet interface" do
|
368
|
-
@plugin.run
|
369
361
|
if network_method == "ifconfig"
|
370
|
-
|
362
|
+
expect(plugin['network']['interfaces']['lo']['flags'].sort).to eq(['LOOPBACK','RUNNING','UP'])
|
371
363
|
else
|
372
|
-
|
364
|
+
expect(plugin['network']['interfaces']['lo']['flags'].sort).to eq(['LOOPBACK','LOWER_UP','UP'])
|
373
365
|
end
|
374
366
|
end
|
375
367
|
|
376
368
|
|
377
369
|
it "detects the mtu of the loopback interface" do
|
378
|
-
|
379
|
-
@plugin['network']['interfaces']['lo']['mtu'].should == "16436"
|
370
|
+
expect(plugin['network']['interfaces']['lo']['mtu']).to eq("16436")
|
380
371
|
end
|
381
372
|
|
382
373
|
it "detects the arp entries" do
|
383
|
-
|
384
|
-
@plugin['network']['interfaces']['eth0']['arp']['10.116.201.1'].should == 'fe:ff:ff:ff:ff:ff'
|
374
|
+
expect(plugin['network']['interfaces']['eth0']['arp']['10.116.201.1']).to eq('fe:ff:ff:ff:ff:ff')
|
385
375
|
end
|
386
376
|
|
387
377
|
end
|
388
|
-
|
378
|
+
|
389
379
|
describe "gathering interface counters via #{network_method}" do
|
390
|
-
before do
|
391
|
-
File.
|
392
|
-
|
393
|
-
@plugin.run
|
380
|
+
before(:each) do
|
381
|
+
allow(File).to receive(:exist?).with("/sbin/ip").and_return( network_method == "iproute2" )
|
382
|
+
plugin.run
|
394
383
|
end
|
395
384
|
|
396
385
|
it "detects the ethernet counters" do
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
386
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['tx']['bytes']).to eq("691785313")
|
387
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['tx']['packets']).to eq("1919690")
|
388
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['tx']['collisions']).to eq("0")
|
389
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['tx']['queuelen']).to eq("1000")
|
390
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['tx']['errors']).to eq("0")
|
391
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['tx']['carrier']).to eq("0")
|
392
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['tx']['drop']).to eq("0")
|
404
393
|
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
394
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['rx']['bytes']).to eq("1392844460")
|
395
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['rx']['packets']).to eq("2659966")
|
396
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['rx']['errors']).to eq("0")
|
397
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['rx']['overrun']).to eq("0")
|
398
|
+
expect(plugin['counters']['network']['interfaces']['eth0']['rx']['drop']).to eq("0")
|
410
399
|
end
|
411
400
|
|
412
401
|
it "detects the loopback counters" do
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
402
|
+
expect(plugin['counters']['network']['interfaces']['lo']['tx']['bytes']).to eq("35224")
|
403
|
+
expect(plugin['counters']['network']['interfaces']['lo']['tx']['packets']).to eq("524")
|
404
|
+
expect(plugin['counters']['network']['interfaces']['lo']['tx']['collisions']).to eq("0")
|
405
|
+
expect(plugin['counters']['network']['interfaces']['lo']['tx']['errors']).to eq("0")
|
406
|
+
expect(plugin['counters']['network']['interfaces']['lo']['tx']['carrier']).to eq("0")
|
407
|
+
expect(plugin['counters']['network']['interfaces']['lo']['tx']['drop']).to eq("0")
|
408
|
+
|
409
|
+
expect(plugin['counters']['network']['interfaces']['lo']['rx']['bytes']).to eq("35224")
|
410
|
+
expect(plugin['counters']['network']['interfaces']['lo']['rx']['packets']).to eq("524")
|
411
|
+
expect(plugin['counters']['network']['interfaces']['lo']['rx']['errors']).to eq("0")
|
412
|
+
expect(plugin['counters']['network']['interfaces']['lo']['rx']['overrun']).to eq("0")
|
413
|
+
expect(plugin['counters']['network']['interfaces']['lo']['rx']['drop']).to eq("0")
|
425
414
|
end
|
426
415
|
end
|
427
416
|
|
428
417
|
describe "setting the node's default IP address attribute with #{network_method}" do
|
429
|
-
before do
|
430
|
-
File.
|
431
|
-
|
418
|
+
before(:each) do
|
419
|
+
allow(File).to receive(:exist?).with("/sbin/ip").and_return( network_method == "iproute2" )
|
420
|
+
plugin.run
|
432
421
|
end
|
433
422
|
|
434
423
|
describe "without a subinterface" do
|
435
|
-
before do
|
436
|
-
@plugin.run
|
437
|
-
end
|
438
|
-
|
439
424
|
it "finds the default interface by asking which iface has the default route" do
|
440
|
-
|
425
|
+
expect(plugin['network']['default_interface']).to eq('eth0')
|
441
426
|
end
|
442
|
-
|
427
|
+
|
443
428
|
it "finds the default gateway by asking which iface has the default route" do
|
444
|
-
|
429
|
+
expect(plugin['network']['default_gateway']).to eq('10.116.201.1')
|
445
430
|
end
|
446
431
|
end
|
447
|
-
|
432
|
+
|
448
433
|
describe "with a link level default route" do
|
449
|
-
|
450
|
-
|
451
|
-
10.116.201.0/24 dev eth0 proto kernel
|
434
|
+
let(:linux_ip_route) {
|
435
|
+
'10.116.201.0/24 dev eth0 proto kernel
|
452
436
|
default dev eth0 scope link
|
453
|
-
|
454
|
-
|
455
|
-
|
437
|
+
'
|
438
|
+
}
|
439
|
+
|
440
|
+
let(:linux_route_n) {
|
441
|
+
'Kernel IP routing table
|
456
442
|
Destination Gateway Genmask Flags Metric Ref Use Iface
|
457
443
|
10.116.201.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
|
458
444
|
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 eth0
|
459
|
-
|
460
|
-
|
445
|
+
'
|
446
|
+
}
|
461
447
|
|
462
|
-
|
448
|
+
before(:each) do
|
449
|
+
plugin.run
|
463
450
|
end
|
464
451
|
|
465
452
|
it "finds the default interface by asking which iface has the default route" do
|
466
|
-
|
453
|
+
expect(plugin['network']['default_interface']).to eq('eth0')
|
467
454
|
end
|
468
|
-
|
455
|
+
|
469
456
|
it "finds the default interface by asking which iface has the default route" do
|
470
|
-
|
457
|
+
expect(plugin['network']['default_gateway']).to eq('0.0.0.0')
|
471
458
|
end
|
472
459
|
end
|
473
460
|
|
474
461
|
describe "with a subinterface" do
|
475
|
-
|
476
|
-
|
477
|
-
192.168.0.0/24 dev eth0.11 proto kernel src 192.168.0.2
|
462
|
+
let(:linux_ip_route) {
|
463
|
+
'192.168.0.0/24 dev eth0.11 proto kernel src 192.168.0.2
|
478
464
|
default via 192.168.0.15 dev eth0.11
|
479
|
-
|
480
|
-
|
481
|
-
|
465
|
+
'
|
466
|
+
}
|
467
|
+
|
468
|
+
let(:linux_route_n) {
|
469
|
+
'Kernel IP routing table
|
482
470
|
Destination Gateway Genmask Flags Metric Ref Use Iface
|
483
471
|
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0.11
|
484
472
|
0.0.0.0 192.168.0.15 0.0.0.0 UG 0 0 0 eth0.11
|
485
|
-
|
486
|
-
|
487
|
-
do_stubs
|
473
|
+
'
|
474
|
+
}
|
488
475
|
|
489
|
-
|
476
|
+
before(:each) do
|
477
|
+
plugin.run
|
490
478
|
end
|
491
|
-
|
479
|
+
|
492
480
|
it "finds the default interface by asking which iface has the default route" do
|
493
|
-
|
481
|
+
expect(plugin['network']["default_interface"]).to eq('eth0.11')
|
494
482
|
end
|
495
|
-
|
483
|
+
|
496
484
|
it "finds the default interface by asking which iface has the default route" do
|
497
|
-
|
485
|
+
expect(plugin['network']["default_gateway"]).to eq('192.168.0.15')
|
498
486
|
end
|
499
487
|
end
|
500
488
|
end
|
501
489
|
end
|
502
490
|
|
503
491
|
describe "for newer network features using iproute2 only" do
|
504
|
-
before do
|
505
|
-
File.
|
506
|
-
|
492
|
+
before(:each) do
|
493
|
+
allow(File).to receive(:exist?).with("/sbin/ip").and_return(true) # iproute2 only
|
494
|
+
plugin.run
|
507
495
|
end
|
508
496
|
|
509
497
|
it "completes the run" do
|
510
|
-
Ohai::Log.
|
511
|
-
|
512
|
-
@plugin['network'].should_not be_nil
|
498
|
+
expect(Ohai::Log).not_to receive(:debug).with(/Plugin linux::network threw exception/)
|
499
|
+
expect(plugin['network']).not_to be_nil
|
513
500
|
end
|
514
501
|
|
515
502
|
it "finds the default inet6 interface if there's a inet6 default route" do
|
516
|
-
|
517
|
-
@plugin['network']['default_inet6_interface'].should == 'eth0.11'
|
503
|
+
expect(plugin['network']['default_inet6_interface']).to eq('eth0.11')
|
518
504
|
end
|
519
505
|
|
520
506
|
it "finds the default inet6 gateway if there's a inet6 default route" do
|
521
|
-
|
522
|
-
@plugin['network']['default_inet6_gateway'].should == '1111:2222:3333:4444::1'
|
507
|
+
expect(plugin['network']['default_inet6_gateway']).to eq('1111:2222:3333:4444::1')
|
523
508
|
end
|
524
509
|
|
525
510
|
it "finds inet6 neighbours" do
|
526
|
-
|
527
|
-
@plugin['network']['interfaces']['eth0.11']['neighbour_inet6']['1111:2222:3333:4444::1'].should == '00:1c:0e:12:34:56'
|
511
|
+
expect(plugin['network']['interfaces']['eth0.11']['neighbour_inet6']['1111:2222:3333:4444::1']).to eq('00:1c:0e:12:34:56')
|
528
512
|
end
|
529
513
|
|
530
514
|
it "detects the ipv4 addresses of an ethernet interface with a crazy name" do
|
531
|
-
@
|
532
|
-
|
533
|
-
|
534
|
-
@plugin['network']['interfaces']['foo:veth0@eth0']['addresses']['192.168.212.2']['family'].should == 'inet'
|
515
|
+
expect(plugin['network']['interfaces']['foo:veth0@eth0']['addresses'].keys).to include('192.168.212.2')
|
516
|
+
expect(plugin['network']['interfaces']['foo:veth0@eth0']['addresses']['192.168.212.2']['netmask']).to eq('255.255.255.0')
|
517
|
+
expect(plugin['network']['interfaces']['foo:veth0@eth0']['addresses']['192.168.212.2']['family']).to eq('inet')
|
535
518
|
end
|
536
519
|
|
537
520
|
it "generates a fake interface for ip aliases for backward compatibility" do
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
@plugin['network']['interfaces']['eth0:5']['addresses']['192.168.5.1']['family'].should == 'inet'
|
521
|
+
expect(plugin['network']['interfaces']['eth0:5']['addresses'].keys).to include('192.168.5.1')
|
522
|
+
expect(plugin['network']['interfaces']['eth0:5']['addresses']['192.168.5.1']['netmask']).to eq('255.255.255.0')
|
523
|
+
expect(plugin['network']['interfaces']['eth0:5']['addresses']['192.168.5.1']['family']).to eq('inet')
|
542
524
|
end
|
543
525
|
|
544
526
|
it "adds the vlan information of an interface" do
|
545
|
-
|
546
|
-
|
547
|
-
@plugin['network']['interfaces']['eth0.11']['vlan']['flags'].should == [ 'REORDER_HDR' ]
|
527
|
+
expect(plugin['network']['interfaces']['eth0.11']['vlan']['id']).to eq('11')
|
528
|
+
expect(plugin['network']['interfaces']['eth0.11']['vlan']['flags']).to eq([ 'REORDER_HDR' ])
|
548
529
|
end
|
549
530
|
|
550
531
|
it "adds the state of an interface" do
|
551
|
-
|
552
|
-
@plugin['network']['interfaces']['eth0.11']['state'].should == 'up'
|
532
|
+
expect(plugin['network']['interfaces']['eth0.11']['state']).to eq('up')
|
553
533
|
end
|
554
534
|
|
555
535
|
describe "when dealing with routes" do
|
556
536
|
it "adds routes" do
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
537
|
+
plugin.run
|
538
|
+
expect(plugin['network']['interfaces']['eth0']['routes']).to include Mash.new( :destination => "10.116.201.0/24", :proto => "kernel", :family =>"inet" )
|
539
|
+
expect(plugin['network']['interfaces']['eth0']['routes']).to include Mash.new( :destination => "10.5.4.0/24", :family =>"inet", :via => "10.5.4.1")
|
540
|
+
expect(plugin['network']['interfaces']['eth0']['routes']).to include Mash.new( :destination => "10.5.4.0/24", :family =>"inet", :via => "10.5.4.2")
|
541
|
+
expect(plugin['network']['interfaces']['foo:veth0@eth0']['routes']).to include Mash.new( :destination => "192.168.212.0/24", :proto => "kernel", :src => "192.168.212.2", :family =>"inet" )
|
542
|
+
expect(plugin['network']['interfaces']['eth0']['routes']).to include Mash.new( :destination => "fe80::/64", :metric => "256", :proto => "kernel", :family => "inet6" )
|
543
|
+
expect(plugin['network']['interfaces']['eth0.11']['routes']).to include Mash.new( :destination => "1111:2222:3333:4444::/64", :metric => "1024", :family => "inet6" )
|
544
|
+
expect(plugin['network']['interfaces']['eth0.11']['routes']).to include Mash.new( :destination => "default", :via => "1111:2222:3333:4444::1", :metric => "1024", :family => "inet6")
|
565
545
|
end
|
566
546
|
|
567
547
|
describe "when there isn't a source field in route entries " do
|
548
|
+
before(:each) do
|
549
|
+
plugin.run
|
550
|
+
end
|
551
|
+
|
568
552
|
it "doesn't set ipaddress" do
|
569
|
-
|
570
|
-
@plugin['ipaddress'].should be nil
|
553
|
+
expect(plugin['ipaddress']).to be nil
|
571
554
|
end
|
572
555
|
|
573
556
|
it "doesn't set macaddress" do
|
574
|
-
|
575
|
-
@plugin['macaddress'].should be nil
|
557
|
+
expect(plugin['macaddress']).to be nil
|
576
558
|
end
|
577
559
|
|
578
560
|
it "doesn't set ip6address" do
|
579
|
-
|
580
|
-
@plugin['ip6address'].should be nil
|
561
|
+
expect(plugin['ip6address']).to be nil
|
581
562
|
end
|
582
563
|
end
|
583
564
|
|
584
565
|
describe "when there's a source field in the default route entry" do
|
585
|
-
|
586
|
-
|
587
|
-
10.116.201.0/24 dev eth0 proto kernel
|
566
|
+
let(:linux_ip_route) {
|
567
|
+
'10.116.201.0/24 dev eth0 proto kernel
|
588
568
|
192.168.5.0/24 dev eth0 proto kernel src 192.168.5.1
|
589
569
|
192.168.212.0/24 dev foo:veth0@eth0 proto kernel src 192.168.212.2
|
590
570
|
172.16.151.0/24 dev eth0 proto kernel src 172.16.151.100
|
591
571
|
192.168.0.0/24 dev eth0 proto kernel src 192.168.0.2
|
592
572
|
default via 10.116.201.1 dev eth0 src 10.116.201.76
|
593
|
-
|
573
|
+
'
|
574
|
+
}
|
594
575
|
|
595
|
-
|
596
|
-
fe80::/64 dev eth0 proto kernel metric 256
|
576
|
+
let(:linux_ip_route_inet6) {
|
577
|
+
'fe80::/64 dev eth0 proto kernel metric 256
|
597
578
|
fe80::/64 dev eth0.11 proto kernel metric 256
|
598
579
|
1111:2222:3333:4444::/64 dev eth0.11 metric 1024
|
599
580
|
default via 1111:2222:3333:4444::1 dev eth0.11 metric 1024 src 1111:2222:3333:4444::3
|
600
|
-
|
581
|
+
'
|
582
|
+
}
|
601
583
|
|
602
|
-
|
584
|
+
before(:each) do
|
585
|
+
plugin.run
|
603
586
|
end
|
604
587
|
|
605
588
|
it "completes the run" do
|
606
|
-
Ohai::Log.
|
607
|
-
|
608
|
-
@plugin['network'].should_not be_nil
|
589
|
+
expect(Ohai::Log).not_to receive(:debug).with(/Plugin linux::network threw exception/)
|
590
|
+
expect(plugin['network']).not_to be_nil
|
609
591
|
end
|
610
592
|
|
611
593
|
it "sets ipaddress" do
|
612
|
-
|
613
|
-
@plugin['ipaddress'].should == "10.116.201.76"
|
594
|
+
expect(plugin['ipaddress']).to eq("10.116.201.76")
|
614
595
|
end
|
615
596
|
|
616
597
|
it "sets ip6address" do
|
617
|
-
|
618
|
-
@plugin['ip6address'].should == "1111:2222:3333:4444::3"
|
598
|
+
expect(plugin['ip6address']).to eq("1111:2222:3333:4444::3")
|
619
599
|
end
|
620
600
|
end
|
621
601
|
|
622
602
|
describe "when there're several default routes" do
|
623
|
-
|
624
|
-
|
625
|
-
10.116.201.0/24 dev eth0 proto kernel src 10.116.201.76
|
603
|
+
let(:linux_ip_route) {
|
604
|
+
'10.116.201.0/24 dev eth0 proto kernel src 10.116.201.76
|
626
605
|
192.168.5.0/24 dev eth0 proto kernel src 192.168.5.1
|
627
606
|
192.168.212.0/24 dev foo:veth0@eth0 proto kernel src 192.168.212.2
|
628
607
|
172.16.151.0/24 dev eth0 proto kernel src 172.16.151.100
|
629
608
|
192.168.0.0/24 dev eth0 proto kernel src 192.168.0.2
|
630
609
|
default via 10.116.201.1 dev eth0 metric 10
|
631
610
|
default via 10.116.201.254 dev eth0 metric 9
|
632
|
-
|
611
|
+
'
|
612
|
+
}
|
633
613
|
|
634
|
-
|
635
|
-
fe80::/64 dev eth0 proto kernel metric 256
|
614
|
+
let(:linux_ip_route_inet6) {
|
615
|
+
'fe80::/64 dev eth0 proto kernel metric 256
|
636
616
|
fe80::/64 dev eth0.11 proto kernel metric 256
|
637
617
|
1111:2222:3333:4444::/64 dev eth0.11 metric 1024 src 1111:2222:3333:4444::3
|
638
618
|
default via 1111:2222:3333:4444::1 dev eth0.11 metric 1024
|
639
619
|
default via 1111:2222:3333:4444::ffff dev eth0.11 metric 1023
|
640
|
-
|
620
|
+
'
|
621
|
+
}
|
641
622
|
|
642
|
-
|
623
|
+
before(:each) do
|
624
|
+
plugin.run
|
643
625
|
end
|
644
626
|
|
645
627
|
it "completes the run" do
|
646
|
-
Ohai::Log.
|
647
|
-
|
648
|
-
@plugin['network'].should_not be_nil
|
628
|
+
expect(Ohai::Log).not_to receive(:debug).with(/Plugin linux::network threw exception/)
|
629
|
+
expect(plugin['network']).not_to be_nil
|
649
630
|
end
|
650
631
|
|
651
632
|
it "sets default ipv4 interface and gateway" do
|
652
|
-
|
653
|
-
|
654
|
-
@plugin['network']['default_gateway'].should == '10.116.201.254'
|
633
|
+
expect(plugin['network']['default_interface']).to eq('eth0')
|
634
|
+
expect(plugin['network']['default_gateway']).to eq('10.116.201.254')
|
655
635
|
end
|
656
636
|
|
657
637
|
it "sets default ipv6 interface and gateway" do
|
658
|
-
|
659
|
-
|
660
|
-
@plugin['network']['default_inet6_gateway'].should == '1111:2222:3333:4444::ffff'
|
638
|
+
expect(plugin['network']['default_inet6_interface']).to eq('eth0.11')
|
639
|
+
expect(plugin['network']['default_inet6_gateway']).to eq('1111:2222:3333:4444::ffff')
|
661
640
|
end
|
662
641
|
end
|
663
642
|
|
664
643
|
describe "when there're a mixed setup of routes that could be used to set ipaddress" do
|
665
|
-
|
666
|
-
|
667
|
-
10.116.201.0/24 dev eth0 proto kernel src 10.116.201.76
|
644
|
+
let(:linux_ip_route) {
|
645
|
+
'10.116.201.0/24 dev eth0 proto kernel src 10.116.201.76
|
668
646
|
192.168.5.0/24 dev eth0 proto kernel src 192.168.5.1
|
669
647
|
192.168.212.0/24 dev foo:veth0@eth0 proto kernel src 192.168.212.2
|
670
648
|
172.16.151.0/24 dev eth0 proto kernel src 172.16.151.100
|
671
649
|
192.168.0.0/24 dev eth0 proto kernel src 192.168.0.2
|
672
650
|
default via 10.116.201.1 dev eth0 metric 10
|
673
651
|
default via 10.116.201.254 dev eth0 metric 9 src 10.116.201.74
|
674
|
-
|
652
|
+
'
|
653
|
+
}
|
675
654
|
|
676
|
-
|
677
|
-
fe80::/64 dev eth0 proto kernel metric 256
|
655
|
+
let(:linux_ip_route_inet6) {
|
656
|
+
'fe80::/64 dev eth0 proto kernel metric 256
|
678
657
|
fe80::/64 dev eth0.11 proto kernel metric 256
|
679
658
|
1111:2222:3333:4444::/64 dev eth0.11 metric 1024 src 1111:2222:3333:4444::3
|
680
659
|
default via 1111:2222:3333:4444::1 dev eth0.11 metric 1024
|
681
660
|
default via 1111:2222:3333:4444::ffff dev eth0.11 metric 1023 src 1111:2222:3333:4444::2
|
682
|
-
|
661
|
+
'
|
662
|
+
}
|
683
663
|
|
684
|
-
|
664
|
+
before(:each) do
|
665
|
+
plugin.run
|
685
666
|
end
|
686
667
|
|
687
668
|
it "completes the run" do
|
688
|
-
Ohai::Log.
|
689
|
-
|
690
|
-
@plugin['network'].should_not be_nil
|
669
|
+
expect(Ohai::Log).not_to receive(:debug).with(/Plugin linux::network threw exception/)
|
670
|
+
expect(plugin['network']).not_to be_nil
|
691
671
|
end
|
692
672
|
|
693
673
|
it "sets ipaddress" do
|
694
|
-
|
695
|
-
@plugin["ipaddress"].should == "10.116.201.74"
|
674
|
+
expect(plugin["ipaddress"]).to eq("10.116.201.74")
|
696
675
|
end
|
697
676
|
|
698
677
|
it "sets ip6address" do
|
699
|
-
|
700
|
-
@plugin["ip6address"].should == "1111:2222:3333:4444::2"
|
678
|
+
expect(plugin["ip6address"]).to eq("1111:2222:3333:4444::2")
|
701
679
|
end
|
702
680
|
end
|
703
681
|
|
704
682
|
describe "when there's a source field in a local route entry " do
|
705
|
-
|
706
|
-
|
707
|
-
10.116.201.0/24 dev eth0 proto kernel src 10.116.201.76
|
683
|
+
let(:linux_ip_route) {
|
684
|
+
'10.116.201.0/24 dev eth0 proto kernel src 10.116.201.76
|
708
685
|
192.168.5.0/24 dev eth0 proto kernel src 192.168.5.1
|
709
686
|
192.168.212.0/24 dev foo:veth0@eth0 proto kernel src 192.168.212.2
|
710
687
|
172.16.151.0/24 dev eth0 proto kernel src 172.16.151.100
|
711
688
|
192.168.0.0/24 dev eth0 proto kernel src 192.168.0.2
|
712
689
|
default via 10.116.201.1 dev eth0
|
713
|
-
|
690
|
+
'
|
691
|
+
}
|
714
692
|
|
715
|
-
|
716
|
-
fe80::/64 dev eth0 proto kernel metric 256
|
693
|
+
let(:linux_ip_route_inet6) {
|
694
|
+
'fe80::/64 dev eth0 proto kernel metric 256
|
717
695
|
fe80::/64 dev eth0.11 proto kernel metric 256
|
718
696
|
1111:2222:3333:4444::/64 dev eth0.11 metric 1024 src 1111:2222:3333:4444::3
|
719
697
|
default via 1111:2222:3333:4444::1 dev eth0.11 metric 1024
|
720
|
-
|
721
|
-
|
722
|
-
do_stubs
|
723
|
-
end
|
698
|
+
'
|
699
|
+
}
|
724
700
|
|
725
701
|
it "completes the run" do
|
726
|
-
Ohai::Log.
|
727
|
-
|
728
|
-
|
702
|
+
expect(Ohai::Log).not_to receive(:debug).with(/Plugin linux::network threw exception/)
|
703
|
+
plugin.run
|
704
|
+
expect(plugin['network']).not_to be_nil
|
729
705
|
end
|
730
706
|
|
731
707
|
it "sets ipaddress" do
|
732
|
-
|
733
|
-
|
708
|
+
plugin.run
|
709
|
+
expect(plugin['ipaddress']).to eq("10.116.201.76")
|
734
710
|
end
|
735
711
|
|
736
712
|
describe "when about to set macaddress" do
|
737
713
|
it "sets macaddress" do
|
738
|
-
|
739
|
-
|
714
|
+
plugin.run
|
715
|
+
expect(plugin['macaddress']).to eq("12:31:3D:02:BE:A2")
|
740
716
|
end
|
741
717
|
|
742
718
|
describe "when then interface has the NOARP flag" do
|
743
|
-
|
744
|
-
|
745
|
-
10.118.19.1 dev tun0 proto kernel src 10.118.19.39
|
719
|
+
let(:linux_ip_route) {
|
720
|
+
'10.118.19.1 dev tun0 proto kernel src 10.118.19.39
|
746
721
|
default via 172.16.19.1 dev tun0
|
747
|
-
|
748
|
-
|
749
|
-
do_stubs
|
750
|
-
end
|
722
|
+
'
|
723
|
+
}
|
751
724
|
|
752
725
|
it "completes the run" do
|
753
|
-
Ohai::Log.
|
754
|
-
|
755
|
-
|
726
|
+
expect(Ohai::Log).not_to receive(:debug).with(/Plugin linux::network threw exception/)
|
727
|
+
plugin.run
|
728
|
+
expect(plugin['network']).not_to be_nil
|
756
729
|
end
|
757
730
|
|
758
731
|
it "doesn't set macaddress" do
|
759
|
-
|
760
|
-
|
732
|
+
plugin.run
|
733
|
+
expect(plugin['macaddress']).to be_nil
|
761
734
|
end
|
762
735
|
end
|
763
736
|
end
|
764
737
|
|
765
738
|
it "sets ip6address" do
|
766
|
-
|
767
|
-
|
739
|
+
plugin.run
|
740
|
+
expect(plugin['ip6address']).to eq("1111:2222:3333:4444::3")
|
768
741
|
end
|
769
742
|
end
|
770
743
|
|
771
744
|
describe "with a link level default route" do
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
745
|
+
let(:linux_ip_route) {
|
746
|
+
'default dev venet0 scope link
|
747
|
+
'
|
748
|
+
}
|
776
749
|
|
777
|
-
|
750
|
+
before(:each) do
|
751
|
+
plugin.run
|
778
752
|
end
|
779
753
|
|
780
754
|
it "completes the run" do
|
781
|
-
Ohai::Log.
|
782
|
-
|
783
|
-
@plugin['network'].should_not be_nil
|
755
|
+
expect(Ohai::Log).not_to receive(:debug).with(/Plugin linux::network threw exception/)
|
756
|
+
expect(plugin['network']).not_to be_nil
|
784
757
|
end
|
785
758
|
|
786
759
|
it "doesn't set ipaddress" do
|
787
|
-
|
788
|
-
@plugin['ipaddress'].should be_nil
|
760
|
+
expect(plugin['ipaddress']).to be_nil
|
789
761
|
end
|
790
762
|
end
|
791
763
|
|
792
764
|
describe "when not having a global scope ipv6 address" do
|
793
|
-
|
794
|
-
|
795
|
-
fe80::/64 dev eth0 proto kernel metric 256
|
765
|
+
let(:linux_ip_route_inet6) {
|
766
|
+
'fe80::/64 dev eth0 proto kernel metric 256
|
796
767
|
default via fe80::21c:eff:fe12:3456 dev eth0.153 src fe80::2e0:81ff:fe2b:48e7 metric 1024
|
797
|
-
|
798
|
-
|
799
|
-
|
768
|
+
'
|
769
|
+
}
|
770
|
+
before(:each) do
|
771
|
+
plugin.run
|
800
772
|
end
|
801
773
|
|
802
774
|
it "completes the run" do
|
803
|
-
Ohai::Log.
|
804
|
-
|
805
|
-
@plugin['network'].should_not be_nil
|
775
|
+
expect(Ohai::Log).not_to receive(:debug).with(/Plugin linux::network threw exception/)
|
776
|
+
expect(plugin['network']).not_to be_nil
|
806
777
|
end
|
807
778
|
|
808
779
|
it "doesn't set ip6address" do
|
809
|
-
|
810
|
-
@plugin['ip6address'].should be_nil
|
780
|
+
expect(plugin['ip6address']).to be_nil
|
811
781
|
end
|
812
782
|
|
813
783
|
end
|
814
784
|
|
815
785
|
describe "with no default route" do
|
816
|
-
|
817
|
-
|
818
|
-
10.116.201.0/24 dev eth0 proto kernel src 10.116.201.76
|
786
|
+
let(:linux_ip_route) {
|
787
|
+
'10.116.201.0/24 dev eth0 proto kernel src 10.116.201.76
|
819
788
|
192.168.5.0/24 dev eth0 proto kernel src 192.168.5.1
|
820
789
|
192.168.212.0/24 dev foo:veth0@eth0 proto kernel src 192.168.212.2
|
821
790
|
172.16.151.0/24 dev eth0 proto kernel src 172.16.151.100
|
822
791
|
192.168.0.0/24 dev eth0 proto kernel src 192.168.0.2
|
823
|
-
|
792
|
+
'
|
793
|
+
}
|
824
794
|
|
825
|
-
|
826
|
-
fe80::/64 dev eth0 proto kernel metric 256
|
795
|
+
let(:linux_ip_route_inet6) {
|
796
|
+
'fe80::/64 dev eth0 proto kernel metric 256
|
827
797
|
fe80::/64 dev eth0.11 proto kernel metric 256
|
828
798
|
1111:2222:3333:4444::/64 dev eth0.11 metric 1024 src 1111:2222:3333:4444::3
|
829
|
-
|
799
|
+
'
|
800
|
+
}
|
830
801
|
|
831
|
-
|
802
|
+
before(:each) do
|
803
|
+
plugin.run
|
832
804
|
end
|
833
805
|
|
834
806
|
it "completes the run" do
|
835
|
-
Ohai::Log.
|
836
|
-
|
837
|
-
@plugin['network'].should_not be_nil
|
807
|
+
expect(Ohai::Log).not_to receive(:debug).with(/Plugin linux::network threw exception/)
|
808
|
+
expect(plugin['network']).not_to be_nil
|
838
809
|
end
|
839
810
|
|
840
811
|
it "doesn't set ipaddress" do
|
841
|
-
|
842
|
-
@plugin['ipaddress'].should be_nil
|
812
|
+
expect(plugin['ipaddress']).to be_nil
|
843
813
|
end
|
844
814
|
|
845
815
|
it "doesn't set ip6address" do
|
846
|
-
|
847
|
-
@plugin['ip6address'].should be_nil
|
816
|
+
expect(plugin['ip6address']).to be_nil
|
848
817
|
end
|
849
818
|
end
|
850
819
|
|
851
820
|
describe "with irrelevant routes (container setups)" do
|
852
|
-
|
853
|
-
|
854
|
-
10.116.201.0/26 dev eth0 proto kernel src 10.116.201.39
|
821
|
+
let(:linux_ip_route) {
|
822
|
+
'10.116.201.0/26 dev eth0 proto kernel src 10.116.201.39
|
855
823
|
10.116.201.0/26 dev if4 proto kernel src 10.116.201.45
|
856
824
|
10.118.19.0/26 dev eth0 proto kernel src 10.118.19.39
|
857
825
|
10.118.19.0/26 dev if5 proto kernel src 10.118.19.45
|
858
826
|
default via 10.116.201.1 dev eth0 src 10.116.201.99
|
859
|
-
|
827
|
+
'
|
828
|
+
}
|
860
829
|
|
861
|
-
|
862
|
-
fe80::/64 dev eth0 proto kernel metric 256
|
830
|
+
let(:linux_ip_route_inet6) {
|
831
|
+
'fe80::/64 dev eth0 proto kernel metric 256
|
863
832
|
fe80::/64 dev eth0.11 proto kernel metric 256
|
864
833
|
1111:2222:3333:4444::/64 dev eth0.11 metric 1024 src 1111:2222:3333:4444::FFFF:2
|
865
834
|
default via 1111:2222:3333:4444::1 dev eth0.11 metric 1024
|
866
|
-
|
835
|
+
'
|
836
|
+
}
|
867
837
|
|
868
|
-
|
838
|
+
before(:each) do
|
839
|
+
plugin.run
|
869
840
|
end
|
870
841
|
|
871
842
|
it "completes the run" do
|
872
|
-
Ohai::Log.
|
873
|
-
|
874
|
-
@plugin['network'].should_not be_nil
|
843
|
+
expect(Ohai::Log).not_to receive(:debug).with(/Plugin linux::network threw exception/)
|
844
|
+
expect(plugin['network']).not_to be_nil
|
875
845
|
end
|
876
846
|
|
877
847
|
it "doesn't add bogus routes" do
|
878
|
-
|
879
|
-
|
880
|
-
|
881
|
-
@plugin['network']['interfaces']['eth0']['routes'].should_not include Mash.new( :destination => "1111:2222:3333:4444::/64", :family => "inet6", :metric => "1024" )
|
848
|
+
expect(plugin['network']['interfaces']['eth0']['routes']).not_to include Mash.new( :destination => "10.116.201.0/26", :proto => "kernel", :family => "inet", :via => "10.116.201.39" )
|
849
|
+
expect(plugin['network']['interfaces']['eth0']['routes']).not_to include Mash.new( :destination => "10.118.19.0/26", :proto => "kernel", :family => "inet", :via => "10.118.19.39" )
|
850
|
+
expect(plugin['network']['interfaces']['eth0']['routes']).not_to include Mash.new( :destination => "1111:2222:3333:4444::/64", :family => "inet6", :metric => "1024" )
|
882
851
|
end
|
883
852
|
|
884
853
|
it "doesn't set ipaddress" do
|
885
|
-
|
886
|
-
@plugin['ipaddress'].should be_nil
|
854
|
+
expect(plugin['ipaddress']).to be_nil
|
887
855
|
end
|
888
856
|
|
889
857
|
it "doesn't set ip6address" do
|
890
|
-
|
891
|
-
@plugin['ip6address'].should be_nil
|
858
|
+
expect(plugin['ip6address']).to be_nil
|
892
859
|
end
|
893
860
|
end
|
894
861
|
|
895
862
|
# This should never happen in the real world.
|
896
863
|
describe "when encountering a surprise interface" do
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
end
|
903
|
-
|
864
|
+
let(:linux_ip_route) {
|
865
|
+
'192.168.122.0/24 dev virbr0 proto kernel src 192.168.122.1
|
866
|
+
'
|
867
|
+
}
|
868
|
+
|
904
869
|
it "logs a message and skips previously unseen interfaces in 'ip route show'" do
|
905
|
-
Ohai::Log.
|
906
|
-
Ohai::Log.
|
907
|
-
|
870
|
+
expect(Ohai::Log).to receive(:debug).with("Skipping previously unseen interface from 'ip route show': virbr0").once
|
871
|
+
allow(Ohai::Log).to receive(:debug) # Catches the 'Loading plugin network' type messages
|
872
|
+
plugin.run
|
873
|
+
end
|
874
|
+
end
|
875
|
+
|
876
|
+
describe "when running with ip version ss131122" do
|
877
|
+
let(:linux_ip_link_s_d) {
|
878
|
+
'1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT group default
|
879
|
+
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0
|
880
|
+
RX: bytes packets errors dropped overrun mcast
|
881
|
+
35224 524 0 0 0 0
|
882
|
+
TX: bytes packets errors dropped carrier collsns
|
883
|
+
35224 524 0 0 0 0
|
884
|
+
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
|
885
|
+
link/ether 12:31:3d:02:be:a2 brd ff:ff:ff:ff:ff:ff promiscuity 0
|
886
|
+
RX: bytes packets errors dropped overrun mcast
|
887
|
+
1392844460 2659966 0 0 0 0
|
888
|
+
TX: bytes packets errors dropped carrier collsns
|
889
|
+
691785313 1919690 0 0 0 0
|
890
|
+
3: eth0.11@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
|
891
|
+
link/ether 00:0c:29:41:71:45 brd ff:ff:ff:ff:ff:ff promiscuity 0
|
892
|
+
vlan protocol 802.1Q id 11 <REORDER_HDR>
|
893
|
+
RX: bytes packets errors dropped overrun mcast
|
894
|
+
0 0 0 0 0 0
|
895
|
+
TX: bytes packets errors dropped carrier collsns
|
896
|
+
0 0 0 0 0 0
|
897
|
+
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 100
|
898
|
+
link/none promiscuity 0
|
899
|
+
RX: bytes packets errors dropped overrun mcast
|
900
|
+
1392844460 2659966 0 0 0 0
|
901
|
+
TX: bytes packets errors dropped carrier collsns
|
902
|
+
691785313 1919690 0 0 0 0
|
903
|
+
5: venet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
|
904
|
+
link/void promiscuity 0
|
905
|
+
RX: bytes packets errors dropped overrun mcast
|
906
|
+
1392844460 2659966 0 0 0 0
|
907
|
+
TX: bytes packets errors dropped carrier collsns
|
908
|
+
691785313 1919690 0 0 0 0
|
909
|
+
'
|
910
|
+
}
|
911
|
+
|
912
|
+
it "adds the vlan information of an interface" do
|
913
|
+
plugin.run
|
914
|
+
expect(plugin['network']['interfaces']['eth0.11']['vlan']['id']).to eq('11')
|
915
|
+
expect(plugin['network']['interfaces']['eth0.11']['vlan']['protocol']).to eq('802.1Q')
|
916
|
+
expect(plugin['network']['interfaces']['eth0.11']['vlan']['flags']).to eq([ 'REORDER_HDR' ])
|
908
917
|
end
|
909
918
|
end
|
910
919
|
end
|
911
920
|
end
|
912
|
-
|
913
921
|
end
|