ohai 18.0.14 → 18.0.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) 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 -163
  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 +86 -86
  17. data/lib/ohai/mixin/azure_metadata.rb +111 -111
  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 +256 -256
  24. data/lib/ohai/mixin/gce_metadata.rb +83 -83
  25. data/lib/ohai/mixin/http_helper.rb +64 -64
  26. data/lib/ohai/mixin/network_helper.rb +65 -63
  27. data/lib/ohai/mixin/os.rb +128 -128
  28. data/lib/ohai/mixin/scaleway_metadata.rb +51 -51
  29. data/lib/ohai/mixin/seconds_to_human.rb +52 -52
  30. data/lib/ohai/mixin/shell_out.rb +51 -51
  31. data/lib/ohai/mixin/softlayer_metadata.rb +74 -74
  32. data/lib/ohai/mixin/string.rb +31 -31
  33. data/lib/ohai/mixin/train_helpers.rb +36 -36
  34. data/lib/ohai/mixin/which.rb +39 -39
  35. data/lib/ohai/plugin_config.rb +47 -47
  36. data/lib/ohai/plugins/aix/kernel.rb +50 -50
  37. data/lib/ohai/plugins/aix/memory.rb +37 -37
  38. data/lib/ohai/plugins/aix/network.rb +142 -142
  39. data/lib/ohai/plugins/aix/platform.rb +30 -30
  40. data/lib/ohai/plugins/aix/uptime.rb +54 -54
  41. data/lib/ohai/plugins/aix/virtualization.rb +154 -154
  42. data/lib/ohai/plugins/alibaba.rb +72 -72
  43. data/lib/ohai/plugins/azure.rb +154 -154
  44. data/lib/ohai/plugins/bsd/virtualization.rb +121 -121
  45. data/lib/ohai/plugins/c.rb +178 -178
  46. data/lib/ohai/plugins/chef.rb +50 -50
  47. data/lib/ohai/plugins/cloud.rb +357 -357
  48. data/lib/ohai/plugins/command.rb +26 -26
  49. data/lib/ohai/plugins/cpu.rb +635 -626
  50. data/lib/ohai/plugins/darwin/hardware.rb +99 -99
  51. data/lib/ohai/plugins/darwin/memory.rb +62 -62
  52. data/lib/ohai/plugins/darwin/network.rb +207 -207
  53. data/lib/ohai/plugins/darwin/platform.rb +38 -38
  54. data/lib/ohai/plugins/darwin/virtualization.rb +93 -93
  55. data/lib/ohai/plugins/digital_ocean.rb +67 -67
  56. data/lib/ohai/plugins/dmi.rb +134 -134
  57. data/lib/ohai/plugins/docker.rb +58 -58
  58. data/lib/ohai/plugins/dragonflybsd/memory.rb +60 -60
  59. data/lib/ohai/plugins/dragonflybsd/network.rb +128 -128
  60. data/lib/ohai/plugins/dragonflybsd/platform.rb +28 -28
  61. data/lib/ohai/plugins/ec2.rb +148 -155
  62. data/lib/ohai/plugins/elixir.rb +36 -36
  63. data/lib/ohai/plugins/erlang.rb +60 -60
  64. data/lib/ohai/plugins/eucalyptus.rb +86 -86
  65. data/lib/ohai/plugins/filesystem.rb +751 -751
  66. data/lib/ohai/plugins/fips.rb +36 -35
  67. data/lib/ohai/plugins/freebsd/memory.rb +60 -60
  68. data/lib/ohai/plugins/freebsd/network.rb +128 -128
  69. data/lib/ohai/plugins/freebsd/platform.rb +28 -28
  70. data/lib/ohai/plugins/gce.rb +89 -89
  71. data/lib/ohai/plugins/go.rb +34 -34
  72. data/lib/ohai/plugins/groovy.rb +38 -38
  73. data/lib/ohai/plugins/grub2.rb +40 -40
  74. data/lib/ohai/plugins/habitat.rb +73 -73
  75. data/lib/ohai/plugins/haskell.rb +96 -96
  76. data/lib/ohai/plugins/hostname.rb +133 -133
  77. data/lib/ohai/plugins/init_package.rb +26 -26
  78. data/lib/ohai/plugins/java.rb +78 -78
  79. data/lib/ohai/plugins/kernel.rb +292 -292
  80. data/lib/ohai/plugins/keys.rb +27 -27
  81. data/lib/ohai/plugins/languages.rb +26 -26
  82. data/lib/ohai/plugins/libvirt.rb +114 -114
  83. data/lib/ohai/plugins/linode.rb +73 -73
  84. data/lib/ohai/plugins/linux/block_device.rb +48 -48
  85. data/lib/ohai/plugins/linux/hostnamectl.rb +34 -34
  86. data/lib/ohai/plugins/linux/interrupts.rb +84 -84
  87. data/lib/ohai/plugins/linux/ipc.rb +52 -52
  88. data/lib/ohai/plugins/linux/livepatch.rb +38 -38
  89. data/lib/ohai/plugins/linux/lsb.rb +46 -46
  90. data/lib/ohai/plugins/linux/lspci.rb +76 -76
  91. data/lib/ohai/plugins/linux/machineid.rb +36 -36
  92. data/lib/ohai/plugins/linux/mdadm.rb +120 -120
  93. data/lib/ohai/plugins/linux/memory.rb +106 -106
  94. data/lib/ohai/plugins/linux/network.rb +879 -879
  95. data/lib/ohai/plugins/linux/os_release.rb +38 -38
  96. data/lib/ohai/plugins/linux/platform.rb +314 -313
  97. data/lib/ohai/plugins/linux/selinux.rb +69 -69
  98. data/lib/ohai/plugins/linux/sessions.rb +54 -54
  99. data/lib/ohai/plugins/linux/sysctl.rb +39 -39
  100. data/lib/ohai/plugins/linux/systemd_paths.rb +36 -36
  101. data/lib/ohai/plugins/linux/tc.rb +61 -61
  102. data/lib/ohai/plugins/linux/virtualization.rb +300 -300
  103. data/lib/ohai/plugins/lua.rb +39 -39
  104. data/lib/ohai/plugins/mono.rb +50 -50
  105. data/lib/ohai/plugins/netbsd/memory.rb +99 -99
  106. data/lib/ohai/plugins/netbsd/network.rb +122 -122
  107. data/lib/ohai/plugins/netbsd/platform.rb +28 -28
  108. data/lib/ohai/plugins/network.rb +186 -186
  109. data/lib/ohai/plugins/nodejs.rb +40 -40
  110. data/lib/ohai/plugins/ohai.rb +29 -29
  111. data/lib/ohai/plugins/ohai_time.rb +26 -26
  112. data/lib/ohai/plugins/openbsd/memory.rb +99 -99
  113. data/lib/ohai/plugins/openbsd/network.rb +122 -122
  114. data/lib/ohai/plugins/openbsd/platform.rb +28 -28
  115. data/lib/ohai/plugins/openstack.rb +84 -84
  116. data/lib/ohai/plugins/os.rb +55 -55
  117. data/lib/ohai/plugins/packages.rb +234 -234
  118. data/lib/ohai/plugins/passwd.rb +104 -104
  119. data/lib/ohai/plugins/perl.rb +45 -45
  120. data/lib/ohai/plugins/php.rb +52 -52
  121. data/lib/ohai/plugins/platform.rb +29 -29
  122. data/lib/ohai/plugins/powershell.rb +82 -82
  123. data/lib/ohai/plugins/ps.rb +35 -35
  124. data/lib/ohai/plugins/python.rb +43 -43
  125. data/lib/ohai/plugins/rackspace.rb +177 -177
  126. data/lib/ohai/plugins/root_group.rb +41 -41
  127. data/lib/ohai/plugins/rpm.rb +121 -119
  128. data/lib/ohai/plugins/ruby.rb +66 -66
  129. data/lib/ohai/plugins/rust.rb +34 -34
  130. data/lib/ohai/plugins/scala.rb +38 -38
  131. data/lib/ohai/plugins/scaleway.rb +58 -58
  132. data/lib/ohai/plugins/scsi.rb +52 -52
  133. data/lib/ohai/plugins/shard.rb +142 -142
  134. data/lib/ohai/plugins/shells.rb +32 -32
  135. data/lib/ohai/plugins/softlayer.rb +48 -48
  136. data/lib/ohai/plugins/solaris2/dmi.rb +191 -191
  137. data/lib/ohai/plugins/solaris2/memory.rb +32 -32
  138. data/lib/ohai/plugins/solaris2/network.rb +192 -192
  139. data/lib/ohai/plugins/solaris2/platform.rb +58 -58
  140. data/lib/ohai/plugins/solaris2/virtualization.rb +90 -90
  141. data/lib/ohai/plugins/ssh_host_key.rb +84 -84
  142. data/lib/ohai/plugins/sysconf.rb +46 -46
  143. data/lib/ohai/plugins/timezone.rb +25 -25
  144. data/lib/ohai/plugins/train.rb +35 -35
  145. data/lib/ohai/plugins/uptime.rb +95 -95
  146. data/lib/ohai/plugins/virtualbox.rb +197 -197
  147. data/lib/ohai/plugins/vmware.rb +94 -94
  148. data/lib/ohai/plugins/windows/dmi.rb +95 -95
  149. data/lib/ohai/plugins/windows/drivers.rb +52 -52
  150. data/lib/ohai/plugins/windows/memory.rb +39 -39
  151. data/lib/ohai/plugins/windows/network.rb +222 -222
  152. data/lib/ohai/plugins/windows/platform.rb +34 -34
  153. data/lib/ohai/plugins/windows/system_enclosure.rb +29 -29
  154. data/lib/ohai/plugins/windows/virtualization.rb +45 -45
  155. data/lib/ohai/plugins/zpools.rb +94 -94
  156. data/lib/ohai/provides_map.rb +208 -208
  157. data/lib/ohai/runner.rb +128 -128
  158. data/lib/ohai/system.rb +258 -258
  159. data/lib/ohai/train_transport.rb +29 -29
  160. data/lib/ohai/util/file_helper.rb +6 -6
  161. data/lib/ohai/util/ip_helper.rb +56 -56
  162. data/lib/ohai/util/win32.rb +47 -47
  163. data/lib/ohai/version.rb +23 -23
  164. data/lib/ohai.rb +23 -23
  165. data/ohai.gemspec +35 -35
  166. metadata +3 -3
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