ohai 16.5.6 → 16.6.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -0
  3. data/lib/ohai/application.rb +39 -0
  4. data/lib/ohai/common/dmi.rb +7 -3
  5. data/lib/ohai/dsl/plugin.rb +7 -0
  6. data/lib/ohai/dsl/plugin/versionvii.rb +27 -15
  7. data/lib/ohai/mixin/chef_utils_wiring.rb +13 -1
  8. data/lib/ohai/mixin/os.rb +66 -1
  9. data/lib/ohai/mixin/train_helpers.rb +35 -0
  10. data/lib/ohai/plugins/azure.rb +24 -4
  11. data/lib/ohai/plugins/bsd/virtualization.rb +1 -1
  12. data/lib/ohai/plugins/chef.rb +1 -1
  13. data/lib/ohai/plugins/cpu.rb +4 -4
  14. data/lib/ohai/plugins/darwin/virtualization.rb +1 -1
  15. data/lib/ohai/plugins/dmi.rb +1 -1
  16. data/lib/ohai/plugins/ec2.rb +13 -7
  17. data/lib/ohai/plugins/filesystem.rb +3 -3
  18. data/lib/ohai/plugins/gce.rb +2 -2
  19. data/lib/ohai/plugins/init_package.rb +1 -1
  20. data/lib/ohai/plugins/joyent.rb +2 -2
  21. data/lib/ohai/plugins/kernel.rb +7 -3
  22. data/lib/ohai/plugins/linux/block_device.rb +8 -8
  23. data/lib/ohai/plugins/linux/interrupts.rb +3 -3
  24. data/lib/ohai/plugins/linux/lsb.rb +3 -3
  25. data/lib/ohai/plugins/linux/machineid.rb +4 -4
  26. data/lib/ohai/plugins/linux/mdadm.rb +2 -2
  27. data/lib/ohai/plugins/linux/memory.rb +1 -1
  28. data/lib/ohai/plugins/linux/network.rb +3 -3
  29. data/lib/ohai/plugins/linux/platform.rb +29 -29
  30. data/lib/ohai/plugins/linux/virtualization.rb +23 -23
  31. data/lib/ohai/plugins/ohai_time.rb +1 -1
  32. data/lib/ohai/plugins/os.rb +4 -0
  33. data/lib/ohai/plugins/passwd.rb +57 -1
  34. data/lib/ohai/plugins/scaleway.rb +1 -1
  35. data/lib/ohai/plugins/shells.rb +2 -2
  36. data/lib/ohai/plugins/solaris2/dmi.rb +1 -1
  37. data/lib/ohai/plugins/solaris2/platform.rb +2 -2
  38. data/lib/ohai/plugins/solaris2/virtualization.rb +1 -1
  39. data/lib/ohai/plugins/ssh_host_key.rb +12 -12
  40. data/lib/ohai/plugins/train.rb +35 -0
  41. data/lib/ohai/plugins/uptime.rb +1 -1
  42. data/lib/ohai/plugins/vmware.rb +1 -1
  43. data/lib/ohai/runner.rb +4 -0
  44. data/lib/ohai/system.rb +32 -4
  45. data/lib/ohai/train_transport.rb +28 -0
  46. data/lib/ohai/version.rb +1 -1
  47. data/ohai.gemspec +2 -1
  48. metadata +20 -3
@@ -19,7 +19,7 @@
19
19
  Ohai.plugin(:OhaiTime) do
20
20
  provides "ohai_time"
21
21
 
22
- collect_data do
22
+ collect_data(:default, :target) do
23
23
  ohai_time Time.now.to_f
24
24
  end
25
25
  end
@@ -37,6 +37,10 @@ Ohai.plugin(:OS) do
37
37
  os_version shell_out("sysctl -n kern.osreldate").stdout.split($/)[0]
38
38
  end
39
39
 
40
+ collect_data(:target) do
41
+ os collect_os
42
+ end
43
+
40
44
  collect_data do
41
45
  os collect_os
42
46
  os_version kernel[:release]
@@ -42,6 +42,62 @@ Ohai.plugin(:Passwd) do
42
42
  end
43
43
 
44
44
  collect_data(:windows) do
45
- # Etc returns nil on Windows
45
+ require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
46
+
47
+ unless etc
48
+ etc Mash.new
49
+
50
+ wmi = WmiLite::Wmi.new
51
+
52
+ etc[:passwd] = Mash.new
53
+ users = wmi.query("SELECT * FROM Win32_UserAccount WHERE LocalAccount = True")
54
+ users.each do |user|
55
+ uname = user["Name"].strip.downcase
56
+ Ohai::Log.debug("processing user #{uname}")
57
+ etc[:passwd][uname] = Mash.new
58
+ wmi_obj = user.wmi_ole_object
59
+ wmi_obj.properties_.each do |key|
60
+ etc[:passwd][uname][key.name.downcase] = user[key.name]
61
+ end
62
+ end
63
+
64
+ etc[:group] = Mash.new
65
+ groups = wmi.query("SELECT * FROM Win32_Group WHERE LocalAccount = True")
66
+ groups.each do |group|
67
+ gname = group["Name"].strip.downcase
68
+ Ohai::Log.debug("processing group #{gname}")
69
+ etc[:group][gname] = Mash.new
70
+ wmi_obj = group.wmi_ole_object
71
+ wmi_obj.properties_.each do |key|
72
+ etc[:group][gname][key.name.downcase] = group[key.name]
73
+ end
74
+
75
+ # This is the primary reason that we're using WMI instead of powershell
76
+ # cmdlets - the powershell start up cost is huge, and you *must* do this
77
+ # query for every. single. group. individually.
78
+
79
+ # The query returns nothing unless you specify domain *and* name, it's
80
+ # a path, not a set of queries.
81
+ subq = "Win32_Group.Domain='#{group["Domain"]}',Name='#{group["Name"]}'"
82
+ members = wmi.query(
83
+ "SELECT * FROM Win32_GroupUser WHERE GroupComponent=\"#{subq}\""
84
+ )
85
+ etc[:group][gname]["members"] = members.map do |member|
86
+ mi = {}
87
+ info = Hash[
88
+ member["partcomponent"].split(",").map { |x| x.split("=") }.map { |a, b| [a, b.undump] }
89
+ ]
90
+ if info.keys.any? { |x| x.match?("Win32_UserAccount") }
91
+ mi["type"] = :user
92
+ else
93
+ # Note: the type here is actually Win32_SystemAccount, because,
94
+ # that's what groups are in the Windows universe.
95
+ mi["type"] = :group
96
+ end
97
+ mi["name"] = info["Name"]
98
+ mi
99
+ end
100
+ end
101
+ end
46
102
  end
47
103
  end
@@ -26,7 +26,7 @@ Ohai.plugin(:Scaleway) do
26
26
  # looks for `scaleway` keyword in kernel command line
27
27
  # @return [Boolean] do we have the keyword or not?
28
28
  def has_scaleway_cmdline?
29
- if ::File.exist?("/proc/cmdline") && /scaleway/.match?(::File.read("/proc/cmdline"))
29
+ if file_exist?("/proc/cmdline") && /scaleway/.match?(file_read("/proc/cmdline"))
30
30
  logger.trace("Plugin Scaleway: has_scaleway_cmdline? == true")
31
31
  return true
32
32
  end
@@ -20,9 +20,9 @@ Ohai.plugin(:Shells) do
20
20
  provides "shells"
21
21
 
22
22
  collect_data do
23
- if ::File.exist?("/etc/shells")
23
+ if file_exist?("/etc/shells")
24
24
  shells []
25
- ::File.readlines("/etc/shells").each do |line|
25
+ file_open("/etc/shells").readlines.each do |line|
26
26
  # remove carriage returns and skip over comments / empty lines
27
27
  shells << line.chomp if line[0] == "/"
28
28
  end
@@ -128,7 +128,7 @@ Ohai.plugin(:DMI) do
128
128
  id = smb_to_id[header_information[3]]
129
129
 
130
130
  # Don't overcapture for now (OHAI-260)
131
- unless Ohai::Common::DMI.whitelisted_ids.include?(id)
131
+ unless Ohai::Common::DMI.allowlisted_ids.include?(id)
132
132
  dmi_record = nil
133
133
  next
134
134
  end
@@ -20,7 +20,7 @@ Ohai.plugin(:Platform) do
20
20
  provides "platform", "platform_version", "platform_build", "platform_family"
21
21
 
22
22
  collect_data(:solaris2) do
23
- if File.exist?("/sbin/uname")
23
+ if file_exist?("/sbin/uname")
24
24
  uname_exec = "/sbin/uname"
25
25
  else
26
26
  uname_exec = "uname"
@@ -35,7 +35,7 @@ Ohai.plugin(:Platform) do
35
35
  end
36
36
  end
37
37
 
38
- File.open("/etc/release") do |file|
38
+ file_open("/etc/release") do |file|
39
39
  while ( line = file.gets )
40
40
  case line
41
41
  when /^.*(SmartOS).*$/
@@ -34,7 +34,7 @@ Ohai.plugin(:Virtualization) do
34
34
 
35
35
  # Detect paravirt KVM/QEMU from cpuinfo, report as KVM
36
36
  psrinfo_path = Ohai.abs_path( "/usr/sbin/psrinfo" )
37
- if File.exist?(psrinfo_path)
37
+ if file_exist?(psrinfo_path)
38
38
  so = shell_out("#{psrinfo_path} -pv")
39
39
  if /QEMU Virtual CPU|Common KVM processor|Common 32-bit KVM processor/.match?(so.stdout)
40
40
  virtualization[:system] = "kvm"
@@ -38,9 +38,9 @@ Ohai.plugin(:SSHHostKey) do
38
38
  collect_data do
39
39
  keys[:ssh] = Mash.new
40
40
 
41
- sshd_config = if File.exist?("/etc/ssh/sshd_config")
41
+ sshd_config = if file_exist?("/etc/ssh/sshd_config")
42
42
  "/etc/ssh/sshd_config"
43
- elsif File.exist?("/etc/sshd_config")
43
+ elsif file_exist?("/etc/sshd_config")
44
44
  # Darwin
45
45
  "/etc/sshd_config"
46
46
  else
@@ -49,11 +49,11 @@ Ohai.plugin(:SSHHostKey) do
49
49
  end
50
50
 
51
51
  if sshd_config
52
- File.open(sshd_config) do |conf|
52
+ file_open(sshd_config) do |conf|
53
53
  conf.each_line do |line|
54
54
  if /^hostkey\s/i.match?(line)
55
55
  pub_file = "#{line.split[1]}.pub"
56
- content = IO.read(pub_file).split
56
+ content = file_read(pub_file).split
57
57
  key_type, key_subtype = extract_keytype?(content)
58
58
  keys[:ssh]["host_#{key_type}_public"] = content[1] unless key_type.nil?
59
59
  keys[:ssh]["host_#{key_type}_type"] = key_subtype unless key_subtype.nil?
@@ -62,22 +62,22 @@ Ohai.plugin(:SSHHostKey) do
62
62
  end
63
63
  end
64
64
 
65
- if keys[:ssh][:host_dsa_public].nil? && File.exist?("/etc/ssh/ssh_host_dsa_key.pub")
66
- keys[:ssh][:host_dsa_public] = IO.read("/etc/ssh/ssh_host_dsa_key.pub").split[1]
65
+ if keys[:ssh][:host_dsa_public].nil? && file_exist?("/etc/ssh/ssh_host_dsa_key.pub")
66
+ keys[:ssh][:host_dsa_public] = file_read("/etc/ssh/ssh_host_dsa_key.pub").split[1]
67
67
  end
68
68
 
69
- if keys[:ssh][:host_rsa_public].nil? && File.exist?("/etc/ssh/ssh_host_rsa_key.pub")
70
- keys[:ssh][:host_rsa_public] = IO.read("/etc/ssh/ssh_host_rsa_key.pub").split[1]
69
+ if keys[:ssh][:host_rsa_public].nil? && file_exist?("/etc/ssh/ssh_host_rsa_key.pub")
70
+ keys[:ssh][:host_rsa_public] = file_read("/etc/ssh/ssh_host_rsa_key.pub").split[1]
71
71
  end
72
72
 
73
- if keys[:ssh][:host_ecdsa_public].nil? && File.exist?("/etc/ssh/ssh_host_ecdsa_key.pub")
74
- content = IO.read("/etc/ssh/ssh_host_ecdsa_key.pub")
73
+ if keys[:ssh][:host_ecdsa_public].nil? && file_exist?("/etc/ssh/ssh_host_ecdsa_key.pub")
74
+ content = file_read("/etc/ssh/ssh_host_ecdsa_key.pub")
75
75
  keys[:ssh][:host_ecdsa_public] = content.split[1]
76
76
  keys[:ssh][:host_ecdsa_type] = content.split[0]
77
77
  end
78
78
 
79
- if keys[:ssh][:host_ed25519_public].nil? && File.exist?("/etc/ssh/ssh_host_ed25519_key.pub")
80
- keys[:ssh][:host_ed25519_public] = IO.read("/etc/ssh/ssh_host_ed25519_key.pub").split[1]
79
+ if keys[:ssh][:host_ed25519_public].nil? && file_exist?("/etc/ssh/ssh_host_ed25519_key.pub")
80
+ keys[:ssh][:host_ed25519_public] = file_read("/etc/ssh/ssh_host_ed25519_key.pub").split[1]
81
81
  end
82
82
  end
83
83
  end
@@ -0,0 +1,35 @@
1
+ #
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ Ohai.plugin(:Train) do
19
+ provides "train"
20
+
21
+ collect_data do
22
+ if transport_connection
23
+ train Mash.new
24
+ train["family_hierarchy"] = transport_connection.platform.family_hierarchy
25
+ train["family"] = transport_connection.platform.family
26
+ train["platform"] = transport_connection.platform.platform
27
+ train["backend"] = transport_connection.backend_type
28
+ if transport_connection.respond_to?(:uri)
29
+ train["scheme"] = URI.parse(transport_connection.uri).scheme
30
+ train["uri"] = transport_connection.uri
31
+ else
32
+ end
33
+ end
34
+ end
35
+ end
@@ -54,7 +54,7 @@ Ohai.plugin(:Uptime) do
54
54
  end
55
55
 
56
56
  collect_data(:linux) do
57
- uptime, idletime = File.open("/proc/uptime").gets.split(" ")
57
+ uptime, idletime = file_open("/proc/uptime").gets.split(" ")
58
58
  uptime_seconds uptime.to_i
59
59
  uptime seconds_to_human(uptime.to_i)
60
60
  idletime_seconds idletime.to_i
@@ -41,7 +41,7 @@ Ohai.plugin(:VMware) do
41
41
  end
42
42
 
43
43
  def get_vm_attributes(vmtools_path)
44
- if !File.exist?(vmtools_path)
44
+ if !file_exist?(vmtools_path)
45
45
  logger.trace("Plugin VMware: #{vmtools_path} not found")
46
46
  else
47
47
  vmware Mash.new
@@ -24,6 +24,9 @@ module Ohai
24
24
  class Runner
25
25
 
26
26
  attr_reader :failed_plugins, :logger
27
+
28
+ attr_accessor :transport_connection
29
+
27
30
  # safe_run: set to true if this runner will run plugins in
28
31
  # safe-mode. default false.
29
32
  def initialize(controller, safe_run = false)
@@ -93,6 +96,7 @@ module Ohai
93
96
  end
94
97
 
95
98
  if dependency_providers.empty?
99
+ next_plugin.transport_connection = transport_connection
96
100
  @safe_run ? next_plugin.safe_run : next_plugin.run
97
101
  if next_plugin.failed
98
102
  @failed_plugins << next_plugin.name
@@ -29,7 +29,9 @@ require_relative "mixin/constant_helper"
29
29
  require_relative "provides_map"
30
30
  require_relative "hints"
31
31
  require_relative "config"
32
+ require_relative "train_transport"
32
33
  require "ffi_yajl" unless defined?(FFI_Yajl)
34
+ require "cgi" unless defined?(CGI)
33
35
 
34
36
  module Ohai
35
37
  # The class used by Ohai::Application and Chef to actually collect data
@@ -40,6 +42,7 @@ module Ohai
40
42
  attr_reader :config
41
43
  attr_reader :provides_map
42
44
  attr_reader :logger
45
+ attr_writer :transport_connection
43
46
 
44
47
  # the cli flag is used to determine if we're being constructed by
45
48
  # something like chef-client (which doesn't set this flag) and
@@ -67,7 +70,6 @@ module Ohai
67
70
  configure_logging if @cli
68
71
 
69
72
  @loader = Ohai::Loader.new(self)
70
- @runner = Ohai::Runner.new(self, true)
71
73
 
72
74
  Ohai::Hints.refresh_hints
73
75
 
@@ -75,6 +77,13 @@ module Ohai
75
77
  recursive_remove_constants(Ohai::NamedPlugin)
76
78
  end
77
79
 
80
+ def runner
81
+ @runner ||=
82
+ Ohai::Runner.new(self, true).tap do |runner|
83
+ runner.transport_connection = transport_connection unless transport_connection.nil?
84
+ end
85
+ end
86
+
78
87
  def [](key)
79
88
  @data[key]
80
89
  end
@@ -102,6 +111,13 @@ module Ohai
102
111
  @loader.load_all
103
112
  end
104
113
 
114
+ # get backend parameters for target mode
115
+ #
116
+ # @return [Train::Transport]
117
+ def transport_connection
118
+ @transport_connection ||= Ohai::TrainTransport.new(logger).build_transport&.connection
119
+ end
120
+
105
121
  # run all plugins or those that match the attribute filter is provided
106
122
  #
107
123
  # @param safe [Boolean]
@@ -111,13 +127,14 @@ module Ohai
111
127
  def run_plugins(safe = false, attribute_filter = nil)
112
128
  begin
113
129
  @provides_map.all_plugins(attribute_filter).each do |plugin|
114
- @runner.run_plugin(plugin)
130
+ runner.run_plugin(plugin)
115
131
  end
132
+ transport_connection.close unless transport_connection.nil?
116
133
  rescue Ohai::Exceptions::AttributeNotFound, Ohai::Exceptions::DependencyCycle => e
117
134
  logger.error("Encountered error while running plugins: #{e.inspect}")
118
135
  raise
119
136
  end
120
- critical_failed = Ohai::Config.ohai[:critical_plugins] & @runner.failed_plugins
137
+ critical_failed = Ohai::Config.ohai[:critical_plugins] & runner.failed_plugins
121
138
  unless critical_failed.empty?
122
139
  msg = "The following Ohai plugins marked as critical failed: #{critical_failed}"
123
140
  if @cli
@@ -139,7 +156,7 @@ module Ohai
139
156
  def run_additional_plugins(plugin_path)
140
157
  @loader.load_additional(plugin_path).each do |plugin|
141
158
  logger.trace "Running plugin #{plugin}"
142
- @runner.run_plugin(plugin)
159
+ runner.run_plugin(plugin)
143
160
  end
144
161
 
145
162
  freeze_strings!
@@ -225,5 +242,16 @@ module Ohai
225
242
  end
226
243
  visitor.call(@data)
227
244
  end
245
+
246
+ # Extract additional backend parameters from Target Mode URL.
247
+ #
248
+ # @api private
249
+ # @return [Hash]
250
+ def backend_parameters
251
+ uri = URI.parse(config[:target])
252
+ return {} unless uri.query
253
+
254
+ CGI.parse(uri.query).map { |k, v| [k.to_sym, v.first] }.to_h
255
+ end
228
256
  end
229
257
  end
@@ -0,0 +1,28 @@
1
+ # Author:: Bryan McLellan <btm@loftninjas.org>
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require "chef-config/mixin/train_transport" unless defined?(ChefConfig::Mixin::TrainTransport)
19
+
20
+ module Ohai
21
+ class TrainTransport
22
+ include ChefConfig::Mixin::TrainTransport
23
+
24
+ def config
25
+ Ohai::Config
26
+ end
27
+ end
28
+ end
@@ -18,5 +18,5 @@
18
18
 
19
19
  module Ohai
20
20
  OHAI_ROOT = File.expand_path(__dir__)
21
- VERSION = "16.5.6".freeze
21
+ VERSION = "16.6.5".freeze
22
22
  end
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.email = "adam@chef.io"
12
12
  s.homepage = "https://github.com/chef/ohai/"
13
13
 
14
- s.required_ruby_version = ">= 2.5"
14
+ s.required_ruby_version = ">= 2.6"
15
15
 
16
16
  s.add_dependency "chef-config", ">= 12.8", "< 17"
17
17
  s.add_dependency "chef-utils", ">= 16.0", "< 17"
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_dependency "mixlib-shellout", ">= 2.0", "< 4.0"
25
25
  s.add_dependency "plist", "~> 3.1"
26
26
  s.add_dependency "wmi-lite", "~> 1.0"
27
+ s.add_dependency "train-core"
27
28
  # Note for ohai developers: If chef-config causes you grief, try:
28
29
  # bundle install --with development
29
30
  # this should work as long as chef is a development dependency in Gemfile.
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.5.6
4
+ version: 16.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-21 00:00:00.000000000 Z
11
+ date: 2020-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-config
@@ -194,6 +194,20 @@ dependencies:
194
194
  - - "~>"
195
195
  - !ruby/object:Gem::Version
196
196
  version: '1.0'
197
+ - !ruby/object:Gem::Dependency
198
+ name: train-core
199
+ requirement: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ type: :runtime
205
+ prerelease: false
206
+ version_requirements: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: '0'
197
211
  description: Ohai profiles your system and emits JSON
198
212
  email: adam@chef.io
199
213
  executables:
@@ -232,6 +246,7 @@ files:
232
246
  - lib/ohai/mixin/shell_out.rb
233
247
  - lib/ohai/mixin/softlayer_metadata.rb
234
248
  - lib/ohai/mixin/string.rb
249
+ - lib/ohai/mixin/train_helpers.rb
235
250
  - lib/ohai/mixin/which.rb
236
251
  - lib/ohai/plugin_config.rb
237
252
  - lib/ohai/plugins/aix/kernel.rb
@@ -336,6 +351,7 @@ files:
336
351
  - lib/ohai/plugins/ssh_host_key.rb
337
352
  - lib/ohai/plugins/sysconf.rb
338
353
  - lib/ohai/plugins/timezone.rb
354
+ - lib/ohai/plugins/train.rb
339
355
  - lib/ohai/plugins/uptime.rb
340
356
  - lib/ohai/plugins/virtualbox.rb
341
357
  - lib/ohai/plugins/vmware.rb
@@ -350,6 +366,7 @@ files:
350
366
  - lib/ohai/provides_map.rb
351
367
  - lib/ohai/runner.rb
352
368
  - lib/ohai/system.rb
369
+ - lib/ohai/train_transport.rb
353
370
  - lib/ohai/util/file_helper.rb
354
371
  - lib/ohai/util/ip_helper.rb
355
372
  - lib/ohai/util/win32.rb
@@ -367,7 +384,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
367
384
  requirements:
368
385
  - - ">="
369
386
  - !ruby/object:Gem::Version
370
- version: '2.5'
387
+ version: '2.6'
371
388
  required_rubygems_version: !ruby/object:Gem::Requirement
372
389
  requirements:
373
390
  - - ">="