ohai 18.2.6 → 19.0.3

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 (169) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +28 -28
  3. data/LICENSE +201 -201
  4. data/bin/ohai +25 -25
  5. data/lib/ohai/application.rb +189 -189
  6. data/lib/ohai/common/dmi.rb +167 -167
  7. data/lib/ohai/config.rb +51 -51
  8. data/lib/ohai/dsl/plugin/versionvii.rb +203 -203
  9. data/lib/ohai/dsl/plugin.rb +232 -232
  10. data/lib/ohai/dsl.rb +22 -22
  11. data/lib/ohai/exception.rb +36 -36
  12. data/lib/ohai/hints.rb +68 -68
  13. data/lib/ohai/loader.rb +178 -178
  14. data/lib/ohai/log.rb +34 -34
  15. data/lib/ohai/mash.rb +22 -22
  16. data/lib/ohai/mixin/alibaba_metadata.rb +83 -83
  17. data/lib/ohai/mixin/azure_metadata.rb +105 -105
  18. data/lib/ohai/mixin/chef_utils_wiring.rb +52 -52
  19. data/lib/ohai/mixin/command.rb +4 -4
  20. data/lib/ohai/mixin/constant_helper.rb +55 -55
  21. data/lib/ohai/mixin/dmi_decode.rb +54 -54
  22. data/lib/ohai/mixin/do_metadata.rb +48 -48
  23. data/lib/ohai/mixin/ec2_metadata.rb +264 -270
  24. data/lib/ohai/mixin/gce_metadata.rb +79 -79
  25. data/lib/ohai/mixin/http_helper.rb +64 -64
  26. data/lib/ohai/mixin/json_helper.rb +36 -36
  27. data/lib/ohai/mixin/network_helper.rb +92 -92
  28. data/lib/ohai/mixin/oci_metadata.rb +60 -60
  29. data/lib/ohai/mixin/os.rb +128 -128
  30. data/lib/ohai/mixin/scaleway_metadata.rb +51 -51
  31. data/lib/ohai/mixin/seconds_to_human.rb +52 -52
  32. data/lib/ohai/mixin/shell_out.rb +51 -51
  33. data/lib/ohai/mixin/softlayer_metadata.rb +74 -74
  34. data/lib/ohai/mixin/string.rb +31 -31
  35. data/lib/ohai/mixin/train_helpers.rb +36 -36
  36. data/lib/ohai/mixin/which.rb +39 -39
  37. data/lib/ohai/plugin_config.rb +47 -47
  38. data/lib/ohai/plugins/aix/kernel.rb +50 -50
  39. data/lib/ohai/plugins/aix/memory.rb +37 -37
  40. data/lib/ohai/plugins/aix/network.rb +142 -142
  41. data/lib/ohai/plugins/aix/platform.rb +30 -30
  42. data/lib/ohai/plugins/aix/uptime.rb +54 -54
  43. data/lib/ohai/plugins/aix/virtualization.rb +154 -154
  44. data/lib/ohai/plugins/alibaba.rb +72 -72
  45. data/lib/ohai/plugins/azure.rb +154 -154
  46. data/lib/ohai/plugins/bsd/virtualization.rb +121 -121
  47. data/lib/ohai/plugins/c.rb +178 -178
  48. data/lib/ohai/plugins/chef.rb +50 -50
  49. data/lib/ohai/plugins/cloud.rb +379 -379
  50. data/lib/ohai/plugins/command.rb +26 -26
  51. data/lib/ohai/plugins/cpu.rb +642 -642
  52. data/lib/ohai/plugins/darwin/hardware.rb +99 -99
  53. data/lib/ohai/plugins/darwin/memory.rb +62 -62
  54. data/lib/ohai/plugins/darwin/network.rb +207 -207
  55. data/lib/ohai/plugins/darwin/platform.rb +40 -40
  56. data/lib/ohai/plugins/darwin/virtualization.rb +104 -104
  57. data/lib/ohai/plugins/digital_ocean.rb +67 -67
  58. data/lib/ohai/plugins/dmi.rb +134 -134
  59. data/lib/ohai/plugins/docker.rb +58 -58
  60. data/lib/ohai/plugins/dragonflybsd/memory.rb +60 -60
  61. data/lib/ohai/plugins/dragonflybsd/network.rb +128 -128
  62. data/lib/ohai/plugins/dragonflybsd/platform.rb +28 -28
  63. data/lib/ohai/plugins/ec2.rb +148 -148
  64. data/lib/ohai/plugins/elixir.rb +36 -36
  65. data/lib/ohai/plugins/erlang.rb +60 -60
  66. data/lib/ohai/plugins/eucalyptus.rb +86 -86
  67. data/lib/ohai/plugins/filesystem.rb +753 -753
  68. data/lib/ohai/plugins/fips.rb +36 -36
  69. data/lib/ohai/plugins/freebsd/memory.rb +60 -60
  70. data/lib/ohai/plugins/freebsd/network.rb +128 -128
  71. data/lib/ohai/plugins/freebsd/platform.rb +28 -28
  72. data/lib/ohai/plugins/gce.rb +89 -89
  73. data/lib/ohai/plugins/go.rb +34 -34
  74. data/lib/ohai/plugins/groovy.rb +38 -38
  75. data/lib/ohai/plugins/grub2.rb +40 -40
  76. data/lib/ohai/plugins/habitat.rb +73 -73
  77. data/lib/ohai/plugins/haskell.rb +96 -96
  78. data/lib/ohai/plugins/hostname.rb +133 -133
  79. data/lib/ohai/plugins/init_package.rb +26 -26
  80. data/lib/ohai/plugins/java.rb +78 -78
  81. data/lib/ohai/plugins/kernel.rb +292 -292
  82. data/lib/ohai/plugins/keys.rb +27 -27
  83. data/lib/ohai/plugins/languages.rb +26 -26
  84. data/lib/ohai/plugins/libvirt.rb +114 -114
  85. data/lib/ohai/plugins/linode.rb +73 -73
  86. data/lib/ohai/plugins/linux/block_device.rb +48 -48
  87. data/lib/ohai/plugins/linux/hostnamectl.rb +34 -34
  88. data/lib/ohai/plugins/linux/interrupts.rb +84 -83
  89. data/lib/ohai/plugins/linux/ipc.rb +52 -52
  90. data/lib/ohai/plugins/linux/livepatch.rb +38 -38
  91. data/lib/ohai/plugins/linux/lsb.rb +46 -46
  92. data/lib/ohai/plugins/linux/lspci.rb +80 -80
  93. data/lib/ohai/plugins/linux/machineid.rb +36 -36
  94. data/lib/ohai/plugins/linux/mdadm.rb +120 -120
  95. data/lib/ohai/plugins/linux/memory.rb +106 -106
  96. data/lib/ohai/plugins/linux/network.rb +879 -879
  97. data/lib/ohai/plugins/linux/os_release.rb +38 -38
  98. data/lib/ohai/plugins/linux/platform.rb +314 -314
  99. data/lib/ohai/plugins/linux/selinux.rb +69 -69
  100. data/lib/ohai/plugins/linux/sessions.rb +54 -54
  101. data/lib/ohai/plugins/linux/sysctl.rb +39 -39
  102. data/lib/ohai/plugins/linux/systemd_paths.rb +36 -36
  103. data/lib/ohai/plugins/linux/tc.rb +61 -61
  104. data/lib/ohai/plugins/linux/virtualization.rb +300 -300
  105. data/lib/ohai/plugins/lua.rb +39 -39
  106. data/lib/ohai/plugins/mono.rb +50 -50
  107. data/lib/ohai/plugins/netbsd/memory.rb +99 -99
  108. data/lib/ohai/plugins/netbsd/network.rb +122 -122
  109. data/lib/ohai/plugins/netbsd/platform.rb +28 -28
  110. data/lib/ohai/plugins/network.rb +186 -186
  111. data/lib/ohai/plugins/nodejs.rb +40 -40
  112. data/lib/ohai/plugins/oci.rb +94 -94
  113. data/lib/ohai/plugins/ohai.rb +29 -29
  114. data/lib/ohai/plugins/ohai_time.rb +26 -26
  115. data/lib/ohai/plugins/openbsd/memory.rb +99 -99
  116. data/lib/ohai/plugins/openbsd/network.rb +122 -122
  117. data/lib/ohai/plugins/openbsd/platform.rb +28 -28
  118. data/lib/ohai/plugins/openstack.rb +84 -84
  119. data/lib/ohai/plugins/os.rb +55 -55
  120. data/lib/ohai/plugins/packages.rb +234 -234
  121. data/lib/ohai/plugins/passwd.rb +104 -104
  122. data/lib/ohai/plugins/perl.rb +45 -45
  123. data/lib/ohai/plugins/php.rb +52 -52
  124. data/lib/ohai/plugins/platform.rb +41 -41
  125. data/lib/ohai/plugins/powershell.rb +82 -82
  126. data/lib/ohai/plugins/ps.rb +35 -35
  127. data/lib/ohai/plugins/python.rb +43 -43
  128. data/lib/ohai/plugins/rackspace.rb +177 -177
  129. data/lib/ohai/plugins/root_group.rb +41 -41
  130. data/lib/ohai/plugins/rpm.rb +121 -121
  131. data/lib/ohai/plugins/ruby.rb +66 -66
  132. data/lib/ohai/plugins/rust.rb +34 -34
  133. data/lib/ohai/plugins/scala.rb +38 -38
  134. data/lib/ohai/plugins/scaleway.rb +58 -58
  135. data/lib/ohai/plugins/scsi.rb +52 -52
  136. data/lib/ohai/plugins/shard.rb +142 -142
  137. data/lib/ohai/plugins/shells.rb +32 -32
  138. data/lib/ohai/plugins/softlayer.rb +48 -48
  139. data/lib/ohai/plugins/solaris2/dmi.rb +191 -191
  140. data/lib/ohai/plugins/solaris2/memory.rb +32 -32
  141. data/lib/ohai/plugins/solaris2/network.rb +192 -192
  142. data/lib/ohai/plugins/solaris2/platform.rb +58 -58
  143. data/lib/ohai/plugins/solaris2/virtualization.rb +90 -90
  144. data/lib/ohai/plugins/ssh_host_key.rb +84 -84
  145. data/lib/ohai/plugins/sysconf.rb +46 -46
  146. data/lib/ohai/plugins/timezone.rb +45 -45
  147. data/lib/ohai/plugins/train.rb +35 -35
  148. data/lib/ohai/plugins/uptime.rb +95 -95
  149. data/lib/ohai/plugins/virtualbox.rb +197 -197
  150. data/lib/ohai/plugins/vmware.rb +109 -109
  151. data/lib/ohai/plugins/windows/dmi.rb +95 -95
  152. data/lib/ohai/plugins/windows/drivers.rb +52 -52
  153. data/lib/ohai/plugins/windows/memory.rb +39 -39
  154. data/lib/ohai/plugins/windows/network.rb +222 -222
  155. data/lib/ohai/plugins/windows/platform.rb +34 -34
  156. data/lib/ohai/plugins/windows/system_enclosure.rb +29 -29
  157. data/lib/ohai/plugins/windows/virtualization.rb +45 -45
  158. data/lib/ohai/plugins/zpools.rb +94 -94
  159. data/lib/ohai/provides_map.rb +208 -208
  160. data/lib/ohai/runner.rb +128 -126
  161. data/lib/ohai/system.rb +258 -258
  162. data/lib/ohai/train_transport.rb +29 -29
  163. data/lib/ohai/util/file_helper.rb +6 -6
  164. data/lib/ohai/util/ip_helper.rb +56 -56
  165. data/lib/ohai/util/win32.rb +47 -47
  166. data/lib/ohai/version.rb +23 -23
  167. data/lib/ohai.rb +23 -23
  168. data/ohai.gemspec +35 -35
  169. metadata +9 -15
data/lib/ohai/system.rb CHANGED
@@ -1,258 +1,258 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Adam Jacob (<adam@chef.io>)
4
- # Copyright:: Copyright (c) Chef Software Inc.
5
- # License:: Apache License, Version 2.0
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- require_relative "version"
21
- require_relative "loader"
22
- require_relative "log"
23
- require_relative "mash"
24
- require_relative "runner"
25
- require_relative "dsl"
26
- require_relative "mixin/shell_out"
27
- require_relative "mixin/os"
28
- require_relative "mixin/string"
29
- require_relative "mixin/constant_helper"
30
- require_relative "provides_map"
31
- require_relative "hints"
32
- require_relative "config"
33
- require_relative "train_transport"
34
- require "ffi_yajl" unless defined?(FFI_Yajl)
35
- require "cgi" unless defined?(CGI)
36
-
37
- module Ohai
38
- # The class used by Ohai::Application and Chef to actually collect data
39
- class System
40
- include Ohai::Mixin::ConstantHelper
41
-
42
- attr_accessor :data
43
- attr_reader :config
44
- attr_reader :provides_map
45
- attr_reader :logger
46
- attr_writer :transport_connection
47
-
48
- # the cli flag is used to determine if we're being constructed by
49
- # something like chef-client (which doesn't set this flag) and
50
- # which sets up its own loggers, or if we're coming from Ohai::Application
51
- # and therefore need to configure Ohai's own logger.
52
- def initialize(config = {})
53
- @cli = config[:invoked_from_cli]
54
- @plugin_path = ""
55
- @config = config
56
- @failed_plugins = []
57
- @logger = config[:logger] || Ohai::Log.with_child
58
- @logger.metadata = { system: "ohai", version: Ohai::VERSION }
59
- reset_system
60
- end
61
-
62
- # clears the current collected data, clears the provides map for plugins,
63
- # refreshes hints, and reconfigures ohai. In short this gets Ohai into a first run state
64
- #
65
- # @return [void]
66
- def reset_system
67
- @data = Mash.new
68
- @provides_map = ProvidesMap.new
69
-
70
- configure_ohai
71
- configure_logging if @cli
72
-
73
- @loader = Ohai::Loader.new(self)
74
-
75
- Ohai::Hints.refresh_hints
76
-
77
- # Remove the previously defined plugins
78
- recursive_remove_constants(Ohai::NamedPlugin)
79
- end
80
-
81
- def runner
82
- @runner ||=
83
- Ohai::Runner.new(self, true).tap do |runner|
84
- runner.transport_connection = transport_connection unless transport_connection.nil?
85
- end
86
- end
87
-
88
- def [](key)
89
- @data[key]
90
- end
91
-
92
- # Resets the system and loads then runs the plugins. This is the primary method called
93
- # to run the system.
94
- #
95
- # @param [Array<String>] attribute_filter the attributes to run. All will be run if not specified
96
- #
97
- # @return [void]
98
- def all_plugins(attribute_filter = nil)
99
- # Reset the system when all_plugins is called since this function
100
- # can be run multiple times in order to pick up any changes in the
101
- # config or plugins with Chef.
102
- reset_system
103
-
104
- load_plugins
105
- run_plugins(true, attribute_filter)
106
- end
107
-
108
- # load all plugins by calling Ohai::Loader.load_all
109
- #
110
- # @see Ohai::Loader.load_all
111
- def load_plugins
112
- @loader.load_all
113
- end
114
-
115
- # get backend parameters for target mode
116
- #
117
- # @return [Train::Transport]
118
- def transport_connection
119
- @transport_connection ||= Ohai::TrainTransport.new(logger).build_transport&.connection
120
- end
121
-
122
- # run all plugins or those that match the attribute filter is provided
123
- #
124
- # @param safe [Boolean]
125
- # @param [Array<String>] attribute_filter the attributes to run. All will be run if not specified
126
- #
127
- # @return [Mash]
128
- def run_plugins(safe = false, attribute_filter = nil)
129
- begin
130
- @provides_map.all_plugins(attribute_filter).each do |plugin|
131
- runner.run_plugin(plugin)
132
- end
133
- transport_connection.close unless transport_connection.nil?
134
- rescue Ohai::Exceptions::AttributeNotFound, Ohai::Exceptions::DependencyCycle => e
135
- logger.error("Encountered error while running plugins: #{e.inspect}")
136
- raise
137
- end
138
- critical_failed = Ohai::Config.ohai[:critical_plugins] & runner.failed_plugins
139
- unless critical_failed.empty?
140
- msg = "The following Ohai plugins marked as critical failed: #{critical_failed}"
141
- if @cli
142
- logger.error(msg)
143
- exit(true)
144
- else
145
- raise Ohai::Exceptions::CriticalPluginFailure, "#{msg}. Failing Chef run."
146
- end
147
- end
148
-
149
- # Freeze all strings.
150
- freeze_strings!
151
- end
152
-
153
- # @param [String] plugin_path
154
- #
155
- # @return [void]
156
- #
157
- def run_additional_plugins(plugin_path)
158
- @loader.load_additional(plugin_path).each do |plugin|
159
- logger.trace "Running plugin #{plugin}"
160
- runner.run_plugin(plugin)
161
- end
162
-
163
- freeze_strings!
164
- end
165
-
166
- #
167
- # Serialize this object as a hash
168
- #
169
- def to_json
170
- FFI_Yajl::Encoder.new.encode(@data)
171
- end
172
-
173
- #
174
- # Pretty Print this object as JSON
175
- #
176
- def json_pretty_print(item = nil)
177
- FFI_Yajl::Encoder.new(pretty: true, validate_utf8: false).encode(item || @data)
178
- end
179
-
180
- def attributes_print(a)
181
- data = @data
182
- a.split("/").each do |part|
183
- data = data[part]
184
- end
185
- raise ArgumentError, "I cannot find an attribute named #{a}!" if data.nil?
186
-
187
- case data
188
- when Hash, Mash, Array, Integer
189
- json_pretty_print(data)
190
- when String
191
- if data.respond_to?(:lines)
192
- json_pretty_print(data.lines.to_a)
193
- else
194
- json_pretty_print(data.to_a)
195
- end
196
- else
197
- raise ArgumentError, "I can only generate JSON for Hashes, Mashes, Arrays and Strings. You fed me a #{data.class}!"
198
- end
199
- end
200
-
201
- private
202
-
203
- def configure_ohai
204
- Ohai.config.merge!(@config)
205
-
206
- # add any additional CLI passed directories to the plugin path excluding duplicates
207
- unless Ohai.config[:directory].nil?
208
- # make sure the directory config is an array since it could be a string set in client.rb
209
- Array(Ohai.config[:directory]).each do |dir|
210
- next if Ohai.config[:plugin_path].include?(dir)
211
-
212
- Ohai.config[:plugin_path] << dir
213
- end
214
- end
215
-
216
- logger.debug("Running Ohai with the following configuration: #{Ohai.config.configuration}")
217
- end
218
-
219
- def configure_logging
220
- if Ohai.config[:log_level] == :auto
221
- Ohai::Log.level = :info
222
- else
223
- Ohai::Log.level = Ohai.config[:log_level]
224
- end
225
- end
226
-
227
- # Freeze all string values in @data. This makes them immutable and saves
228
- # a bit of RAM.
229
- #
230
- # @api private
231
- # @return [void]
232
- def freeze_strings!
233
- # Recursive visitor pattern helper.
234
- visitor = lambda do |val|
235
- case val
236
- when Hash
237
- val.each_value { |v| visitor.call(v) }
238
- when Array
239
- val.each { |v| visitor.call(v) }
240
- when String
241
- val.freeze
242
- end
243
- end
244
- visitor.call(@data)
245
- end
246
-
247
- # Extract additional backend parameters from Target Mode URL.
248
- #
249
- # @api private
250
- # @return [Hash]
251
- def backend_parameters
252
- uri = URI.parse(config[:target])
253
- return {} unless uri.query
254
-
255
- CGI.parse(uri.query).map { |k, v| [k.to_sym, v.first] }.to_h
256
- end
257
- end
258
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Adam Jacob (<adam@chef.io>)
4
+ # Copyright:: Copyright (c) Chef Software Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require_relative "version"
21
+ require_relative "loader"
22
+ require_relative "log"
23
+ require_relative "mash"
24
+ require_relative "runner"
25
+ require_relative "dsl"
26
+ require_relative "mixin/shell_out"
27
+ require_relative "mixin/os"
28
+ require_relative "mixin/string"
29
+ require_relative "mixin/constant_helper"
30
+ require_relative "provides_map"
31
+ require_relative "hints"
32
+ require_relative "config"
33
+ require_relative "train_transport"
34
+ require "ffi_yajl" unless defined?(FFI_Yajl)
35
+ require "cgi" unless defined?(CGI)
36
+
37
+ module Ohai
38
+ # The class used by Ohai::Application and Chef to actually collect data
39
+ class System
40
+ include Ohai::Mixin::ConstantHelper
41
+
42
+ attr_accessor :data
43
+ attr_reader :config
44
+ attr_reader :provides_map
45
+ attr_reader :logger
46
+ attr_writer :transport_connection
47
+
48
+ # the cli flag is used to determine if we're being constructed by
49
+ # something like chef-client (which doesn't set this flag) and
50
+ # which sets up its own loggers, or if we're coming from Ohai::Application
51
+ # and therefore need to configure Ohai's own logger.
52
+ def initialize(config = {})
53
+ @cli = config[:invoked_from_cli]
54
+ @plugin_path = ""
55
+ @config = config
56
+ @failed_plugins = []
57
+ @logger = config[:logger] || Ohai::Log.with_child
58
+ @logger.metadata = { system: "ohai", version: Ohai::VERSION }
59
+ reset_system
60
+ end
61
+
62
+ # clears the current collected data, clears the provides map for plugins,
63
+ # refreshes hints, and reconfigures ohai. In short this gets Ohai into a first run state
64
+ #
65
+ # @return [void]
66
+ def reset_system
67
+ @data = Mash.new
68
+ @provides_map = ProvidesMap.new
69
+
70
+ configure_ohai
71
+ configure_logging if @cli
72
+
73
+ @loader = Ohai::Loader.new(self)
74
+
75
+ Ohai::Hints.refresh_hints
76
+
77
+ # Remove the previously defined plugins
78
+ recursive_remove_constants(Ohai::NamedPlugin)
79
+ end
80
+
81
+ def runner
82
+ @runner ||=
83
+ Ohai::Runner.new(self, true).tap do |runner|
84
+ runner.transport_connection = transport_connection unless transport_connection.nil?
85
+ end
86
+ end
87
+
88
+ def [](key)
89
+ @data[key]
90
+ end
91
+
92
+ # Resets the system and loads then runs the plugins. This is the primary method called
93
+ # to run the system.
94
+ #
95
+ # @param [Array<String>] attribute_filter the attributes to run. All will be run if not specified
96
+ #
97
+ # @return [void]
98
+ def all_plugins(attribute_filter = nil)
99
+ # Reset the system when all_plugins is called since this function
100
+ # can be run multiple times in order to pick up any changes in the
101
+ # config or plugins with Chef.
102
+ reset_system
103
+
104
+ load_plugins
105
+ run_plugins(true, attribute_filter)
106
+ end
107
+
108
+ # load all plugins by calling Ohai::Loader.load_all
109
+ #
110
+ # @see Ohai::Loader.load_all
111
+ def load_plugins
112
+ @loader.load_all
113
+ end
114
+
115
+ # get backend parameters for target mode
116
+ #
117
+ # @return [Train::Transport]
118
+ def transport_connection
119
+ @transport_connection ||= Ohai::TrainTransport.new(logger).build_transport&.connection
120
+ end
121
+
122
+ # run all plugins or those that match the attribute filter is provided
123
+ #
124
+ # @param safe [Boolean]
125
+ # @param [Array<String>] attribute_filter the attributes to run. All will be run if not specified
126
+ #
127
+ # @return [Mash]
128
+ def run_plugins(safe = false, attribute_filter = nil)
129
+ begin
130
+ @provides_map.all_plugins(attribute_filter).each do |plugin|
131
+ runner.run_plugin(plugin)
132
+ end
133
+ transport_connection.close unless transport_connection.nil?
134
+ rescue Ohai::Exceptions::AttributeNotFound, Ohai::Exceptions::DependencyCycle => e
135
+ logger.error("Encountered error while running plugins: #{e.inspect}")
136
+ raise
137
+ end
138
+ critical_failed = Ohai::Config.ohai[:critical_plugins] & runner.failed_plugins
139
+ unless critical_failed.empty?
140
+ msg = "The following Ohai plugins marked as critical failed: #{critical_failed}"
141
+ if @cli
142
+ logger.error(msg)
143
+ exit(true)
144
+ else
145
+ raise Ohai::Exceptions::CriticalPluginFailure, "#{msg}. Failing Chef run."
146
+ end
147
+ end
148
+
149
+ # Freeze all strings.
150
+ freeze_strings!
151
+ end
152
+
153
+ # @param [String] plugin_path
154
+ #
155
+ # @return [void]
156
+ #
157
+ def run_additional_plugins(plugin_path)
158
+ @loader.load_additional(plugin_path).each do |plugin|
159
+ logger.trace "Running plugin #{plugin}"
160
+ runner.run_plugin(plugin)
161
+ end
162
+
163
+ freeze_strings!
164
+ end
165
+
166
+ #
167
+ # Serialize this object as a hash
168
+ #
169
+ def to_json
170
+ FFI_Yajl::Encoder.new.encode(@data)
171
+ end
172
+
173
+ #
174
+ # Pretty Print this object as JSON
175
+ #
176
+ def json_pretty_print(item = nil)
177
+ FFI_Yajl::Encoder.new(pretty: true, validate_utf8: false).encode(item || @data)
178
+ end
179
+
180
+ def attributes_print(a)
181
+ data = @data
182
+ a.split("/").each do |part|
183
+ data = data[part]
184
+ end
185
+ raise ArgumentError, "I cannot find an attribute named #{a}!" if data.nil?
186
+
187
+ case data
188
+ when Hash, Mash, Array, Integer
189
+ json_pretty_print(data)
190
+ when String
191
+ if data.respond_to?(:lines)
192
+ json_pretty_print(data.lines.to_a)
193
+ else
194
+ json_pretty_print(data.to_a)
195
+ end
196
+ else
197
+ raise ArgumentError, "I can only generate JSON for Hashes, Mashes, Arrays and Strings. You fed me a #{data.class}!"
198
+ end
199
+ end
200
+
201
+ private
202
+
203
+ def configure_ohai
204
+ Ohai.config.merge!(@config)
205
+
206
+ # add any additional CLI passed directories to the plugin path excluding duplicates
207
+ unless Ohai.config[:directory].nil?
208
+ # make sure the directory config is an array since it could be a string set in client.rb
209
+ Array(Ohai.config[:directory]).each do |dir|
210
+ next if Ohai.config[:plugin_path].include?(dir)
211
+
212
+ Ohai.config[:plugin_path] << dir
213
+ end
214
+ end
215
+
216
+ logger.debug("Running Ohai with the following configuration: #{Ohai.config.configuration}")
217
+ end
218
+
219
+ def configure_logging
220
+ if Ohai.config[:log_level] == :auto
221
+ Ohai::Log.level = :info
222
+ else
223
+ Ohai::Log.level = Ohai.config[:log_level]
224
+ end
225
+ end
226
+
227
+ # Freeze all string values in @data. This makes them immutable and saves
228
+ # a bit of RAM.
229
+ #
230
+ # @api private
231
+ # @return [void]
232
+ def freeze_strings!
233
+ # Recursive visitor pattern helper.
234
+ visitor = lambda do |val|
235
+ case val
236
+ when Hash
237
+ val.each_value { |v| visitor.call(v) }
238
+ when Array
239
+ val.each { |v| visitor.call(v) }
240
+ when String
241
+ val.freeze
242
+ end
243
+ end
244
+ visitor.call(@data)
245
+ end
246
+
247
+ # Extract additional backend parameters from Target Mode URL.
248
+ #
249
+ # @api private
250
+ # @return [Hash]
251
+ def backend_parameters
252
+ uri = URI.parse(config[:target])
253
+ return {} unless uri.query
254
+
255
+ CGI.parse(uri.query).map { |k, v| [k.to_sym, v.first] }.to_h
256
+ end
257
+ end
258
+ end
@@ -1,29 +1,29 @@
1
- # frozen_string_literal: true
2
- # Author:: Bryan McLellan <btm@loftninjas.org>
3
- # Copyright:: Copyright (c) Chef Software 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 "chef-config/mixin/train_transport" unless defined?(ChefConfig::Mixin::TrainTransport)
20
-
21
- module Ohai
22
- class TrainTransport
23
- include ChefConfig::Mixin::TrainTransport
24
-
25
- def config
26
- Ohai::Config
27
- end
28
- end
29
- end
1
+ # frozen_string_literal: true
2
+ # Author:: Bryan McLellan <btm@loftninjas.org>
3
+ # Copyright:: Copyright (c) Chef Software 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 "chef-config/mixin/train_transport" unless defined?(ChefConfig::Mixin::TrainTransport)
20
+
21
+ module Ohai
22
+ class TrainTransport
23
+ include ChefConfig::Mixin::TrainTransport
24
+
25
+ def config
26
+ Ohai::Config
27
+ end
28
+ end
29
+ end
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
2
- $stderr.puts "WARN: Ohai::Util::FileHelper is deprecated, please use Ohai::Mixin::Which or remove if the reference is unnecessary"
3
- require_relative "../mixin/which"
4
- module Ohai::Util
5
- FileHelper = Ohai::Mixin::Which
6
- end
1
+ # frozen_string_literal: true
2
+ $stderr.puts "WARN: Ohai::Util::FileHelper is deprecated, please use Ohai::Mixin::Which or remove if the reference is unnecessary"
3
+ require_relative "../mixin/which"
4
+ module Ohai::Util
5
+ FileHelper = Ohai::Mixin::Which
6
+ end