ohai 13.6.0 → 13.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/ohai +3 -18
- data/lib/ohai/mixin/azure_metadata.rb +1 -1
- data/lib/ohai/mixin/do_metadata.rb +1 -1
- data/lib/ohai/mixin/ec2_metadata.rb +1 -1
- data/lib/ohai/plugins/c.rb +1 -0
- data/lib/ohai/plugins/cloud.rb +1 -1
- data/lib/ohai/plugins/ec2.rb +37 -16
- data/lib/ohai/plugins/linux/mdadm.rb +31 -4
- data/lib/ohai/plugins/linux/memory.rb +2 -0
- data/lib/ohai/plugins/linux/platform.rb +1 -1
- data/lib/ohai/plugins/linux/virtualization.rb +6 -1
- data/lib/ohai/system.rb +2 -2
- data/lib/ohai/version.rb +1 -1
- data/spec/unit/plugins/cloud_spec.rb +5 -5
- data/spec/unit/plugins/ec2_spec.rb +34 -4
- data/spec/unit/plugins/linux/mdadm_spec.rb +37 -2
- data/spec/unit/plugins/linux/memory_spec.rb +6 -0
- data/spec/unit/plugins/linux/virtualization_spec.rb +13 -0
- data/spec/unit/plugins/powershell_spec.rb +1 -1
- data/spec/unit/system_spec.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29f7dbc2f6ba160d4cc5a90e112804e12338cb76
|
4
|
+
data.tar.gz: 1a6a50e9261b97ea92348d64cbf3e2bdc97717ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35f52d079c7a4dc1b0dfaf70c8977b808c11d36d3069888a4967973d14d70326581a22539a7f3fee2b85345b325bfd78a91cfeb52792d64c5e98bcc30f8ace74
|
7
|
+
data.tar.gz: 85006bb7724517c6edeed48cabffbb806b8d5e638fa5481d7f354965159e19c28778185bd282a184fa1f6e2498fdf566ed2a0319adfc1d89176f853e56fed58f
|
data/bin/ohai
CHANGED
@@ -19,23 +19,8 @@
|
|
19
19
|
# limitations under the License.
|
20
20
|
#
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
# must be debian! ;)
|
26
|
-
missing_rubygems = true
|
27
|
-
end
|
28
|
-
begin
|
29
|
-
# if we're in a source code checkout, we want to run the code from that.
|
30
|
-
# have to do this *after* rubygems is loaded.
|
31
|
-
$:.unshift File.expand_path("../../lib", __FILE__)
|
32
|
-
require "ohai/application"
|
33
|
-
rescue LoadError
|
34
|
-
if missing_rubygems
|
35
|
-
STDERR.puts "rubygems previously failed to load - is it installed?"
|
36
|
-
end
|
37
|
-
|
38
|
-
raise
|
39
|
-
end
|
22
|
+
# if we're in a source code checkout, we want to run the code from that.
|
23
|
+
$:.unshift File.expand_path("../../lib", __FILE__)
|
24
|
+
require "ohai/application"
|
40
25
|
|
41
26
|
Ohai::Application.new.run
|
@@ -35,7 +35,7 @@ module Ohai
|
|
35
35
|
parser = FFI_Yajl::Parser.new
|
36
36
|
parser.parse(response.body)
|
37
37
|
when "404"
|
38
|
-
Ohai::Log.debug("Mixin DOMetadata: Encountered 404 response
|
38
|
+
Ohai::Log.debug("Mixin DOMetadata: Encountered 404 response retrieving Digital Ocean metadata: #{uri} ; continuing.")
|
39
39
|
{}
|
40
40
|
else
|
41
41
|
raise "Mixin DOMetadata: Encountered error retrieving Digital Ocean metadata (#{uri} returned #{response.code} response)"
|
@@ -94,7 +94,7 @@ module Ohai
|
|
94
94
|
when "200"
|
95
95
|
response.body
|
96
96
|
when "404"
|
97
|
-
Ohai::Log.debug("Mixin EC2: Encountered 404 response
|
97
|
+
Ohai::Log.debug("Mixin EC2: Encountered 404 response retrieving EC2 metadata path: #{path} ; continuing.")
|
98
98
|
nil
|
99
99
|
else
|
100
100
|
raise "Mixin EC2: Encountered error retrieving EC2 metadata (#{path} returned #{response.code} response)"
|
data/lib/ohai/plugins/c.rb
CHANGED
data/lib/ohai/plugins/cloud.rb
CHANGED
data/lib/ohai/plugins/ec2.rb
CHANGED
@@ -21,7 +21,8 @@
|
|
21
21
|
# How we detect EC2 from easiest to hardest & least reliable
|
22
22
|
# 1. Ohai ec2 hint exists. This always works
|
23
23
|
# 2. Xen hypervisor UUID starts with 'ec2'. This catches Linux HVM & paravirt instances
|
24
|
-
# 3. DMI data mentions amazon. This catches HVM instances in a VPC
|
24
|
+
# 3. DMI bios version data mentions amazon. This catches HVM instances in a VPC on the Xen based hypervisor
|
25
|
+
# 3. DMI bios vendor data mentions amazon. This catches HVM instances in a VPC on the non-Xen based hypervisor
|
25
26
|
# 4. Kernel data mentioned Amazon. This catches Windows HVM & paravirt instances
|
26
27
|
|
27
28
|
Ohai.plugin(:EC2) do
|
@@ -33,32 +34,43 @@ Ohai.plugin(:EC2) do
|
|
33
34
|
include Ohai::Mixin::HttpHelper
|
34
35
|
|
35
36
|
provides "ec2"
|
36
|
-
depends "dmi"
|
37
37
|
|
38
|
-
# look for amazon string in dmi bios data
|
38
|
+
# look for amazon string in dmi vendor bios data within the sys tree.
|
39
|
+
# this works even if the system lacks dmidecode use by the Dmi plugin
|
40
|
+
# this gets us detection of new Xen-less HVM instances that are within a VPC
|
41
|
+
# @return [Boolean] do we have Amazon DMI data?
|
42
|
+
def has_ec2_amazon_dmi?
|
43
|
+
# detect a version of '4.2.amazon'
|
44
|
+
if file_val_if_exists("/sys/class/dmi/id/bios_vendor") =~ /Amazon/
|
45
|
+
Ohai::Log.debug("Plugin EC2: has_ec2_amazon_dmi? == true")
|
46
|
+
true
|
47
|
+
else
|
48
|
+
Ohai::Log.debug("Plugin EC2: has_ec2_amazon_dmi? == false")
|
49
|
+
false
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# look for amazon string in dmi bios version data within the sys tree.
|
54
|
+
# this works even if the system lacks dmidecode use by the Dmi plugin
|
39
55
|
# this gets us detection of HVM instances that are within a VPC
|
40
56
|
# @return [Boolean] do we have Amazon DMI data?
|
41
|
-
def
|
57
|
+
def has_ec2_xen_dmi?
|
42
58
|
# detect a version of '4.2.amazon'
|
43
|
-
if
|
44
|
-
Ohai::Log.debug("Plugin EC2:
|
59
|
+
if file_val_if_exists("/sys/class/dmi/id/bios_version") =~ /amazon/
|
60
|
+
Ohai::Log.debug("Plugin EC2: has_ec2_xen_dmi? == true")
|
45
61
|
true
|
46
62
|
else
|
47
|
-
Ohai::Log.debug("Plugin EC2:
|
63
|
+
Ohai::Log.debug("Plugin EC2: has_ec2_xen_dmi? == false")
|
48
64
|
false
|
49
65
|
end
|
50
66
|
end
|
51
67
|
|
52
|
-
# looks for a xen UUID that starts with ec2
|
53
|
-
# uses the sys tree on Linux and a WMI query on windows
|
54
|
-
# this gets us detection of HVM and Paravirt hosts
|
68
|
+
# looks for a xen UUID that starts with ec2 from within the Linux sys tree
|
55
69
|
# @return [Boolean] do we have a Xen UUID or not?
|
56
70
|
def has_ec2_xen_uuid?
|
57
|
-
if
|
58
|
-
|
59
|
-
|
60
|
-
return true
|
61
|
-
end
|
71
|
+
if file_val_if_exists("/sys/hypervisor/uuid") =~ /^ec2/
|
72
|
+
Ohai::Log.debug("Plugin EC2: has_ec2_xen_uuid? == true")
|
73
|
+
return true
|
62
74
|
end
|
63
75
|
Ohai::Log.debug("Plugin EC2: has_ec2_xen_uuid? == false")
|
64
76
|
false
|
@@ -82,13 +94,22 @@ Ohai.plugin(:EC2) do
|
|
82
94
|
end
|
83
95
|
end
|
84
96
|
|
97
|
+
# return the contents of a file if the file exists
|
98
|
+
# @param path[String] abs path to the file
|
99
|
+
# @return [String] contents of the file if it exists
|
100
|
+
def file_val_if_exists(path)
|
101
|
+
if ::File.exist?(path)
|
102
|
+
::File.read(path)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
85
106
|
# a single check that combines all the various detection methods for EC2
|
86
107
|
# @return [Boolean] Does the system appear to be on EC2
|
87
108
|
def looks_like_ec2?
|
88
109
|
return true if hint?("ec2")
|
89
110
|
|
90
111
|
# Even if it looks like EC2 try to connect first
|
91
|
-
if has_ec2_xen_uuid? ||
|
112
|
+
if has_ec2_xen_uuid? || has_ec2_amazon_dmi? || has_ec2_xen_dmi? || has_ec2_identifying_number?
|
92
113
|
return true if can_socket_connect?(Ohai::Mixin::Ec2Metadata::EC2_METADATA_ADDR, 80)
|
93
114
|
end
|
94
115
|
end
|
@@ -64,10 +64,35 @@ Ohai.plugin(:Mdadm) do
|
|
64
64
|
# unless the array is inactive, in which case you don't get a raid
|
65
65
|
# level.
|
66
66
|
members = pieces.drop_while { |x| !x.start_with?("raid", "inactive") }
|
67
|
-
# drop
|
68
|
-
|
67
|
+
# and drop that too
|
69
68
|
members.shift unless members.empty?
|
70
|
-
devices[device] =
|
69
|
+
devices[device] = {
|
70
|
+
"active" => [],
|
71
|
+
"spare" => [],
|
72
|
+
"journal" => nil,
|
73
|
+
}
|
74
|
+
members.each do |member|
|
75
|
+
# We want to match the device, and optionally the type
|
76
|
+
# most entries will look like:
|
77
|
+
# sdc1[5]
|
78
|
+
# but some will look like:
|
79
|
+
# sdc1[5](J)
|
80
|
+
# where the format is:
|
81
|
+
# <device>[<number in array>](<type>)
|
82
|
+
# Type can be things like "J" for a journal device, or "S" for
|
83
|
+
# a spare device.
|
84
|
+
m = member.match(/(.+)\[\d+\](?:\((\w)\))?/)
|
85
|
+
member_device = m[1]
|
86
|
+
member_type = m[2]
|
87
|
+
case member_type
|
88
|
+
when "J"
|
89
|
+
devices[device]["journal"] = member_device
|
90
|
+
when "S"
|
91
|
+
devices[device]["spare"] << member_device
|
92
|
+
else
|
93
|
+
devices[device]["active"] << member_device
|
94
|
+
end
|
95
|
+
end
|
71
96
|
end
|
72
97
|
end
|
73
98
|
|
@@ -82,7 +107,9 @@ Ohai.plugin(:Mdadm) do
|
|
82
107
|
|
83
108
|
# if the mdadm command was sucessful pass so.stdout to create_raid_device_mash to grab the tidbits we want
|
84
109
|
mdadm[device] = create_raid_device_mash(so.stdout) if so.stdout
|
85
|
-
mdadm[device]["members"] = devices[device]
|
110
|
+
mdadm[device]["members"] = devices[device]["active"]
|
111
|
+
mdadm[device]["spares"] = devices[device]["spare"]
|
112
|
+
mdadm[device]["journal"] = devices[device]["journal"]
|
86
113
|
end
|
87
114
|
end
|
88
115
|
end
|
@@ -30,6 +30,8 @@ Ohai.plugin(:Memory) do
|
|
30
30
|
memory[:total] = "#{$1}#{$2}"
|
31
31
|
when /^MemFree:\s+(\d+) (.+)$/
|
32
32
|
memory[:free] = "#{$1}#{$2}"
|
33
|
+
when /^MemAvailable:\s+(\d+) (.+)$/
|
34
|
+
memory[:available] = "#{$1}#{$2}"
|
33
35
|
when /^Buffers:\s+(\d+) (.+)$/
|
34
36
|
memory[:buffers] = "#{$1}#{$2}"
|
35
37
|
when /^Cached:\s+(\d+) (.+)$/
|
@@ -249,7 +249,7 @@ Ohai.plugin(:Platform) do
|
|
249
249
|
platform_version `uname -r`.strip
|
250
250
|
elsif File.exist?("/etc/alpine-release")
|
251
251
|
platform "alpine"
|
252
|
-
platform_version File.read("/etc/alpine-release").strip
|
252
|
+
platform_version File.read("/etc/alpine-release").strip
|
253
253
|
elsif File.exist?("/usr/lib/os-release")
|
254
254
|
contents = File.read("/usr/lib/os-release")
|
255
255
|
if /Clear Linux/ =~ contents
|
@@ -159,7 +159,7 @@ Ohai.plugin(:Virtualization) do
|
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
|
-
# Detect LXC/Docker
|
162
|
+
# Detect LXC/Docker/Nspawn
|
163
163
|
#
|
164
164
|
# /proc/self/cgroup will look like this inside a docker container:
|
165
165
|
# <index #>:<subsystem>:/lxc/<hexadecimal container id>
|
@@ -190,6 +190,11 @@ Ohai.plugin(:Virtualization) do
|
|
190
190
|
virtualization[:system] = "lxc"
|
191
191
|
virtualization[:role] = "guest"
|
192
192
|
virtualization[:systems][:lxc] = "guest"
|
193
|
+
elsif File.read("/proc/1/environ") =~ /container=systemd-nspawn/
|
194
|
+
Ohai::Log.debug("Plugin Virtualization: /proc/1/environ indicates nspawn container. Detecting as nspawn guest")
|
195
|
+
virtualization[:system] = "nspawn"
|
196
|
+
virtualization[:role] = "guest"
|
197
|
+
virtualization[:systems][:nspawn] = "guest"
|
193
198
|
elsif lxc_version_exists? && File.read("/proc/self/cgroup") =~ %r{\d:[^:]+:/$}
|
194
199
|
# lxc-version shouldn't be installed by default
|
195
200
|
# Even so, it is likely we are on an LXC capable host that is not being used as such
|
data/lib/ohai/system.rb
CHANGED
@@ -62,7 +62,7 @@ module Ohai
|
|
62
62
|
@loader = Ohai::Loader.new(self)
|
63
63
|
@runner = Ohai::Runner.new(self, true)
|
64
64
|
|
65
|
-
Ohai::Hints.refresh_hints
|
65
|
+
Ohai::Hints.refresh_hints
|
66
66
|
|
67
67
|
# Remove the previously defined plugins
|
68
68
|
recursive_remove_constants(Ohai::NamedPlugin)
|
@@ -193,7 +193,7 @@ module Ohai
|
|
193
193
|
# This method takes a naive approach to v6 plugins: it simply re-runs all
|
194
194
|
# of them whenever called.
|
195
195
|
def refresh_plugins(attribute_filter = nil)
|
196
|
-
Ohai::Hints.refresh_hints
|
196
|
+
Ohai::Hints.refresh_hints
|
197
197
|
@provides_map.all_plugins(attribute_filter).each do |plugin|
|
198
198
|
plugin.reset!
|
199
199
|
end
|
data/lib/ohai/version.rb
CHANGED
@@ -39,7 +39,7 @@ describe "CloudAttrs object" do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it "populates cloud mash" do
|
42
|
-
@cloud_attr_obj = ::CloudAttrs.new
|
42
|
+
@cloud_attr_obj = ::CloudAttrs.new
|
43
43
|
@cloud_attr_obj.add_ipv4_addr("1.2.3.1", :public)
|
44
44
|
@cloud_attr_obj.add_ipv4_addr("1.2.4.1", :private)
|
45
45
|
@cloud_attr_obj.add_ipv6_addr("3ffe:505:2::1", :public)
|
@@ -51,22 +51,22 @@ describe "CloudAttrs object" do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it "throws exception with a bad ipv4 address" do
|
54
|
-
@cloud_attr_obj = ::CloudAttrs.new
|
54
|
+
@cloud_attr_obj = ::CloudAttrs.new
|
55
55
|
expect { @cloud_attr_obj.add_ipv6_addr("somebogusstring", :public) }.to raise_error(RuntimeError)
|
56
56
|
end
|
57
57
|
|
58
58
|
it "throws exception with a bad ipv6 address" do
|
59
|
-
@cloud_attr_obj = ::CloudAttrs.new
|
59
|
+
@cloud_attr_obj = ::CloudAttrs.new
|
60
60
|
expect { @cloud_attr_obj.add_ipv6_addr("FEED:B0B:DEAD:BEEF", :public) }.to raise_error(RuntimeError)
|
61
61
|
end
|
62
62
|
|
63
63
|
it "throws exception with ipv6 address passed to ipv4" do
|
64
|
-
@cloud_attr_obj = ::CloudAttrs.new
|
64
|
+
@cloud_attr_obj = ::CloudAttrs.new
|
65
65
|
expect { @cloud_attr_obj.add_ipv4_addr("3ffe:506:2::1", :public) }.to raise_error(RuntimeError)
|
66
66
|
end
|
67
67
|
|
68
68
|
it "throws exception with ipv4 address passed to ipv6" do
|
69
|
-
@cloud_attr_obj = ::CloudAttrs.new
|
69
|
+
@cloud_attr_obj = ::CloudAttrs.new
|
70
70
|
expect { @cloud_attr_obj.add_ipv6_addr("1.2.3.4", :public) }.to raise_error(RuntimeError)
|
71
71
|
end
|
72
72
|
|
@@ -28,6 +28,8 @@ describe Ohai::System, "plugin ec2" do
|
|
28
28
|
before(:each) do
|
29
29
|
allow(plugin).to receive(:hint?).with("ec2").and_return(false)
|
30
30
|
allow(File).to receive(:exist?).with("/sys/hypervisor/uuid").and_return(false)
|
31
|
+
allow(File).to receive(:exist?).with("/sys/class/dmi/id/bios_vendor").and_return(false)
|
32
|
+
allow(File).to receive(:exist?).with("/sys/class/dmi/id/bios_version").and_return(false)
|
31
33
|
end
|
32
34
|
|
33
35
|
shared_examples_for "!ec2" do
|
@@ -332,11 +334,39 @@ describe Ohai::System, "plugin ec2" do
|
|
332
334
|
end
|
333
335
|
end # shared examples for ec2
|
334
336
|
|
335
|
-
describe "with
|
337
|
+
describe "with amazon dmi bios version data" do
|
336
338
|
it_behaves_like "ec2"
|
337
339
|
|
338
340
|
before(:each) do
|
339
|
-
|
341
|
+
allow(File).to receive(:exist?).with("/sys/class/dmi/id/bios_version").and_return(true)
|
342
|
+
allow(File).to receive(:read).with("/sys/class/dmi/id/bios_version").and_return("4.2.amazon\n")
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
describe "with non-amazon dmi bios version data" do
|
347
|
+
it_behaves_like "!ec2"
|
348
|
+
|
349
|
+
before(:each) do
|
350
|
+
allow(File).to receive(:exist?).with("/sys/class/dmi/id/bios_version").and_return(true)
|
351
|
+
allow(File).to receive(:read).with("/sys/class/dmi/id/bios_version").and_return("1.0\n")
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
describe "with amazon dmi bios vendor data" do
|
356
|
+
it_behaves_like "ec2"
|
357
|
+
|
358
|
+
before(:each) do
|
359
|
+
allow(File).to receive(:exist?).with("/sys/class/dmi/id/bios_vendor").and_return(true)
|
360
|
+
allow(File).to receive(:read).with("/sys/class/dmi/id/bios_vendor").and_return("Amazon EC2\n")
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
describe "with non-amazon dmi bios vendor data" do
|
365
|
+
it_behaves_like "!ec2"
|
366
|
+
|
367
|
+
before(:each) do
|
368
|
+
allow(File).to receive(:exist?).with("/sys/class/dmi/id/bios_vendor").and_return(true)
|
369
|
+
allow(File).to receive(:read).with("/sys/class/dmi/id/bios_vendor").and_return("Xen\n")
|
340
370
|
end
|
341
371
|
end
|
342
372
|
|
@@ -345,7 +375,7 @@ describe Ohai::System, "plugin ec2" do
|
|
345
375
|
|
346
376
|
before(:each) do
|
347
377
|
allow(File).to receive(:exist?).with("/sys/hypervisor/uuid").and_return(true)
|
348
|
-
allow(File).to receive(:read).with("/sys/hypervisor/uuid").and_return("ec2a0561-e4d6-8e15-d9c8-2e0e03adcde8")
|
378
|
+
allow(File).to receive(:read).with("/sys/hypervisor/uuid").and_return("ec2a0561-e4d6-8e15-d9c8-2e0e03adcde8\n")
|
349
379
|
end
|
350
380
|
end
|
351
381
|
|
@@ -354,7 +384,7 @@ describe Ohai::System, "plugin ec2" do
|
|
354
384
|
|
355
385
|
before(:each) do
|
356
386
|
allow(File).to receive(:exist?).with("/sys/hypervisor/uuid").and_return(true)
|
357
|
-
allow(File).to receive(:read).with("/sys/hypervisor/uuid").and_return("123a0561-e4d6-8e15-d9c8-2e0e03adcde8")
|
387
|
+
allow(File).to receive(:read).with("/sys/hypervisor/uuid").and_return("123a0561-e4d6-8e15-d9c8-2e0e03adcde8\n")
|
358
388
|
end
|
359
389
|
end
|
360
390
|
|
@@ -106,6 +106,20 @@ MD
|
|
106
106
|
)
|
107
107
|
end
|
108
108
|
|
109
|
+
it "should detect member devices even if there are multi-digit numbers" do
|
110
|
+
new_mdstat = double("/proc/mdstat2")
|
111
|
+
allow(new_mdstat).to receive(:each).
|
112
|
+
and_yield("Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid10]").
|
113
|
+
and_yield("md0 : active raid10 sdj[2010] sdi[99] sdh[5] sdg[4] sdf[3] sde[2] sdd[1] sdc[0]").
|
114
|
+
and_yield(" 2929893888 blocks super 1.2 256K chunks 2 near-copies [6/6] [UUUUUU]")
|
115
|
+
allow(File).to receive(:open).with("/proc/mdstat").and_return(new_mdstat)
|
116
|
+
|
117
|
+
@plugin.run
|
118
|
+
expect(@plugin[:mdadm][:md0][:members].sort).to eq(
|
119
|
+
%w{sdc sdd sde sdf sdg sdh sdi sdj}
|
120
|
+
)
|
121
|
+
end
|
122
|
+
|
109
123
|
it "should detect member devices even if mdstat has extra entries" do
|
110
124
|
new_mdstat = double("/proc/mdstat2")
|
111
125
|
allow(new_mdstat).to receive(:each).
|
@@ -128,8 +142,29 @@ MD
|
|
128
142
|
allow(File).to receive(:open).with("/proc/mdstat").and_return(new_mdstat)
|
129
143
|
|
130
144
|
@plugin.run
|
131
|
-
expect(@plugin[:mdadm][:md0][:
|
145
|
+
expect(@plugin[:mdadm][:md0][:spares]).to eq(%w{nvme2n1p3})
|
132
146
|
end
|
133
|
-
end
|
134
147
|
|
148
|
+
it "should report journal devices" do
|
149
|
+
new_mdstat = double("/proc/mdstat_journal")
|
150
|
+
allow(new_mdstat).to receive(:each).
|
151
|
+
and_yield("Personalies : [raid6]").
|
152
|
+
and_yield("md0 : active (somecraphere) <morestuff raid6 sdbc1[7] sdd1[6] sde1[5] sdd1[4] sde1[3] sdf1[2] sdg1[1] nvme2n1p3[0](J)")
|
153
|
+
allow(File).to receive(:open).with("/proc/mdstat").and_return(new_mdstat)
|
154
|
+
|
155
|
+
@plugin.run
|
156
|
+
expect(@plugin[:mdadm][:md0][:journal]).to eq("nvme2n1p3")
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should report spare devices" do
|
160
|
+
new_mdstat = double("/proc/mdstat_spare")
|
161
|
+
allow(new_mdstat).to receive(:each).
|
162
|
+
and_yield("Personalies : [raid6]").
|
163
|
+
and_yield("md0 : active (somecraphere) <morestuff raid6 sdbc1[7] sdd1[6] sde1[5] sdd1[4] sde1[3] sdf1[2] sdg1[1] sdh1[0](S)")
|
164
|
+
allow(File).to receive(:open).with("/proc/mdstat").and_return(new_mdstat)
|
165
|
+
|
166
|
+
@plugin.run
|
167
|
+
expect(@plugin[:mdadm][:md0][:spares]).to eq(%w{sdh1})
|
168
|
+
end
|
169
|
+
end
|
135
170
|
end
|
@@ -24,6 +24,7 @@ describe Ohai::System, "Linux memory plugin" do
|
|
24
24
|
allow(@double_file).to receive(:each).
|
25
25
|
and_yield("MemTotal: 131932120 kB").
|
26
26
|
and_yield("MemFree: 2269032 kB").
|
27
|
+
and_yield("MemAvailable: 9208922 kB").
|
27
28
|
and_yield("Buffers: 646368 kB").
|
28
29
|
and_yield("Cached: 32346556 kB").
|
29
30
|
and_yield("SwapCached: 312 kB").
|
@@ -68,6 +69,11 @@ describe Ohai::System, "Linux memory plugin" do
|
|
68
69
|
expect(@plugin[:memory][:free]).to eql("2269032kB")
|
69
70
|
end
|
70
71
|
|
72
|
+
it "should get available memory" do
|
73
|
+
@plugin.run
|
74
|
+
expect(@plugin[:memory][:available]).to eql("9208922kB")
|
75
|
+
end
|
76
|
+
|
71
77
|
it "should get memory used for file buffers" do
|
72
78
|
@plugin.run
|
73
79
|
expect(@plugin[:memory][:buffers]).to eql("646368kB")
|
@@ -40,6 +40,7 @@ describe Ohai::System, "Linux virtualization platform" do
|
|
40
40
|
allow(File).to receive(:exist?).with("/sys/devices/virtual/misc/kvm").and_return(false)
|
41
41
|
allow(File).to receive(:exist?).with("/dev/lxd/sock").and_return(false)
|
42
42
|
allow(File).to receive(:exist?).with("/var/lib/lxd/devlxd").and_return(false)
|
43
|
+
allow(File).to receive(:exist?).with("/proc/1/environ").and_return(false)
|
43
44
|
|
44
45
|
# default the which wrappers to nil
|
45
46
|
allow(plugin).to receive(:which).with("lxc-version").and_return(nil)
|
@@ -627,6 +628,18 @@ CGROUP
|
|
627
628
|
end
|
628
629
|
end
|
629
630
|
|
631
|
+
describe "when we are checking for systemd-nspawn" do
|
632
|
+
it "sets nspawn guest if /proc/1/environ has nspawn string in it" do
|
633
|
+
allow(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true)
|
634
|
+
one_environ = "container=systemd-nspawn_ttys=/dev/pts/0 /dev/pts/1 /dev/pts/2 /dev/pts/3".chomp
|
635
|
+
allow(File).to receive(:read).with("/proc/1/environ").and_return(one_environ)
|
636
|
+
allow(File).to receive(:read).with("/proc/self/cgroup").and_return("")
|
637
|
+
plugin.run
|
638
|
+
expect(plugin[:virtualization][:system]).to eq("nspawn")
|
639
|
+
expect(plugin[:virtualization][:role]).to eq("guest")
|
640
|
+
end
|
641
|
+
end
|
642
|
+
|
630
643
|
describe "when we are checking for docker" do
|
631
644
|
it "sets docker guest if /proc/self/cgroup exist and there are /docker/<hexadecimal> mounts" do
|
632
645
|
self_cgroup = <<-CGROUP
|
@@ -45,7 +45,7 @@ PSRemotingProtocolVersion 2.2
|
|
45
45
|
END
|
46
46
|
compat_version_array = ["1.0", "2.0", "3.0", "4.0"]
|
47
47
|
|
48
|
-
allow(plugin).to receive(:shell_out).with(anything
|
48
|
+
allow(plugin).to receive(:shell_out).with(anything).and_return(mock_shell_out(0, v4_output, ""))
|
49
49
|
allow(plugin).to receive(:parse_compatible_versions).and_return(compat_version_array)
|
50
50
|
plugin.run
|
51
51
|
expect(plugin.languages[:powershell][:version]).to eql("4.0")
|
data/spec/unit/system_spec.rb
CHANGED
@@ -79,12 +79,12 @@ describe "Ohai::System" do
|
|
79
79
|
log_level = :debug
|
80
80
|
Ohai.config[:log_level] = log_level
|
81
81
|
expect(Ohai::Log).not_to receive(:level=).with(log_level)
|
82
|
-
Ohai::System.new
|
82
|
+
Ohai::System.new
|
83
83
|
end
|
84
84
|
|
85
85
|
it "does not resolve log_level when set to :auto" do
|
86
86
|
expect(Ohai::Log).not_to receive(:level=).with(:info)
|
87
|
-
Ohai::System.new
|
87
|
+
Ohai::System.new
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
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: 13.
|
4
|
+
version: 13.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Jacob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: systemu
|