ohai 14.0.29 → 14.1.0

Sign up to get free protection for your applications and to get access to all the features.
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