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
@@ -1,203 +1,203 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Serdar Sutay (<serdar@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
16
- # implied.
17
- # See the License for the specific language governing permissions and
18
- # limitations under the License.
19
- #
20
-
21
- module Ohai
22
- module DSL
23
- class Plugin
24
- # The class for the "Version 7" plugin format we introduced in Ohai 7. This is the 2nd
25
- # generation of Ohai plugin and the previous generation (V6) was removed in Ohai 14
26
- class VersionVII < Plugin
27
- attr_reader :version
28
- attr_reader :source
29
-
30
- def initialize(data, logger)
31
- super(data, logger)
32
- @source = self.class.sources
33
- @version = :version7
34
- end
35
-
36
- # the plugin name we use through Ohai (Foo) vs. the class name (Ohai::NamedPlugin::Foo)
37
- #
38
- # @return [String]
39
- def name
40
- self.class.name.split("Ohai::NamedPlugin::")[1].to_sym
41
- end
42
-
43
- # return that we're a v7 plugin
44
- #
45
- # @return [Symbol]
46
- def self.version
47
- :version7
48
- end
49
-
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
52
- #
53
- # @return [Array]
54
- def self.sources
55
- @source_list ||= []
56
- end
57
-
58
- def self.provides_attrs
59
- @provides_attrs ||= []
60
- end
61
-
62
- def self.depends_attrs
63
- @depends_attrs ||= []
64
- end
65
-
66
- # A block per os for actually performing data collection constructed
67
- # by the collect_data method
68
- #
69
- # @return [Mash]
70
- def self.data_collector
71
- @data_collector ||= Mash.new
72
- end
73
-
74
- # set the attributes provided by the plugin
75
- #
76
- # @param attrs [Array]
77
- def self.provides(*attrs)
78
- attrs.each do |attr|
79
- provides_attrs << attr unless provides_attrs.include?(attr)
80
- end
81
- end
82
-
83
- # set the attributes depended on by the plugin
84
- #
85
- # @param attrs [Array]
86
- def self.depends(*attrs)
87
- attrs.each do |attr|
88
- depends_attrs << attr unless depends_attrs.include?(attr)
89
- end
90
- end
91
-
92
- # set the plugin optional state
93
- #
94
- # @param opt [Boolean]
95
- def self.optional(opt = true)
96
- @optional = opt
97
- end
98
-
99
- # check if the plugin is optional
100
- #
101
- # @return [Boolean]
102
- def self.optional?
103
- !!@optional
104
- end
105
-
106
- # define data collection methodology per os
107
- #
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
116
- end
117
- end
118
-
119
- # @return [Array]
120
- def dependencies
121
- self.class.depends_attrs
122
- end
123
-
124
- def run_plugin
125
- collector = self.class.data_collector
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?
139
- instance_eval(&collector[:default])
140
- elsif collector.key?(:target) && nonruby_target?
141
- instance_eval(&collector[:target])
142
- else
143
- logger.trace("Plugin #{name}: No data to collect. Skipping...")
144
- end
145
- end
146
-
147
- def optional?
148
- self.class.optional?
149
- end
150
-
151
- def provides(*paths)
152
- logger.warn("[UNSUPPORTED OPERATION] 'provides' is no longer supported in a 'collect_data' context. Please specify 'provides' before collecting plugin data. Ignoring command 'provides #{paths.join(", ")}")
153
- end
154
-
155
- def require_plugin(*args)
156
- logger.warn("[UNSUPPORTED OPERATION] 'require_plugin' is no longer supported. Please use 'depends' instead.\nIgnoring plugin(s) #{args.join(", ")}")
157
- end
158
-
159
- def configuration(option, *options)
160
- return nil if plugin_config.nil? || !plugin_config.key?(option)
161
-
162
- value = plugin_config[option]
163
- options.each do |opt|
164
- return nil unless value.key?(opt)
165
-
166
- value = value[opt]
167
- end
168
- value
169
- end
170
-
171
- private
172
-
173
- def plugin_config
174
- @plugin_config ||= fetch_plugin_config
175
- end
176
-
177
- def fetch_plugin_config
178
- # DMI => ["DMI"]
179
- # Memory => ["", "Memory"]
180
- # NetworkListeners => ["", "Network", "", "Listeners"]
181
- # SSHHostKey => ["SSH", "Host", "", "Key"]
182
- parts = name.to_s.split(/([A-Z][a-z]+)/)
183
- # ["DMI"] => ["DMI"]
184
- # ["", "Memory"] => ["Memory"]
185
- # ["", "Network", "", "Listeners"] => ["Network", "Listeners"]
186
- # ["SSH", "Host", "", "Key"] => ["SSH", "Host", "Key"]
187
- parts.delete_if(&:empty?)
188
- # ["DMI"] => :dmi
189
- # ["Memory"] => :memory
190
- # ["Network", "Listeners"] => :network_listeners
191
- # ["SSH", "Host", "Key"] => :ssh_host_key
192
- snake_case_name = parts.map(&:downcase).join("_").to_sym
193
-
194
- # Plugin names in config hashes are auto-vivified, so we check with
195
- # key? to avoid falsely instantiating a configuration hash.
196
- if Ohai.config[:plugin].key?(snake_case_name)
197
- Ohai.config[:plugin][snake_case_name]
198
- end
199
- end
200
- end
201
- end
202
- end
203
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Serdar Sutay (<serdar@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
16
+ # implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ module Ohai
22
+ module DSL
23
+ class Plugin
24
+ # The class for the "Version 7" plugin format we introduced in Ohai 7. This is the 2nd
25
+ # generation of Ohai plugin and the previous generation (V6) was removed in Ohai 14
26
+ class VersionVII < Plugin
27
+ attr_reader :version
28
+ attr_reader :source
29
+
30
+ def initialize(data, logger)
31
+ super(data, logger)
32
+ @source = self.class.sources
33
+ @version = :version7
34
+ end
35
+
36
+ # the plugin name we use through Ohai (Foo) vs. the class name (Ohai::NamedPlugin::Foo)
37
+ #
38
+ # @return [String]
39
+ def name
40
+ self.class.name.split("Ohai::NamedPlugin::")[1].to_sym
41
+ end
42
+
43
+ # return that we're a v7 plugin
44
+ #
45
+ # @return [Symbol]
46
+ def self.version
47
+ :version7
48
+ end
49
+
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
52
+ #
53
+ # @return [Array]
54
+ def self.sources
55
+ @source_list ||= []
56
+ end
57
+
58
+ def self.provides_attrs
59
+ @provides_attrs ||= []
60
+ end
61
+
62
+ def self.depends_attrs
63
+ @depends_attrs ||= []
64
+ end
65
+
66
+ # A block per os for actually performing data collection constructed
67
+ # by the collect_data method
68
+ #
69
+ # @return [Mash]
70
+ def self.data_collector
71
+ @data_collector ||= Mash.new
72
+ end
73
+
74
+ # set the attributes provided by the plugin
75
+ #
76
+ # @param attrs [Array]
77
+ def self.provides(*attrs)
78
+ attrs.each do |attr|
79
+ provides_attrs << attr unless provides_attrs.include?(attr)
80
+ end
81
+ end
82
+
83
+ # set the attributes depended on by the plugin
84
+ #
85
+ # @param attrs [Array]
86
+ def self.depends(*attrs)
87
+ attrs.each do |attr|
88
+ depends_attrs << attr unless depends_attrs.include?(attr)
89
+ end
90
+ end
91
+
92
+ # set the plugin optional state
93
+ #
94
+ # @param opt [Boolean]
95
+ def self.optional(opt = true)
96
+ @optional = opt
97
+ end
98
+
99
+ # check if the plugin is optional
100
+ #
101
+ # @return [Boolean]
102
+ def self.optional?
103
+ !!@optional
104
+ end
105
+
106
+ # define data collection methodology per os
107
+ #
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
116
+ end
117
+ end
118
+
119
+ # @return [Array]
120
+ def dependencies
121
+ self.class.depends_attrs
122
+ end
123
+
124
+ def run_plugin
125
+ collector = self.class.data_collector
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?
139
+ instance_eval(&collector[:default])
140
+ elsif collector.key?(:target) && nonruby_target?
141
+ instance_eval(&collector[:target])
142
+ else
143
+ logger.trace("Plugin #{name}: No data to collect. Skipping...")
144
+ end
145
+ end
146
+
147
+ def optional?
148
+ self.class.optional?
149
+ end
150
+
151
+ def provides(*paths)
152
+ logger.warn("[UNSUPPORTED OPERATION] \'provides\' is no longer supported in a \'collect_data\' context. Please specify \'provides\' before collecting plugin data. Ignoring command \'provides #{paths.join(", ")}")
153
+ end
154
+
155
+ def require_plugin(*args)
156
+ logger.warn("[UNSUPPORTED OPERATION] \'require_plugin\' is no longer supported. Please use \'depends\' instead.\nIgnoring plugin(s) #{args.join(", ")}")
157
+ end
158
+
159
+ def configuration(option, *options)
160
+ return nil if plugin_config.nil? || !plugin_config.key?(option)
161
+
162
+ value = plugin_config[option]
163
+ options.each do |opt|
164
+ return nil unless value.key?(opt)
165
+
166
+ value = value[opt]
167
+ end
168
+ value
169
+ end
170
+
171
+ private
172
+
173
+ def plugin_config
174
+ @plugin_config ||= fetch_plugin_config
175
+ end
176
+
177
+ def fetch_plugin_config
178
+ # DMI => ["DMI"]
179
+ # Memory => ["", "Memory"]
180
+ # NetworkListeners => ["", "Network", "", "Listeners"]
181
+ # SSHHostKey => ["SSH", "Host", "", "Key"]
182
+ parts = name.to_s.split(/([A-Z][a-z]+)/)
183
+ # ["DMI"] => ["DMI"]
184
+ # ["", "Memory"] => ["Memory"]
185
+ # ["", "Network", "", "Listeners"] => ["Network", "Listeners"]
186
+ # ["SSH", "Host", "", "Key"] => ["SSH", "Host", "Key"]
187
+ parts.delete_if(&:empty?)
188
+ # ["DMI"] => :dmi
189
+ # ["Memory"] => :memory
190
+ # ["Network", "Listeners"] => :network_listeners
191
+ # ["SSH", "Host", "Key"] => :ssh_host_key
192
+ snake_case_name = parts.map(&:downcase).join("_").to_sym
193
+
194
+ # Plugin names in config hashes are auto-vivified, so we check with
195
+ # key? to avoid falsely instantiating a configuration hash.
196
+ if Ohai.config[:plugin].key?(snake_case_name)
197
+ Ohai.config[:plugin][snake_case_name]
198
+ end
199
+ end
200
+ end
201
+ end
202
+ end
203
+ end