ohai 14.0.29 → 14.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7df4dd6c34ba7a1c5bb097c52ae9e0ffb6a7ce4048d9b1a86c6aaaafa254f121
4
- data.tar.gz: e00d3d6086d05d0cbb5148fca5a50feb4173a6fbea67308de815e922ba01b19a
3
+ metadata.gz: 7aaa80eca02eed6b1bf25be0dab653f121320347693d75453dd3591306050aca
4
+ data.tar.gz: 62b76f41b745726f29d6a13c8dd5159ee2cd45a3b4742fe5fa64745dc8825a31
5
5
  SHA512:
6
- metadata.gz: 1cebf6a450da08fc94f2b2ef08b7935acbc4a0e0006d574324ad15282a503454ff5afaa4babd0cb6a959f81a046d06c151bfa0b1f7fdf58fe4b87439ea205090
7
- data.tar.gz: 29b5fed44d109190a2f1cfcdd52965f8aef6a9d15c74fac2c6412773142041b8433fbbb491072d0a2b54cabeeaad040a60c757196df1655ca1c81fb7ddc3a69d
6
+ metadata.gz: 678928cc6387c5613a03c63b1df7c2639a96991c850485096c0162a138cf56285a69eb9c4f4e2fce9d8bab48c8feadef741e2e7cf53b84e4cc980f6a7286a4ee
7
+ data.tar.gz: 633ba5a734a9e497593276781c53fb802096d2f1164c64896b78837615fb4f8ca9d7363b59029c06b28bf36bf92a472a84a2742d3890bbf6a23d6ad80f0c7e37
data/Gemfile CHANGED
@@ -17,10 +17,6 @@ group :ci do
17
17
  gem "rspec_junit_formatter"
18
18
  end
19
19
 
20
- group :changelog do
21
- gem "github_changelog_generator", git: "https://github.com/chef/github-changelog-generator"
22
- end
23
-
24
20
  instance_eval(ENV["GEMFILE_MOD"]) if ENV["GEMFILE_MOD"]
25
21
 
26
22
  # If you want to load debugging tools into the bundle exec sandbox,
@@ -72,10 +72,22 @@ module Ohai
72
72
  127 => "end_of_table_marker",
73
73
  }
74
74
 
75
- # list of IDs to collect, otherwise we generate pages of hashes about cache chip size and whatnot
76
- # See OHAI-260. When we can give the user a choice, this will be a default.
75
+ # list of IDs to collect from config or default to a sane list that prunes
76
+ # away some of the less useful IDs
77
77
  ID_TO_CAPTURE = [ 0, 1, 2, 3, 4, 6, 11 ]
78
78
 
79
+ # return the list of DMI IDs to capture
80
+ def whitelisted_ids
81
+ if Ohai.config[:additional_dmi_ids]
82
+ if [ Integer, Array ].include?(Ohai.config[:additional_dmi_ids].class)
83
+ return ID_TO_CAPTURE + Array(Ohai.config[:additional_dmi_ids])
84
+ else
85
+ Ohai::Log.warn("The DMI plugin additional_dmi_ids config must be an array of IDs!")
86
+ end
87
+ end
88
+ ID_TO_CAPTURE
89
+ end
90
+
79
91
  # look up DMI ID
80
92
  def id_lookup(id)
81
93
  id = id.to_i
@@ -85,7 +97,7 @@ module Ohai
85
97
  id = DMI::ID_TO_DESCRIPTION[id]
86
98
  else
87
99
  Ohai::Log.debug("unrecognized header id; falling back to 'unknown'")
88
- id = "unknown"
100
+ id = "unknown_dmi_id_#{id}"
89
101
  end
90
102
  rescue
91
103
  Ohai::Log.debug("failed to look up id #{id}, returning unchanged")
@@ -122,7 +134,7 @@ module Ohai
122
134
  end
123
135
  end
124
136
 
125
- module_function :id_lookup, :convenience_keys
137
+ module_function :id_lookup, :convenience_keys, :whitelisted_ids
126
138
  end
127
139
  end
128
140
  end
@@ -75,8 +75,7 @@ Ohai.plugin(:DMI) do
75
75
  dmi[:table_location] = table_location[1]
76
76
 
77
77
  elsif ( handle = handle_line.match(line) )
78
- # Don't overcapture for now (OHAI-260)
79
- unless Ohai::Common::DMI::ID_TO_CAPTURE.include?(handle[2].to_i)
78
+ unless Ohai::Common::DMI.whitelisted_ids.include?(handle[2].to_i)
80
79
  dmi_record = nil
81
80
  next
82
81
  end
@@ -28,11 +28,18 @@ Ohai.plugin(:Fips) do
28
28
  collect_data(:linux) do
29
29
  fips Mash.new
30
30
 
31
- begin
32
- enabled = File.read("/proc/sys/crypto/fips_enabled").chomp
33
- fips["kernel"] = { "enabled" => enabled == "0" ? false : true }
34
- rescue Errno::ENOENT
35
- fips["kernel"] = { "enabled" => false }
31
+ # Check for new fips_mode method added in Ruby 2.5. After we drop support
32
+ # for Ruby 2.4, clean up everything after this and collapse the FIPS plugins.
33
+ require "openssl"
34
+ if defined?(OpenSSL.fips_mode) && !$FIPS_TEST_MODE
35
+ fips["kernel"] = { "enabled" => OpenSSL.fips_mode }
36
+ else
37
+ begin
38
+ enabled = File.read("/proc/sys/crypto/fips_enabled").chomp
39
+ fips["kernel"] = { "enabled" => enabled == "0" ? false : true }
40
+ rescue Errno::ENOENT
41
+ fips["kernel"] = { "enabled" => false }
42
+ end
36
43
  end
37
44
  end
38
45
  end
@@ -0,0 +1,52 @@
1
+ #
2
+ # Author:: Phil Dibowitz <phil@ipom.com>
3
+ # Copyright:: Copyright (c) 2018 Facebook, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ Ohai.plugin(:Lsscsi) do
20
+ depends "platform"
21
+ provides "scsi"
22
+ optional true
23
+
24
+ require "mixlib/shellout"
25
+
26
+ collect_data(:linux) do
27
+ devices = Mash.new
28
+ lsscsi = shell_out("lsscsi")
29
+
30
+ lsscsi.stdout.each_line do |line|
31
+ line_bits = line.split
32
+ info = {}
33
+
34
+ # The first three fields are consistent...
35
+ info["scsi_addr"] = line_bits.shift[1..-2]
36
+ info["type"] = line_bits.shift
37
+ info["transport"] = line_bits.shift
38
+
39
+ # After that the last two are consistent...
40
+ info["device"] = line_bits.pop
41
+ info["revision"] = line_bits.pop
42
+
43
+ # What"s in the middle is the make and model...
44
+ # which could have arbitrary spaces
45
+ info["name"] = line_bits.join(" ")
46
+
47
+ devices[info["scsi_addr"]] = info
48
+ end
49
+
50
+ scsi devices
51
+ end
52
+ end
@@ -17,10 +17,8 @@
17
17
  #
18
18
 
19
19
  Ohai.plugin(:ShardSeed) do
20
- require "digest/md5"
21
- depends "hostname", "dmi", "machine_id", "machinename"
20
+ depends "hostname", "dmi", "machine_id", "machinename", "fips", "hardware", "kernel"
22
21
  provides "shard_seed"
23
- optional true
24
22
 
25
23
  def get_dmi_property(dmi, thing)
26
24
  %w{system base_board chassis}.each do |section|
@@ -31,7 +29,33 @@ Ohai.plugin(:ShardSeed) do
31
29
  end
32
30
 
33
31
  def default_sources
34
- [:machinename, :serial, :uuid]
32
+ case collect_os
33
+ when :linux, :darwin, :windows
34
+ [:machinename, :serial, :uuid]
35
+ else
36
+ [:machinename]
37
+ end
38
+ end
39
+
40
+ def default_digest_algorithm
41
+ if fips["kernel"]["enabled"]
42
+ # Even though it is being used safely, FIPS-mode will still blow up on
43
+ # any use of MD5 so default to SHA2 instead.
44
+ "sha256"
45
+ else
46
+ "md5"
47
+ end
48
+ end
49
+
50
+ def digest_algorithm
51
+ case Ohai.config[:plugin][:shard_seed][:digest_algorithm] || default_digest_algorithm
52
+ when "md5"
53
+ require "digest/md5"
54
+ Digest::MD5
55
+ when "sha256"
56
+ require "digest/sha2"
57
+ Digest::SHA256
58
+ end
35
59
  end
36
60
 
37
61
  # Common sources go here. Put sources that need to be different per-platform
@@ -53,7 +77,31 @@ Ohai.plugin(:ShardSeed) do
53
77
  yield(src)
54
78
  end
55
79
  end
56
- shard_seed Digest::MD5.hexdigest(data)[0...7].to_i(16)
80
+ shard_seed digest_algorithm.hexdigest(data)[0...7].to_i(16)
81
+ end
82
+
83
+ collect_data do
84
+ create_seed do |src|
85
+ raise "No such shard_seed source: #{src}"
86
+ end
87
+ end
88
+
89
+ collect_data(:windows) do
90
+ require "wmi-lite/wmi"
91
+ wmi = WmiLite::Wmi.new
92
+
93
+ create_seed do |src|
94
+ case src
95
+ when :serial
96
+ wmi.first_of("Win32_BIOS")["SerialNumber"]
97
+ when :os_serial
98
+ kernel["os_info"]["serial_number"]
99
+ when :uuid
100
+ wmi.first_of("Win32_ComputerSystemProduct")["UUID"]
101
+ else
102
+ raise "No such shard_seed source: #{src}"
103
+ end
104
+ end
57
105
  end
58
106
 
59
107
  collect_data(:darwin) do
@@ -63,6 +111,8 @@ Ohai.plugin(:ShardSeed) do
63
111
  hardware["serial_number"]
64
112
  when :uuid
65
113
  hardware["platform_UUID"]
114
+ else
115
+ raise "No such shard_seed source: #{src}"
66
116
  end
67
117
  end
68
118
  end
@@ -129,7 +129,7 @@ Ohai.plugin(:DMI) do
129
129
  id = smb_to_id[header_information[3]]
130
130
 
131
131
  # Don't overcapture for now (OHAI-260)
132
- unless Ohai::Common::DMI::ID_TO_CAPTURE.include?(id)
132
+ unless Ohai::Common::DMI.whitelisted_ids.include?(id)
133
133
  dmi_record = nil
134
134
  next
135
135
  end
@@ -26,25 +26,32 @@ Ohai.plugin(:Fips) do
26
26
  provides "fips"
27
27
 
28
28
  collect_data(:windows) do
29
- require "win32/registry"
30
29
  fips Mash.new
31
30
 
32
- # from http://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx
33
- if ::RbConfig::CONFIG["target_cpu"] == "i386"
34
- reg_type = Win32::Registry::KEY_READ | 0x100
35
- elsif ::RbConfig::CONFIG["target_cpu"] == "x86_64"
36
- reg_type = Win32::Registry::KEY_READ | 0x200
31
+ # Check for new fips_mode method added in Ruby 2.5. After we drop support
32
+ # for Ruby 2.4, clean up everything after this and collapse the FIPS plugins.
33
+ require "openssl"
34
+ if defined?(OpenSSL.fips_mode) && !$FIPS_TEST_MODE
35
+ fips["kernel"] = { "enabled" => OpenSSL.fips_mode }
37
36
  else
38
- reg_type = Win32::Registry::KEY_READ
39
- end
37
+ require "win32/registry"
38
+ # from http://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx
39
+ if ::RbConfig::CONFIG["target_cpu"] == "i386"
40
+ reg_type = Win32::Registry::KEY_READ | 0x100
41
+ elsif ::RbConfig::CONFIG["target_cpu"] == "x86_64"
42
+ reg_type = Win32::Registry::KEY_READ | 0x200
43
+ else
44
+ reg_type = Win32::Registry::KEY_READ
45
+ end
40
46
 
41
- begin
42
- Win32::Registry::HKEY_LOCAL_MACHINE.open('System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy', reg_type) do |policy|
43
- enabled = policy["Enabled"]
44
- fips["kernel"] = { "enabled" => enabled == 0 ? false : true }
47
+ begin
48
+ Win32::Registry::HKEY_LOCAL_MACHINE.open('System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy', reg_type) do |policy|
49
+ enabled = policy["Enabled"]
50
+ fips["kernel"] = { "enabled" => enabled == 0 ? false : true }
51
+ end
52
+ rescue Win32::Registry::Error
53
+ fips["kernel"] = { "enabled" => false }
45
54
  end
46
- rescue Win32::Registry::Error
47
- fips["kernel"] = { "enabled" => false }
48
55
  end
49
56
  end
50
57
  end
data/lib/ohai/version.rb CHANGED
@@ -18,5 +18,5 @@
18
18
 
19
19
  module Ohai
20
20
  OHAI_ROOT = File.expand_path(File.dirname(__FILE__))
21
- VERSION = "14.0.29"
21
+ VERSION = "14.1.0"
22
22
  end
@@ -101,15 +101,16 @@ Chassis Information
101
101
  EOS
102
102
 
103
103
  describe Ohai::System, "plugin dmi" do
104
+ let(:plugin) { get_plugin("dmi") }
105
+ let(:stdout) { DMI_OUT }
106
+
104
107
  before(:each) do
105
- @plugin = get_plugin("dmi")
106
- @stdout = DMI_OUT
107
- allow(@plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, @stdout, ""))
108
+ allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, stdout, ""))
108
109
  end
109
110
 
110
- it "should run dmidecode" do
111
- expect(@plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, @stdout, ""))
112
- @plugin.run
111
+ it "runs dmidecode" do
112
+ expect(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, stdout, ""))
113
+ plugin.run
113
114
  end
114
115
 
115
116
  # Test some simple sample data
@@ -128,21 +129,28 @@ describe Ohai::System, "plugin dmi" do
128
129
  },
129
130
  }.each do |id, data|
130
131
  data.each do |attribute, value|
131
- it "should have [:dmi][:#{id}][:#{attribute}] set" do
132
- @plugin.run
133
- expect(@plugin[:dmi][id][attribute]).to eql(value)
132
+ it "attribute [:dmi][:#{id}][:#{attribute}] is set" do
133
+ plugin.run
134
+ expect(plugin[:dmi][id][attribute]).to eql(value)
134
135
  end
135
- it "should have [:dmi][:#{id}][:#{attribute}] set for windows output" do
136
- @stdout = convert_windows_output(DMI_OUT)
137
- expect(@plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, @stdout, ""))
138
- @plugin.run
139
- expect(@plugin[:dmi][id][attribute]).to eql(value)
136
+ it "attribute [:dmi][:#{id}][:#{attribute}] set for windows output" do
137
+ stdout = convert_windows_output(DMI_OUT)
138
+ expect(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, stdout, ""))
139
+ plugin.run
140
+ expect(plugin[:dmi][id][attribute]).to eql(value)
140
141
  end
141
142
  end
142
143
  end
143
144
 
144
- it "should correctly ignore unwanted data" do
145
- @plugin.run
146
- expect(@plugin[:dmi][:base_board]).not_to have_key(:error_correction_type)
145
+ it "allows capturing additional DMI data" do
146
+ Ohai.config[:additional_dmi_ids] = [ 16 ]
147
+ plugin.run
148
+ expect(plugin[:dmi]).to have_key(:physical_memory_array)
149
+ end
150
+
151
+ it "correctly ignores data in excluded DMI IDs" do
152
+ expect(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, stdout, ""))
153
+ plugin.run
154
+ expect(plugin[:dmi]).not_to have_key(:physical_memory_array)
147
155
  end
148
156
  end
@@ -17,23 +17,38 @@
17
17
  #
18
18
 
19
19
  require_relative "../../../spec_helper.rb"
20
+ require "openssl"
20
21
 
21
22
  describe Ohai::System, "plugin fips" do
22
23
  let(:enabled) { "0" }
23
24
  let(:plugin) { get_plugin("linux/fips") }
24
25
  let(:fips_path) { "/proc/sys/crypto/fips_enabled" }
26
+ let(:openssl_test_mode) { true }
27
+
28
+ subject do
29
+ plugin.run
30
+ plugin["fips"]["kernel"]["enabled"]
31
+ end
25
32
 
26
33
  before(:each) do
27
34
  allow(plugin).to receive(:collect_os).and_return(:linux)
28
35
  allow(::File).to receive(:read).with(fips_path).and_return(enabled)
29
36
  end
30
37
 
38
+ around do |ex|
39
+ begin
40
+ $FIPS_TEST_MODE = openssl_test_mode
41
+ ex.run
42
+ ensure
43
+ $FIPS_TEST_MODE = false
44
+ end
45
+ end
46
+
31
47
  context "fips file is present and contains 1" do
32
48
  let(:enabled) { "1" }
33
49
 
34
50
  it "sets fips plugin" do
35
- plugin.run
36
- expect(plugin["fips"]["kernel"]["enabled"]).to be(true)
51
+ expect(subject).to be(true)
37
52
  end
38
53
  end
39
54
 
@@ -41,8 +56,7 @@ describe Ohai::System, "plugin fips" do
41
56
  let(:enabled) { "0" }
42
57
 
43
58
  it "does not set fips plugin" do
44
- plugin.run
45
- expect(plugin["fips"]["kernel"]["enabled"]).to be(false)
59
+ expect(subject).to be(false)
46
60
  end
47
61
  end
48
62
 
@@ -52,8 +66,25 @@ describe Ohai::System, "plugin fips" do
52
66
  end
53
67
 
54
68
  it "does not set fips plugin" do
55
- plugin.run
56
- expect(plugin["fips"]["kernel"]["enabled"]).to be(false)
69
+ expect(subject).to be(false)
70
+ end
71
+ end
72
+
73
+ context "with Ruby 2.5 or newer", if: defined?(OpenSSL.fips_mode) do
74
+ let(:openssl_test_mode) { false }
75
+
76
+ context "with OpenSSL.fips_mode == false" do
77
+ before { allow(OpenSSL).to receive(:fips_mode).and_return(false) }
78
+ it "does not set fips plugin" do
79
+ expect(subject).to be(false)
80
+ end
81
+ end
82
+
83
+ context "with OpenSSL.fips_mode == true" do
84
+ before { allow(OpenSSL).to receive(:fips_mode).and_return(true) }
85
+ it "sets fips plugin" do
86
+ expect(subject).to be(true)
87
+ end
57
88
  end
58
89
  end
59
90
  end
@@ -0,0 +1,67 @@
1
+ #
2
+ # Author:: Phil Dibowitz <phil@ipom.com>
3
+ # Copyright:: Copyright (c) 2018 Facebook, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require_relative "../../spec_helper.rb"
20
+
21
+ describe Ohai::System, "lsscsi plugin" do
22
+ let(:plugin) { get_plugin("scsi") }
23
+ before(:each) do
24
+ allow(plugin).to receive(:collect_os).and_return(:linux)
25
+ @stdout = <<LSSCSI
26
+ [5:0:0:0] disk ATA Hitachi HUA72205 A3EA /dev/sda
27
+ [6:2:0:0] disk LSI MR9286CV-8e 3.41 /dev/sdb
28
+ [6:2:1:0] disk LSI MR9286CV-8e 3.41 /dev/sdc
29
+ [6:2:2:0] disk LSI MR9286CV-8e 3.41 /dev/sdd
30
+ [6:2:3:0] disk LSI MR9286CV-8e 3.41 /dev/sde
31
+ [6:2:4:0] disk LSI MR9286CV-8e 3.41 /dev/sdf
32
+ LSSCSI
33
+ allow(plugin).to receive(:shell_out).with("lsscsi").and_return(
34
+ mock_shell_out(0, @stdout, ""))
35
+ plugin.run
36
+ end
37
+
38
+ describe "when gathering data from lsscsi" do
39
+ it "lists all devices" do
40
+ expect(plugin[:scsi].keys).to eq(
41
+ ["5:0:0:0", "6:2:0:0", "6:2:1:0", "6:2:2:0", "6:2:3:0", "6:2:4:0"]
42
+ )
43
+ end
44
+
45
+ it "parses out type" do
46
+ expect(plugin[:scsi]["6:2:0:0"]["type"]).to eq("disk")
47
+ end
48
+
49
+ it "parses out transport" do
50
+ expect(plugin[:scsi]["5:0:0:0"]["transport"]).to eq("ATA")
51
+ expect(plugin[:scsi]["6:2:0:0"]["transport"]).to eq("LSI")
52
+ end
53
+
54
+ it "parses out device" do
55
+ expect(plugin[:scsi]["6:2:0:0"]["device"]).to eq("/dev/sdb")
56
+ end
57
+
58
+ it "parses out revision" do
59
+ expect(plugin[:scsi]["6:2:3:0"]["revision"]).to eq("3.41")
60
+ end
61
+
62
+ it "parses out name" do
63
+ expect(plugin[:scsi]["5:0:0:0"]["name"]).to eq("Hitachi HUA72205")
64
+ expect(plugin[:scsi]["6:2:4:0"]["name"]).to eq("MR9286CV-8e")
65
+ end
66
+ end
67
+ end
@@ -26,35 +26,93 @@ describe Ohai::System, "shard plugin" do
26
26
  let(:serial) { "234du3m4i498xdjr2" }
27
27
  let(:machine_id) { "0a1f869f457a4c8080ab19faf80af9cc" }
28
28
  let(:machinename) { "somehost004" }
29
+ let(:fips) { false }
30
+ let(:os) { :linux }
31
+
32
+ subject do
33
+ plugin.run
34
+ plugin[:shard_seed]
35
+ end
29
36
 
30
37
  before(:each) do
31
- allow(plugin).to receive(:collect_os).and_return(:linux)
32
38
  plugin["machinename"] = machinename
33
39
  plugin["machine_id"] = machine_id
34
40
  plugin["fqdn"] = fqdn
35
41
  plugin["dmi"] = { "system" => {} }
36
42
  plugin["dmi"]["system"]["uuid"] = uuid
37
43
  plugin["dmi"]["system"]["serial_number"] = serial
38
- allow(plugin).to receive(:collect_os).and_return(:linux)
44
+ plugin["fips"] = { "kernel" => { "enabled" => fips } }
45
+ allow(plugin).to receive(:collect_os).and_return(os)
39
46
  end
40
47
 
41
48
  it "should provide a shard with a default-safe set of sources" do
42
- plugin.run
43
- result = Digest::MD5.hexdigest(
44
- "#{machinename}#{serial}#{uuid}"
45
- )[0...7].to_i(16)
46
- expect(plugin[:shard_seed]).to eq(result)
49
+ expect(subject).to eq(27767217)
47
50
  end
48
51
 
49
52
  it "should provide a shard with a configured source" do
50
53
  Ohai.config[:plugin][:shard_seed][:sources] = [:fqdn]
51
- plugin.run
52
- result = Digest::MD5.hexdigest(fqdn)[0...7].to_i(16)
53
- expect(plugin[:shard_seed]).to eq(result)
54
+ expect(subject).to eq(203669792)
54
55
  end
55
56
 
56
57
  it "fails on an unrecognized source" do
57
58
  Ohai.config[:plugin][:shard_seed][:sources] = [:GreatGooglyMoogly]
58
- expect { plugin.run }.to raise_error(RuntimeError)
59
+ expect { subject }.to raise_error(RuntimeError)
60
+ end
61
+
62
+ it "should provide a shard with a configured algorithm" do
63
+ Ohai.config[:plugin][:shard_seed][:digest_algorithm] = "sha256"
64
+ expect(Digest::MD5).to_not receive(:new)
65
+ expect(subject).to eq(117055036)
66
+ end
67
+
68
+ context "with Darwin OS" do
69
+ let(:os) { :darwin }
70
+ before do
71
+ plugin["hardware"] = { "serial_number" => serial, "platform_UUID" => uuid }
72
+ end
73
+
74
+ it "should provide a shard with a default-safe set of sources" do
75
+ expect(subject).to eq(27767217)
76
+ end
77
+ end
78
+
79
+ context "with Windows OS" do
80
+ let(:os) { :windows }
81
+ before do
82
+ wmi = double("WmiLite::Wmi")
83
+ allow(WmiLite::Wmi).to receive(:new).and_return(wmi)
84
+ allow(wmi).to receive(:first_of).with("Win32_BIOS").and_return("SerialNumber" => serial)
85
+ allow(wmi).to receive(:first_of).with("Win32_ComputerSystemProduct").and_return("UUID" => uuid)
86
+ plugin["kernel"] = { "os_info" => { "serial_number" => serial + "0" } }
87
+ plugin.data.delete("dmi") # To make sure we aren't using the wrong data.
88
+ end
89
+
90
+ it "should provide a shard with a default-safe set of sources" do
91
+ expect(subject).to eq(27767217)
92
+ end
93
+
94
+ it "should allow os_serial source" do
95
+ Ohai.config[:plugin][:shard_seed][:sources] = [:machinename, :os_serial, :uuid]
96
+ # Different from above.
97
+ expect(subject).to eq(178738102)
98
+ end
99
+ end
100
+
101
+ context "with a weird OS" do
102
+ let(:os) { :aix }
103
+
104
+ it "should provide a shard with a default-safe set of sources" do
105
+ # Note: this is different than the other defaults.
106
+ expect(subject).to eq(253499154)
107
+ end
108
+ end
109
+
110
+ context "with FIPS mode enabled" do
111
+ let(:fips) { true }
112
+
113
+ it "should use SHA2" do
114
+ expect(Digest::MD5).to_not receive(:hexdigest)
115
+ expect(subject).to eq(117055036)
116
+ end
59
117
  end
60
118
  end
@@ -17,25 +17,40 @@
17
17
  #
18
18
 
19
19
  require_relative "../../../spec_helper.rb"
20
+ require "openssl"
20
21
 
21
22
  describe Ohai::System, "plugin fips", :windows_only do
22
23
  let(:enabled) { 0 }
23
24
  let(:plugin) { get_plugin("windows/fips") }
24
25
  let(:fips_key) { 'System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy' }
25
26
  let(:win_reg_entry) { { "Enabled" => enabled } }
27
+ let(:openssl_test_mode) { true }
28
+
29
+ subject do
30
+ plugin.run
31
+ plugin["fips"]["kernel"]["enabled"]
32
+ end
26
33
 
27
34
  before(:each) do
28
35
  allow(plugin).to receive(:collect_os).and_return(:windows)
29
36
  allow(Win32::Registry::HKEY_LOCAL_MACHINE).to receive(:open).with(fips_key, arch).and_yield(win_reg_entry)
30
37
  end
31
38
 
39
+ around do |ex|
40
+ begin
41
+ $FIPS_TEST_MODE = openssl_test_mode
42
+ ex.run
43
+ ensure
44
+ $FIPS_TEST_MODE = false
45
+ end
46
+ end
47
+
32
48
  shared_examples "fips_plugin" do
33
49
  context "fips enabled key is set to 1" do
34
50
  let(:enabled) { 1 }
35
51
 
36
52
  it "sets fips plugin" do
37
- plugin.run
38
- expect(plugin["fips"]["kernel"]["enabled"]).to be(true)
53
+ expect(subject).to be(true)
39
54
  end
40
55
  end
41
56
 
@@ -43,8 +58,7 @@ describe Ohai::System, "plugin fips", :windows_only do
43
58
  let(:enabled) { 0 }
44
59
 
45
60
  it "does not set fips plugin" do
46
- plugin.run
47
- expect(plugin["fips"]["kernel"]["enabled"]).to be(false)
61
+ expect(subject).to be(false)
48
62
  end
49
63
  end
50
64
 
@@ -54,8 +68,7 @@ describe Ohai::System, "plugin fips", :windows_only do
54
68
  end
55
69
 
56
70
  it "does not set fips plugin" do
57
- plugin.run
58
- expect(plugin["fips"]["kernel"]["enabled"]).to be(false)
71
+ expect(subject).to be(false)
59
72
  end
60
73
  end
61
74
  end
@@ -83,4 +96,22 @@ describe Ohai::System, "plugin fips", :windows_only do
83
96
 
84
97
  it_behaves_like "fips_plugin"
85
98
  end
99
+
100
+ context "with Ruby 2.5 or newer", if: defined?(OpenSSL.fips_mode) do
101
+ let(:openssl_test_mode) { false }
102
+
103
+ context "with OpenSSL.fips_mode == false" do
104
+ before { allow(OpenSSL).to receive(:fips_mode).and_return(false) }
105
+ it "does not set fips plugin" do
106
+ expect(subject).to be(false)
107
+ end
108
+ end
109
+
110
+ context "with OpenSSL.fips_mode == true" do
111
+ before { allow(OpenSSL).to receive(:fips_mode).and_return(true) }
112
+ it "sets fips plugin" do
113
+ expect(subject).to be(true)
114
+ end
115
+ end
116
+ end
86
117
  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: 14.0.29
4
+ version: 14.1.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: 2018-03-26 00:00:00.000000000 Z
11
+ date: 2018-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: systemu
@@ -315,6 +315,7 @@ files:
315
315
  - lib/ohai/plugins/rust.rb
316
316
  - lib/ohai/plugins/scala.rb
317
317
  - lib/ohai/plugins/scaleway.rb
318
+ - lib/ohai/plugins/scsi.rb
318
319
  - lib/ohai/plugins/shard.rb
319
320
  - lib/ohai/plugins/shells.rb
320
321
  - lib/ohai/plugins/softlayer.rb
@@ -493,6 +494,7 @@ files:
493
494
  - spec/unit/plugins/rust_spec.rb
494
495
  - spec/unit/plugins/scala_spec.rb
495
496
  - spec/unit/plugins/scaleway_spec.rb
497
+ - spec/unit/plugins/scsi_spec.rb
496
498
  - spec/unit/plugins/shard_spec.rb
497
499
  - spec/unit/plugins/shells_spec.rb
498
500
  - spec/unit/plugins/softlayer_spec.rb
@@ -542,7 +544,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
542
544
  version: '0'
543
545
  requirements: []
544
546
  rubyforge_project:
545
- rubygems_version: 2.7.5
547
+ rubygems_version: 2.7.6
546
548
  signing_key:
547
549
  specification_version: 4
548
550
  summary: Ohai profiles your system and emits JSON