ohai 16.17.0 → 16.17.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ohai/plugins/linux/network.rb +85 -7
- data/lib/ohai/plugins/packages.rb +1 -1
- data/lib/ohai/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13d2f3369090412d4b03cbe4ec7cae19c4d10276d10abeb44036a98792128a5a
|
4
|
+
data.tar.gz: 7f22588951efbb2f0e0585a8ed958529cb55623cefb1ab214866b1878b6d1432
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 857f8cfd699d5c0fb424c34c935dab790202922dc1d76556aaf50ed7cb1d25286d8c28eb1c25f258b798a13beb6fd738da69a90f65e5fa06422e3ae71e9602ce
|
7
|
+
data.tar.gz: 7b7a2d48a1ce3a4298fe145e088609935b99adb032f414ddc1fdac968d2111ca96e1366ede4d7e3c568d166bbe6030e9181b925cc37fcf64722409a20bd9945c
|
@@ -80,9 +80,22 @@ Ohai.plugin(:Network) do
|
|
80
80
|
line.strip!
|
81
81
|
logger.trace("Plugin Network: Parsing #{line}")
|
82
82
|
if /\\/.match?(line)
|
83
|
-
|
84
|
-
|
85
|
-
|
83
|
+
# If we have multipath routing, then the first part will be a normal
|
84
|
+
# looking route:
|
85
|
+
# default proto ra metric 1024 <other options>
|
86
|
+
# Each successive part after that is a hop without those options.
|
87
|
+
# So the first thing we do is grab that first part, and split it into
|
88
|
+
# the route destination ("default"), and the route options.
|
89
|
+
parts = line.split("\\")
|
90
|
+
route_dest, dest_opts = parts.first.split(nil, 2)
|
91
|
+
# Then all the route endings, generally just nexthops.
|
92
|
+
route_endings = parts[1..-1]
|
93
|
+
if dest_opts && !dest_opts.empty?
|
94
|
+
# Route options like proto, metric, etc. only appear once for each
|
95
|
+
# multipath configuration. Prepend this information to the route
|
96
|
+
# endings so the code below will assign the fields properly.
|
97
|
+
route_endings.map! { |e| e.include?("nexthop") ? "#{dest_opts} #{e}" : e }
|
98
|
+
end
|
86
99
|
elsif line =~ /^([^\s]+)\s(.*)$/
|
87
100
|
route_dest = $1
|
88
101
|
route_endings = [$2]
|
@@ -90,9 +103,24 @@ Ohai.plugin(:Network) do
|
|
90
103
|
next
|
91
104
|
end
|
92
105
|
route_endings.each do |route_ending|
|
106
|
+
route_entry = Mash.new(destination: route_dest,
|
107
|
+
family: family[:name])
|
108
|
+
route_int = nil
|
93
109
|
if route_ending =~ /\bdev\s+([^\s]+)\b/
|
94
110
|
route_int = $1
|
95
|
-
|
111
|
+
end
|
112
|
+
# does any known interface own the src address?
|
113
|
+
# we try to infer the interface/device from its address if it isn't specified
|
114
|
+
# we want to override the interface set via nexthop but only if possible
|
115
|
+
if line =~ /\bsrc\s+([^\s]+)\b/ && (!route_int || line.include?("nexthop"))
|
116
|
+
# only clobber previously set route_int if we find a match
|
117
|
+
if (match = iface.select { |name, intf| intf.fetch("addresses", {}).any? { |addr, _| addr == $1 } }.keys.first)
|
118
|
+
route_int = match
|
119
|
+
route_entry[:inferred] = true
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
unless route_int
|
96
124
|
logger.trace("Plugin Network: Skipping route entry without a device: '#{line}'")
|
97
125
|
next
|
98
126
|
end
|
@@ -103,8 +131,6 @@ Ohai.plugin(:Network) do
|
|
103
131
|
next
|
104
132
|
end
|
105
133
|
|
106
|
-
route_entry = Mash.new(destination: route_dest,
|
107
|
-
family: family[:name])
|
108
134
|
%w{via scope metric proto src}.each do |k|
|
109
135
|
# http://rubular.com/r/pwTNp65VFf
|
110
136
|
route_entry[k] = $1 if route_ending =~ /\b#{k}\s+([^\s]+)/
|
@@ -273,6 +299,30 @@ Ohai.plugin(:Network) do
|
|
273
299
|
iface
|
274
300
|
end
|
275
301
|
|
302
|
+
# determine offload features for the interface using ethtool
|
303
|
+
def ethernet_offload_parameters(iface)
|
304
|
+
return iface unless ethtool_binary_path
|
305
|
+
|
306
|
+
iface.each_key do |tmp_int|
|
307
|
+
next unless iface[tmp_int][:encapsulation] == "Ethernet"
|
308
|
+
|
309
|
+
so = shell_out("#{ethtool_binary_path} -k #{tmp_int}")
|
310
|
+
Ohai::Log.debug("Plugin Network: Parsing ethtool output: #{so.stdout}")
|
311
|
+
iface[tmp_int]["offload_params"] = {}
|
312
|
+
so.stdout.lines.each do |line|
|
313
|
+
next if line.start_with?("Features for")
|
314
|
+
next if line.strip.nil?
|
315
|
+
|
316
|
+
key, val = line.split(/:\s+/)
|
317
|
+
if val
|
318
|
+
offload_key = key.downcase.strip.tr(" ", "_").to_s
|
319
|
+
iface[tmp_int]["offload_params"][offload_key] = val.downcase.gsub(/\[.*\]/, "").strip.to_s
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
323
|
+
iface
|
324
|
+
end
|
325
|
+
|
276
326
|
# determine pause parameters for the interface using ethtool
|
277
327
|
def ethernet_pause_parameters(iface)
|
278
328
|
return iface unless ethtool_binary_path
|
@@ -326,6 +376,7 @@ Ohai.plugin(:Network) do
|
|
326
376
|
so = shell_out("ip -d -s link")
|
327
377
|
tmp_int = nil
|
328
378
|
on_rx = true
|
379
|
+
xdp_mode = nil
|
329
380
|
so.stdout.lines do |line|
|
330
381
|
if line =~ IPROUTE_INT_REGEX
|
331
382
|
tmp_int = $2
|
@@ -401,6 +452,30 @@ Ohai.plugin(:Network) do
|
|
401
452
|
if line =~ /\sstate (\w+)/
|
402
453
|
iface[tmp_int]["state"] = $1.downcase
|
403
454
|
end
|
455
|
+
|
456
|
+
if line.include?("xdp")
|
457
|
+
mode = line.scan(/\s(xdp|xdpgeneric|xdpoffload|xdpmulti)\s/).flatten[0]
|
458
|
+
# Fetches and sets the mode from the first line.
|
459
|
+
unless mode.nil?
|
460
|
+
iface[tmp_int][:xdp] = {}
|
461
|
+
if mode.eql?("xdp")
|
462
|
+
# In case of xdpdrv, mode is xdp,
|
463
|
+
# to keep it consistent, keeping mode as xdpdrv.
|
464
|
+
mode = "xdpdrv"
|
465
|
+
end
|
466
|
+
xdp_mode = mode
|
467
|
+
iface[tmp_int][:xdp][:attached] = []
|
468
|
+
end
|
469
|
+
|
470
|
+
if line =~ %r{prog/(\w+) id (\d+) tag (\w+)}
|
471
|
+
mode = $1.eql?("xdp") ? xdp_mode : $1
|
472
|
+
iface[tmp_int][:xdp][:attached] << {
|
473
|
+
mode: mode,
|
474
|
+
id: $2,
|
475
|
+
tag: $3,
|
476
|
+
}
|
477
|
+
end
|
478
|
+
end
|
404
479
|
end
|
405
480
|
iface
|
406
481
|
end
|
@@ -583,10 +658,12 @@ Ohai.plugin(:Network) do
|
|
583
658
|
# sorting the selected routes:
|
584
659
|
# - getting default routes first
|
585
660
|
# - then sort by metric
|
661
|
+
# - then sort by if the device was inferred or not (preferring explicit to inferred)
|
586
662
|
# - then by prefixlen
|
587
663
|
[
|
588
664
|
r[:destination] == "default" ? 0 : 1,
|
589
665
|
r[:metric].nil? ? 0 : r[:metric].to_i,
|
666
|
+
r[:inferred] ? 1 : 0,
|
590
667
|
# for some reason IPAddress doesn't accept "::/0", it doesn't like prefix==0
|
591
668
|
# just a quick workaround: use 0 if IPAddress fails
|
592
669
|
begin
|
@@ -793,9 +870,10 @@ Ohai.plugin(:Network) do
|
|
793
870
|
iface = ethernet_ring_parameters(iface)
|
794
871
|
iface = ethernet_channel_parameters(iface)
|
795
872
|
iface = ethernet_coalesce_parameters(iface)
|
873
|
+
iface = ethernet_offload_parameters(iface)
|
796
874
|
iface = ethernet_driver_info(iface)
|
797
875
|
iface = ethernet_pause_parameters(iface)
|
798
876
|
counters[:network][:interfaces] = net_counters
|
799
877
|
network["interfaces"] = iface
|
800
878
|
end
|
801
|
-
end
|
879
|
+
end
|
@@ -136,7 +136,7 @@ Ohai.plugin(:Packages) do
|
|
136
136
|
collect_programs_from_registry_key(Win32::Registry::HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Uninstall')
|
137
137
|
# on 64 bit systems, 32 bit programs are stored here moved before HKEY_CURRENT_USER otherwise it is not collected (impacts both ohai 16 & 17)
|
138
138
|
collect_programs_from_registry_key(Win32::Registry::HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall')
|
139
|
-
collect_programs_from_registry_key(Win32::Registry::HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Uninstall')
|
139
|
+
collect_programs_from_registry_key(Win32::Registry::HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Uninstall') rescue nil
|
140
140
|
# on 64 bit systems, 32 bit programs are stored here
|
141
141
|
end
|
142
142
|
|
data/lib/ohai/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ohai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 16.17.
|
4
|
+
version: 16.17.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Jacob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-config
|