ohai 16.5.0 → 16.7.37

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.
Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +11 -11
  3. data/bin/ohai +2 -1
  4. data/lib/ohai.rb +1 -0
  5. data/lib/ohai/application.rb +40 -0
  6. data/lib/ohai/common/dmi.rb +8 -3
  7. data/lib/ohai/config.rb +2 -2
  8. data/lib/ohai/dsl.rb +1 -0
  9. data/lib/ohai/dsl/plugin.rb +9 -1
  10. data/lib/ohai/dsl/plugin/versionvii.rb +28 -17
  11. data/lib/ohai/exception.rb +1 -0
  12. data/lib/ohai/hints.rb +1 -0
  13. data/lib/ohai/log.rb +1 -0
  14. data/lib/ohai/mash.rb +1 -0
  15. data/lib/ohai/mixin/azure_metadata.rb +4 -3
  16. data/lib/ohai/mixin/chef_utils_wiring.rb +14 -1
  17. data/lib/ohai/mixin/command.rb +1 -0
  18. data/lib/ohai/mixin/constant_helper.rb +1 -0
  19. data/lib/ohai/mixin/dmi_decode.rb +1 -0
  20. data/lib/ohai/mixin/do_metadata.rb +3 -2
  21. data/lib/ohai/mixin/ec2_metadata.rb +10 -9
  22. data/lib/ohai/mixin/gce_metadata.rb +4 -3
  23. data/lib/ohai/mixin/http_helper.rb +1 -0
  24. data/lib/ohai/mixin/network_helper.rb +1 -0
  25. data/lib/ohai/mixin/os.rb +67 -1
  26. data/lib/ohai/mixin/scaleway_metadata.rb +3 -2
  27. data/lib/ohai/mixin/seconds_to_human.rb +1 -0
  28. data/lib/ohai/mixin/shell_out.rb +1 -0
  29. data/lib/ohai/mixin/softlayer_metadata.rb +2 -1
  30. data/lib/ohai/mixin/string.rb +1 -0
  31. data/lib/ohai/mixin/train_helpers.rb +36 -0
  32. data/lib/ohai/mixin/which.rb +1 -0
  33. data/lib/ohai/plugin_config.rb +1 -0
  34. data/lib/ohai/plugins/aix/kernel.rb +7 -4
  35. data/lib/ohai/plugins/aix/memory.rb +4 -3
  36. data/lib/ohai/plugins/aix/network.rb +51 -58
  37. data/lib/ohai/plugins/aix/platform.rb +3 -2
  38. data/lib/ohai/plugins/aix/uptime.rb +3 -2
  39. data/lib/ohai/plugins/aix/virtualization.rb +6 -6
  40. data/lib/ohai/plugins/azure.rb +25 -4
  41. data/lib/ohai/plugins/bsd/virtualization.rb +3 -2
  42. data/lib/ohai/plugins/c.rb +4 -3
  43. data/lib/ohai/plugins/chef.rb +2 -1
  44. data/lib/ohai/plugins/cloud.rb +2 -1
  45. data/lib/ohai/plugins/command.rb +1 -0
  46. data/lib/ohai/plugins/cpu.rb +31 -32
  47. data/lib/ohai/plugins/darwin/hardware.rb +1 -0
  48. data/lib/ohai/plugins/darwin/memory.rb +2 -3
  49. data/lib/ohai/plugins/darwin/network.rb +8 -9
  50. data/lib/ohai/plugins/darwin/platform.rb +1 -0
  51. data/lib/ohai/plugins/darwin/virtualization.rb +2 -1
  52. data/lib/ohai/plugins/digital_ocean.rb +3 -1
  53. data/lib/ohai/plugins/dmi.rb +6 -5
  54. data/lib/ohai/plugins/docker.rb +2 -1
  55. data/lib/ohai/plugins/dragonflybsd/memory.rb +9 -8
  56. data/lib/ohai/plugins/dragonflybsd/network.rb +1 -0
  57. data/lib/ohai/plugins/dragonflybsd/platform.rb +3 -2
  58. data/lib/ohai/plugins/ec2.rb +14 -7
  59. data/lib/ohai/plugins/elixir.rb +1 -1
  60. data/lib/ohai/plugins/erlang.rb +1 -0
  61. data/lib/ohai/plugins/eucalyptus.rb +4 -1
  62. data/lib/ohai/plugins/filesystem.rb +4 -4
  63. data/lib/ohai/plugins/fips.rb +1 -0
  64. data/lib/ohai/plugins/freebsd/memory.rb +9 -8
  65. data/lib/ohai/plugins/freebsd/network.rb +1 -0
  66. data/lib/ohai/plugins/freebsd/platform.rb +3 -2
  67. data/lib/ohai/plugins/gce.rb +3 -2
  68. data/lib/ohai/plugins/go.rb +1 -1
  69. data/lib/ohai/plugins/groovy.rb +1 -1
  70. data/lib/ohai/plugins/haskell.rb +1 -0
  71. data/lib/ohai/plugins/hostname.rb +2 -2
  72. data/lib/ohai/plugins/init_package.rb +2 -1
  73. data/lib/ohai/plugins/java.rb +1 -0
  74. data/lib/ohai/plugins/kernel.rb +14 -11
  75. data/lib/ohai/plugins/keys.rb +1 -0
  76. data/lib/ohai/plugins/languages.rb +1 -0
  77. data/lib/ohai/plugins/libvirt.rb +4 -3
  78. data/lib/ohai/plugins/linode.rb +2 -1
  79. data/lib/ohai/plugins/linux/block_device.rb +9 -8
  80. data/lib/ohai/plugins/linux/hostnamectl.rb +3 -2
  81. data/lib/ohai/plugins/linux/interrupts.rb +4 -3
  82. data/lib/ohai/plugins/linux/ipc.rb +2 -1
  83. data/lib/ohai/plugins/linux/lsb.rb +7 -20
  84. data/lib/ohai/plugins/linux/lspci.rb +1 -0
  85. data/lib/ohai/plugins/linux/machineid.rb +5 -4
  86. data/lib/ohai/plugins/linux/mdadm.rb +3 -2
  87. data/lib/ohai/plugins/linux/memory.rb +38 -37
  88. data/lib/ohai/plugins/linux/network.rb +7 -6
  89. data/lib/ohai/plugins/linux/platform.rb +31 -30
  90. data/lib/ohai/plugins/linux/selinux.rb +1 -0
  91. data/lib/ohai/plugins/linux/sessions.rb +1 -0
  92. data/lib/ohai/plugins/linux/sysctl.rb +1 -0
  93. data/lib/ohai/plugins/linux/systemd_paths.rb +1 -0
  94. data/lib/ohai/plugins/linux/virtualization.rb +24 -23
  95. data/lib/ohai/plugins/lua.rb +1 -1
  96. data/lib/ohai/plugins/mono.rb +1 -1
  97. data/lib/ohai/plugins/netbsd/memory.rb +1 -0
  98. data/lib/ohai/plugins/netbsd/network.rb +1 -0
  99. data/lib/ohai/plugins/netbsd/platform.rb +3 -2
  100. data/lib/ohai/plugins/network.rb +2 -1
  101. data/lib/ohai/plugins/nodejs.rb +1 -1
  102. data/lib/ohai/plugins/ohai.rb +1 -0
  103. data/lib/ohai/plugins/ohai_time.rb +2 -1
  104. data/lib/ohai/plugins/openbsd/memory.rb +1 -0
  105. data/lib/ohai/plugins/openbsd/network.rb +1 -0
  106. data/lib/ohai/plugins/openbsd/platform.rb +3 -2
  107. data/lib/ohai/plugins/openstack.rb +1 -0
  108. data/lib/ohai/plugins/os.rb +6 -1
  109. data/lib/ohai/plugins/packages.rb +2 -1
  110. data/lib/ohai/plugins/passwd.rb +58 -1
  111. data/lib/ohai/plugins/perl.rb +1 -1
  112. data/lib/ohai/plugins/php.rb +1 -1
  113. data/lib/ohai/plugins/platform.rb +1 -0
  114. data/lib/ohai/plugins/powershell.rb +1 -1
  115. data/lib/ohai/plugins/ps.rb +1 -0
  116. data/lib/ohai/plugins/python.rb +1 -1
  117. data/lib/ohai/plugins/rackspace.rb +6 -5
  118. data/lib/ohai/plugins/root_group.rb +1 -0
  119. data/lib/ohai/plugins/ruby.rb +3 -2
  120. data/lib/ohai/plugins/rust.rb +1 -1
  121. data/lib/ohai/plugins/scala.rb +1 -0
  122. data/lib/ohai/plugins/scaleway.rb +3 -2
  123. data/lib/ohai/plugins/scsi.rb +1 -0
  124. data/lib/ohai/plugins/shard.rb +1 -1
  125. data/lib/ohai/plugins/shells.rb +3 -2
  126. data/lib/ohai/plugins/softlayer.rb +1 -0
  127. data/lib/ohai/plugins/solaris2/dmi.rb +2 -1
  128. data/lib/ohai/plugins/solaris2/memory.rb +1 -0
  129. data/lib/ohai/plugins/solaris2/network.rb +2 -1
  130. data/lib/ohai/plugins/solaris2/platform.rb +8 -14
  131. data/lib/ohai/plugins/solaris2/virtualization.rb +4 -4
  132. data/lib/ohai/plugins/ssh_host_key.rb +13 -12
  133. data/lib/ohai/plugins/sysconf.rb +1 -0
  134. data/lib/ohai/plugins/timezone.rb +1 -0
  135. data/lib/ohai/plugins/train.rb +35 -0
  136. data/lib/ohai/plugins/uptime.rb +2 -1
  137. data/lib/ohai/plugins/virtualbox.rb +2 -1
  138. data/lib/ohai/plugins/vmware.rb +3 -3
  139. data/lib/ohai/plugins/windows/dmi.rb +1 -0
  140. data/lib/ohai/plugins/windows/drivers.rb +1 -0
  141. data/lib/ohai/plugins/windows/memory.rb +1 -0
  142. data/lib/ohai/plugins/windows/network.rb +2 -1
  143. data/lib/ohai/plugins/windows/platform.rb +1 -0
  144. data/lib/ohai/plugins/windows/system_enclosure.rb +1 -0
  145. data/lib/ohai/plugins/windows/virtualization.rb +1 -0
  146. data/lib/ohai/plugins/zpools.rb +5 -3
  147. data/lib/ohai/provides_map.rb +1 -0
  148. data/lib/ohai/runner.rb +7 -4
  149. data/lib/ohai/system.rb +33 -4
  150. data/lib/ohai/train_transport.rb +29 -0
  151. data/lib/ohai/util/file_helper.rb +1 -0
  152. data/lib/ohai/util/ip_helper.rb +2 -1
  153. data/lib/ohai/util/win32.rb +1 -0
  154. data/lib/ohai/version.rb +3 -2
  155. data/ohai.gemspec +8 -7
  156. metadata +75 -59
  157. data/lib/ohai/plugins/joyent.rb +0 -77
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8039a80535910fc0746573f29cbd7746fbe1ac34a46a2c98a93603ac7b4fb83e
4
- data.tar.gz: cf27f4ca401a9c57674d2c10b72867ef1e423d85e3849fcf1cd9d318e87a8716
3
+ metadata.gz: 39d6064d1c93ab4dac377f1883213fad35872ee08ac0c2b97801b5d96da1a1df
4
+ data.tar.gz: 5837422d08995fd7057e84d496d85b11514bd51b6b0d391b282fb3612fb083bc
5
5
  SHA512:
6
- metadata.gz: 54f972aa56f93adfa75ee164c2e505bc1a6b8dcdbc797e6cac6ccc8ea02e5fede2340f63b9529d7f4a3a6ab814543b46d65607c40b39d617602bfad009f183e6
7
- data.tar.gz: 3453c0ef0e9c0e0dce7eebb258738c1fbcf0578a1894ab6eb7476385b5b0c9973d0dfc2c42be7c9ff544e33838aeeb8979daef1e0f6d331cffca7265643841ec
6
+ metadata.gz: d58037d84d3f6066b86561940dffe8b812d89ef6e75a7a0a8a843affccb7b6fc98e29795d2bd62ce48b396eefc71901423e198274d5474c95e1fb189101f4992
7
+ data.tar.gz: cc8c6cbd38084685fe8cb8dccdc3f5c469829b0798c562fb8803dc37d0c3aacf2a844781689ef0f3a5796929f43951d59b083531fea4ed08a46a07395bb8a06d
data/Gemfile CHANGED
@@ -1,28 +1,28 @@
1
+ # frozen_string_literal: true
1
2
  source "https://rubygems.org"
2
3
 
3
4
  gemspec
4
5
 
6
+ # pull these gems from master of chef/chef so that we're testing against what we will release
7
+ gem "chef-config", git: "https://github.com/chef/chef", glob: "chef-config/chef-config.gemspec"
8
+ gem "chef-utils", git: "https://github.com/chef/chef", glob: "chef-utils/chef-utils.gemspec"
9
+
5
10
  # NOTE: do not submit PRs to add pry as a dep, add to your Gemfile.local
6
11
  group :development do
7
12
  gem "chefstyle", git: "https://github.com/chef/chefstyle.git", branch: "master"
8
- gem "rubocop-performance", "1.8.0"
13
+ gem "ipaddr_extensions"
9
14
  gem "rake", ">= 10.1.0"
15
+ gem "rspec-collection_matchers", "~> 1.0"
10
16
  gem "rspec-core", "~> 3.0"
11
17
  gem "rspec-expectations", "~> 3.0"
12
18
  gem "rspec-mocks", "~> 3.0"
13
- gem "rspec-collection_matchers", "~> 1.0"
14
- gem "ipaddr_extensions"
15
- end
16
-
17
- group :docs do
18
- gem "yard"
19
- gem "redcarpet"
20
- gem "github-markup"
19
+ gem "rubocop-performance", "1.9.0"
20
+ gem "rubocop-rspec"
21
21
  end
22
22
 
23
23
  group :debug do
24
24
  gem "pry"
25
25
  gem "pry-byebug"
26
- gem "pry-stack_explorer", "~> 0.4.0" # pin until we drop ruby < 2.6
26
+ gem "pry-stack_explorer"
27
27
  gem "rb-readline"
28
- end
28
+ end
data/bin/ohai CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
  #
3
4
  # Author:: Adam Jacob (<adam@chef.io>)
4
5
  # Copyright:: Copyright (c) 2008-2016 Chef Software, Inc.
@@ -18,7 +19,7 @@
18
19
  #
19
20
 
20
21
  # if we're in a source code checkout, we want to run the code from that.
21
- $:.unshift File.expand_path("../../lib", __FILE__)
22
+ $:.unshift File.expand_path("../lib", __dir__)
22
23
  require "ohai/application"
23
24
 
24
25
  Ohai::Application.new.run
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Adam Jacob (<adam@chef.io>)
3
4
  # Copyright:: Copyright (c) Chef Software Inc.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Mathieu Sauve-Frankel <msf@kisoku.net>
3
4
  # Copyright:: Copyright (c) 2009 Mathieu Sauve-Frankel.
@@ -56,6 +57,15 @@ class Ohai::Application
56
57
  description: "Set the log file location, defaults to STDOUT - recommended for daemonizing",
57
58
  proc: nil
58
59
 
60
+ option :target,
61
+ short: "-t TARGET",
62
+ long: "--target TARGET",
63
+ description: "Target Ohai against a remote system or device",
64
+ proc: lambda { |target|
65
+ Ohai::Log.warn "-- EXPERIMENTAL -- Target mode activated -- EXPERIMENTAL --"
66
+ target
67
+ }
68
+
59
69
  option :help,
60
70
  short: "-h",
61
71
  long: "--help",
@@ -93,9 +103,39 @@ class Ohai::Application
93
103
 
94
104
  load_workstation_config
95
105
 
106
+ merge_configs
107
+
108
+ if config[:target]
109
+ Ohai::Config.target_mode.host = config[:target]
110
+ if URI.parse(Ohai::Config.target_mode.host).scheme
111
+ train_config = Train.unpack_target_from_uri(Ohai::Config.target_mode.host)
112
+ Ohai::Config.target_mode = train_config
113
+ end
114
+ Ohai::Config.target_mode.enabled = true
115
+ Ohai::Config.node_name = Ohai::Config.target_mode.host unless Ohai::Config.node_name
116
+ end
117
+
96
118
  Ohai::Log.init(Ohai.config[:log_location])
97
119
  end
98
120
 
121
+ # @api private
122
+ def config_file_defaults
123
+ Ohai::Config.save(true)
124
+ end
125
+
126
+ # @api private
127
+ def config_file_settings
128
+ Ohai::Config.save(false)
129
+ end
130
+
131
+ # See lib/chef/knife.rb in the chef/chef github repo
132
+ #
133
+ # @api private
134
+ def merge_configs
135
+ config.replace(config_file_defaults.merge(default_config).merge(config_file_settings).merge(config))
136
+ Ohai::Config.merge!(config) # make them both the same
137
+ end
138
+
99
139
  # Passes config and attributes arguments to Ohai::System then prints the results.
100
140
  # Called by the run method after config / logging have been initialized
101
141
  #
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Kurt Yoder (ktyopscode@yoderhome.com)
3
4
  # Copyright:: Copyright (c) 2010 Kurt Yoder
@@ -76,11 +77,11 @@ module Ohai
76
77
  # away some of the less useful IDs
77
78
  ID_TO_CAPTURE = [ 0, 1, 2, 3, 4, 6, 11 ].freeze
78
79
 
79
- # the whitelisted DMI IDs. This is combination of the defaults + any additional
80
+ # the allowlisted DMI IDs. This is combination of the defaults + any additional
80
81
  # IDs defined in the :additional_dmi_ids config
81
82
  #
82
83
  # @return [Array] the list of DMI IDs to capture
83
- def whitelisted_ids
84
+ def allowlisted_ids
84
85
  if Ohai.config[:additional_dmi_ids]
85
86
  if [ Integer, Array ].include?(Ohai.config[:additional_dmi_ids].class)
86
87
  return ID_TO_CAPTURE + Array(Ohai.config[:additional_dmi_ids])
@@ -91,6 +92,10 @@ module Ohai
91
92
  ID_TO_CAPTURE
92
93
  end
93
94
 
95
+ ##
96
+ # @deprecated Use the `allowlisted_ids` method instead.
97
+ alias whitelisted_ids allowlisted_ids
98
+
94
99
  # the human readable description from a DMI ID
95
100
  #
96
101
  # @param id [String, Integer] the ID to lookup
@@ -152,7 +157,7 @@ module Ohai
152
157
  end
153
158
  end
154
159
 
155
- module_function :id_lookup, :convenience_keys, :whitelisted_ids
160
+ module_function :id_lookup, :convenience_keys, :allowlisted_ids, :whitelisted_ids
156
161
  end
157
162
  end
158
163
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Adam Jacob (<adam@chef.io>)
3
4
  # Author:: Claire McQuin (<claire@chef.io>)
@@ -27,14 +28,13 @@ module Ohai
27
28
  # Reopens ChefConfig::Config to add Ohai configuration settings.
28
29
  # see: https://github.com/chef/chef/blob/master/lib/chef/config.rb
29
30
  class Config
30
-
31
31
  config_context :ohai do
32
32
  default :disabled_plugins, []
33
33
  default :hints_path, [ ChefConfig::Config.platform_specific_path("/etc/chef/ohai/hints") ]
34
34
  default :log_level, :auto
35
35
  default :log_location, STDERR
36
36
  default :plugin, ( Ohai::PluginConfig.new { |h, k| h[k] = Ohai::PluginConfig.new } )
37
- default :plugin_path, [ File.expand_path(File.join(File.dirname(__FILE__), "plugins")), ChefConfig::Config.platform_specific_path("/etc/chef/ohai/plugins") ]
37
+ default :plugin_path, [ File.expand_path(File.join(__dir__, "plugins")), ChefConfig::Config.platform_specific_path("/etc/chef/ohai/plugins") ]
38
38
  default :critical_plugins, []
39
39
  # causes all optional plugins to be run.
40
40
  default :run_all_plugins, false
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Serdar Sutay (<serdar@chef.io>)
3
4
  # Copyright:: Copyright (c) Chef Software Inc.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Adam Jacob (<adam@chef.io>)
3
4
  # Author:: Claire McQuin (<claire@chef.io>)
@@ -22,6 +23,7 @@ require_relative "../mixin/os"
22
23
  require_relative "../mixin/shell_out"
23
24
  require_relative "../mixin/seconds_to_human"
24
25
  require_relative "../mixin/which"
26
+ require_relative "../mixin/train_helpers"
25
27
  require_relative "../hints"
26
28
 
27
29
  module Ohai
@@ -86,10 +88,12 @@ module Ohai
86
88
  include Ohai::Mixin::ShellOut
87
89
  include Ohai::Mixin::SecondsToHuman
88
90
  include Ohai::Mixin::Which
91
+ include Ohai::Mixin::TrainHelpers
89
92
 
90
93
  attr_reader :data
91
94
  attr_reader :failed
92
95
  attr_reader :logger
96
+ attr_accessor :transport_connection
93
97
 
94
98
  def initialize(data, logger)
95
99
  @data = data
@@ -98,6 +102,10 @@ module Ohai
98
102
  @failed = false
99
103
  end
100
104
 
105
+ def target_mode?
106
+ !!@transport_connection
107
+ end
108
+
101
109
  def run
102
110
  @has_run = true
103
111
 
@@ -210,7 +218,7 @@ module Ohai
210
218
  def safe_get_attribute(*keys)
211
219
  keys.inject(@data) do |attrs, key|
212
220
  unless attrs.nil? || attrs.is_a?(Array) || attrs.is_a?(Hash)
213
- raise TypeError.new("Expected Hash but got #{attrs.class}.")
221
+ raise TypeError, "Expected Hash but got #{attrs.class}."
214
222
  end
215
223
 
216
224
  attrs[key]
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Serdar Sutay (<serdar@chef.io>)
3
4
  # Copyright:: Copyright (c) Chef Software Inc.
@@ -46,7 +47,8 @@ module Ohai
46
47
  :version7
47
48
  end
48
49
 
49
- # the source of the plugin on disk. This is an array since a plugin may exist for multiple platforms and this would include each of those platform specific file paths
50
+ # The source of the plugin on disk. This is an array since a plugin may exist for multiple
51
+ # oses and this would include each of those os specific file paths
50
52
  #
51
53
  # @return [Array]
52
54
  def self.sources
@@ -61,7 +63,7 @@ module Ohai
61
63
  @depends_attrs ||= []
62
64
  end
63
65
 
64
- # A block per platform for actually performing data collection constructed
66
+ # A block per os for actually performing data collection constructed
65
67
  # by the collect_data method
66
68
  #
67
69
  # @return [Mash]
@@ -101,15 +103,16 @@ module Ohai
101
103
  !!@optional
102
104
  end
103
105
 
104
- # define data collection methodology per platform
106
+ # define data collection methodology per os
105
107
  #
106
- # @param platform [Symbol] the platform to collect data for
107
- # @param other_platforms [Array] additional platforms to collect data for
108
- # @param block [block] the actual code to collect data for the specified platforms
109
- def self.collect_data(platform = :default, *other_platforms, &block)
110
- [platform, other_platforms].flatten.each do |plat|
111
- Ohai::Log.warn("collect_data already defined on platform '#{plat}' for #{self}, last plugin seen will be used") if data_collector.key?(plat)
112
- data_collector[plat] = block
108
+ # @param os [Array<Symbol>] the list of oses to collect data for
109
+ # @param block [block] the actual code to collect data for the specified os
110
+ #
111
+ def self.collect_data(*os_list, &block)
112
+ os_list = [ :default ] if os_list.empty?
113
+ os_list.flatten.each do |os|
114
+ Ohai::Log.warn("collect_data already defined on os '#{os}' for #{self}, last plugin seen will be used") if data_collector.key?(os)
115
+ data_collector[os] = block
113
116
  end
114
117
  end
115
118
 
@@ -120,12 +123,22 @@ module Ohai
120
123
 
121
124
  def run_plugin
122
125
  collector = self.class.data_collector
123
- platform = collect_os
124
-
125
- if collector.key?(platform)
126
- instance_eval(&collector[platform])
127
- elsif collector.key?(:default)
126
+ os = collect_os
127
+
128
+ # :default - means any remote or local unix or windows host
129
+ # :target - means any remote API which is not unix/windows or otherwise rubyable (cisco switches, IPMI console, HTTP API, etc)
130
+ #
131
+ # Do not be confused by the fact that collectors tagged :target do not run against e.g. target-mode ubuntu boxes, that is not
132
+ # what :target is intended for. Also, do not be confused by the fact that collectors tagged :default do not run by default against
133
+ # pure-target mode targets like switches. That is all intended behavior, the names are problematic. The :default nomenclature was
134
+ # invented 10 years before target mode and we are stuck with it.
135
+ #
136
+ if collector.key?(os)
137
+ instance_eval(&collector[os])
138
+ elsif collector.key?(:default) && !nonruby_target?
128
139
  instance_eval(&collector[:default])
140
+ elsif collector.key?(:target) && nonruby_target?
141
+ instance_eval(&collector[:target])
129
142
  else
130
143
  logger.trace("Plugin #{name}: No data to collect. Skipping...")
131
144
  end
@@ -182,8 +195,6 @@ module Ohai
182
195
  # key? to avoid falsely instantiating a configuration hash.
183
196
  if Ohai.config[:plugin].key?(snake_case_name)
184
197
  Ohai.config[:plugin][snake_case_name]
185
- else
186
- nil
187
198
  end
188
199
  end
189
200
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Adam Jacob (<adam@chef.io>)
3
4
  # Copyright:: Copyright (c) Chef Software Inc.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Serdar Sutay (<serdar@chef.io>)
3
4
  # Copyright:: Copyright (c) Chef Software Inc.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Adam Jacob (<adam@chef.io>)
3
4
  # Copyright:: Copyright (c) Chef Software Inc.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: Copyright (c) Chef Software Inc.
3
4
  # License:: Apache License, Version 2.0
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Tim Smith (<tsmith@chef.io>)
3
4
  # Copyright:: Copyright (c) Chef Software Inc.
@@ -31,12 +32,12 @@ module Ohai
31
32
  #
32
33
  module AzureMetadata
33
34
 
34
- AZURE_METADATA_ADDR ||= "169.254.169.254".freeze
35
+ AZURE_METADATA_ADDR ||= "169.254.169.254"
35
36
 
36
37
  # it's important that the newer versions are at the end of this array so we can skip sorting it
37
38
  AZURE_SUPPORTED_VERSIONS ||= %w{ 2017-04-02 2017-08-01 2017-12-01 2018-02-01 2018-04-02
38
- 2018-10-01 2019-02-01 2019-03-11 2019-04-30 2019-06-01
39
- 2019-06-04 2019-08-01 2019-08-15 2019-11-01 }.freeze
39
+ 2018-10-01 2019-02-01 2019-03-11 2019-04-30 2019-06-01
40
+ 2019-06-04 2019-08-01 2019-08-15 2019-11-01 }.freeze
40
41
 
41
42
  def best_api_version
42
43
  @api_version ||= begin
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Copyright:: Copyright (c) Chef Software Inc.
3
4
  # License:: Apache License, Version 2.0
@@ -16,6 +17,7 @@
16
17
  #
17
18
 
18
19
  require_relative "../config"
20
+ require "singleton" unless defined?(Singleton)
19
21
 
20
22
  module Ohai
21
23
  module Mixin
@@ -32,7 +34,18 @@ module Ohai
32
34
  end
33
35
 
34
36
  def __transport_connection
35
- # Chef.run_context&.transport_connection
37
+ transport_connection
38
+ end
39
+
40
+ # because of target mode we cache the PATH to avoid massive amounts of `echo $PATH` remote queries
41
+ #
42
+ def __env_path
43
+ PathCache.instance.path_cache ||= super
44
+ end
45
+
46
+ class PathCache
47
+ include Singleton
48
+ attr_accessor :path_cache
36
49
  end
37
50
  end
38
51
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  $stderr.puts "WARN: Ohai::Mixin::Command is deprecated, please use Ohai::Mixin::ShellOut or remove if the reference is unnecessary"
2
3
  require_relative "shell_out"
3
4
  Ohai::Mixin::Command = Ohai::Mixin::ShellOut unless defined?(Ohai::Mixin::Command)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Serdar Sutay (<serdar@chef.io>)
3
4
  # Copyright:: Copyright (c) Chef Software Inc.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Tim Smith <tsmith@chef.io>
3
4
  # Copyright:: Copyright (c) Chef Software Inc.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  # Author:: Dylan Page (<dpage@digitalocean.com>)
3
4
  # License:: Apache License, Version 2.0
@@ -20,8 +21,8 @@ module Ohai
20
21
  module Mixin
21
22
  module DOMetadata
22
23
 
23
- DO_METADATA_ADDR ||= "169.254.169.254".freeze
24
- DO_METADATA_URL ||= "/metadata/v1.json".freeze
24
+ DO_METADATA_ADDR ||= "169.254.169.254"
25
+ DO_METADATA_URL ||= "/metadata/v1.json"
25
26
 
26
27
  def http_client
27
28
  Net::HTTP.start(DO_METADATA_ADDR).tap { |h| h.read_timeout = 6 }
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # Author:: Tim Dysinger (<tim@dysinger.net>)
3
4
  # Author:: Benjamin Black (<bb@chef.io>)
@@ -39,10 +40,10 @@ module Ohai
39
40
  #
40
41
  module Ec2Metadata
41
42
 
42
- EC2_METADATA_ADDR ||= "169.254.169.254".freeze
43
+ EC2_METADATA_ADDR ||= "169.254.169.254"
43
44
  EC2_SUPPORTED_VERSIONS ||= %w{ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15
44
- 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12
45
- 2014-02-25 2014-11-05 2015-10-20 2016-04-19 2016-06-30 2016-09-02 }.freeze
45
+ 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12
46
+ 2014-02-25 2014-11-05 2015-10-20 2016-04-19 2016-06-30 2016-09-02 }.freeze
46
47
  EC2_ARRAY_VALUES ||= %w{security-groups local_ipv4s}.freeze
47
48
  EC2_ARRAY_DIR ||= %w{network/interfaces/macs}.freeze
48
49
  EC2_JSON_DIR ||= %w{iam}.freeze
@@ -57,7 +58,7 @@ module Ohai
57
58
  elsif response.code != "200"
58
59
  raise "Mixin EC2: Unable to determine EC2 metadata version (returned #{response.code} response)"
59
60
  end
60
- # Note: Sorting the list of versions may have unintended consequences in
61
+ # NOTE: Sorting the list of versions may have unintended consequences in
61
62
  # non-EC2 environments. It appears to be safe in EC2 as of 2013-04-12.
62
63
  versions = response.body.split("\n").sort
63
64
  until versions.empty? || EC2_SUPPORTED_VERSIONS.include?(versions.last)
@@ -118,7 +119,7 @@ module Ohai
118
119
  else
119
120
  metadata_get(key, best_api_version)
120
121
  end
121
- elsif (not key.eql?(id)) && (not key.eql?("/"))
122
+ elsif (!key.eql?(id)) && (!key.eql?("/"))
122
123
  name = key[0..-2]
123
124
  sym = metadata_key(name)
124
125
  if EC2_ARRAY_DIR.include?(name)
@@ -142,8 +143,8 @@ module Ohai
142
143
  key = expand_path(o)
143
144
  if key[-1..-1] != "/"
144
145
  retr_meta = metadata_get("#{id}#{key}", api_version)
145
- metadata[metadata_key(key)] = retr_meta ? retr_meta : ""
146
- elsif not key.eql?("/")
146
+ metadata[metadata_key(key)] = retr_meta || ""
147
+ elsif !key.eql?("/")
147
148
  metadata[key[0..-2]] = fetch_dir_metadata("#{id}#{key}", api_version)
148
149
  end
149
150
  end
@@ -159,11 +160,11 @@ module Ohai
159
160
  key = expand_path(o)
160
161
  if key[-1..-1] != "/"
161
162
  retr_meta = metadata_get("#{id}#{key}", api_version)
162
- data = retr_meta ? retr_meta : ""
163
+ data = retr_meta || ""
163
164
  json = String(data)
164
165
  parser = FFI_Yajl::Parser.new
165
166
  metadata[metadata_key(key)] = parser.parse(json)
166
- elsif not key.eql?("/")
167
+ elsif !key.eql?("/")
167
168
  metadata[key[0..-2]] = fetch_json_dir_metadata("#{id}#{key}", api_version)
168
169
  end
169
170
  end